Unser neuer Packer hält was sein Name verspricht: Turbo Packer ist enorm schnell, ungemein effektiv und bietet Fähigkeiten, die bisher noch kein Packer besitzt. Sein Geheimnis: Er biegt die Laderoutinen des Betriebssystems um.
Was ist überhaupt ein Packer? Kurz gesagt, ein Packer verkürzt Dateien und spart somit Speicherplatz. Dabei vernichtet er jedoch keine Daten, sondern faßt Bytefolgen zusammen. »Turbo Packer« verwendet dazu ein Verfahren, das Bytefolgen zu einer Referenz verkürzt, die bereits in der Datei vorgekommen sind.
Der größte Unterschied zu herkömmlichen Packern ist der Anwendungsbereich des Turbo Packers. Während etwa ARC und LZH ausschließlich zum Archivieren, d.h zum Aufbewahren vorläufig nicht benötigter Dateien dienen, lassen sich mit dem Turbo Packer Programme und Dateien verkürzen, die ständig im Einsatz sind. Vom Turbo Packer gepackte Programme werden beim Laden direkt in den Speicher entpackt und gestartet, wogegen ARC und LZH die gepackten Dateien vor dem Einsatz »auftauen« müssen.
Dieser Umstand stellt große Anforderungen an die Kompatibilität und Schnelligkeit des Packers, denen er jedoch so weit wie möglich nachkommt. Im Normalfall läßt sich jedes Programm problemlos packen, meistens wird es von Diskette sogar schneller geladen als die ungepackte Version.
Turbo Packer unterscheidet zwischen zwei Dateitypen: Exec- und Data-Files. Exec-Files sind im Normalfall Programme mit den Endungen PRG, TOS, TTP - also Programme, die Sie vom Desktop aus laden. Generell sind Exec-Files diejenigen, die mittels der Pexec-Funktion (GEMDOS $4b) geladen und reloziert werden. Gepackte Exec-Files bedürfen keiner Zusatzprogramme - sie sind sofort lauffähig.
Data-Files hingegen benötigen ein Entpack-Programm, das während des Ladens im Speicher vorhanden sein muß (siehe Erklärung zu DECOMP.PRG).
Unter Data-Files versteht man alle Dateien, die nicht mit der Pexec-Funktion gestartet, sondern wie eine normale Datei geöffnet (Fopen, GEMDOS $3d) und dann ausgelesen werden (Fread, GEMDOS $3f).
Der Packer testet nach dem Laden der Datei, ob es sich dabei um ein Programm handelt (erstes Wort $604a). Wenn nicht, so interpretiert er die Datei automatisch als Data-File. Identifiziert er es allerdings als ein Programm, so fragt Sie der Packer, ob er das Programm als Exec- oder als Data-File packen soll. Im ersteren Fall löscht der Packer eine ggf. vorhandene Symboltabelle und korrigiert die Reloziertabelle.
Soviel zur allgemeinen Unterscheidung der zwei Dateiarten Exec und Data. Kommen wir zur Bedienung des Packers. Nach dem Start erscheint ein Menü, in dem folgende Punkte zur Auswahl stehen:
Pack Files: Dieser Menüpunkt packt eine Datei oder einen ganzen Ordner. Zunächst erscheint die Dateiauswahlbox. Darin legen Sie das Laufwerk und den Pfad fest. Um eine einzelne Datei zu packen, klicken Sie diese an und drücken Return oder betätigen den OK-Knopf. Um komplette Ordner zu packen, wählen Sie lediglich den Pfad aus und lassen die Namenszeile leer.
Haben Sie einen Ordner ausgewählt, so müssen Sie nun den Zielpfad und Zielordner angeben. Der Ordner wird im angegebenen Zielpfad angelegt und nimmt die später gepackten Dateien auf. Der Packer beginnt daraufhin mit seiner Arbeit und lädt die erste Datei in den Speicher. Dateien, die kleiner gleich 1 KByte sind, packt er nicht, denn es würde auf der Diskette nicht mehr Platz frei. 1 KByte ist im Normalfall die kleinste Segmenteinheit auf einer Diskette.
Nach dem Laden fragt der Packer im Falle einer Programmdatei nach dem gewünschten Packverfahren. Um ein Programm in eine Exec-Datei zu packen, drücken Sie E, ansonsten D. Während des Packvorgangs erscheinen ständig zwei Zahlen auf dem Bildschirm. Erstere gibt an, wieviel Prozent von der ursprünglichen Datei bereits gepackt sind, die zweite gibt das Verhältnis zwischen ursprünglicher und gepackter Dateilänge an. Hier gilt: Je kleiner die Zahl, desto besser. 20 Prozent bedeutet beispielsweise, daß die gepackte Datei nur noch 20 Prozent der Länge der ursprünglichen Datei besitzt.
Falls dem Packer während der Arbeit der Speicher ausgeht, meldet er sich mit einer Nachricht und bricht den Packvorgang dieser Datei ab. Nach einem erfolgreichen Packvorgang speichert er die neue Datei im Zielpfad, sofern er die Datei um mehr als 5 Prozent verkleinert hat. Ansonsten bleibt die Datei im ursprünglichen Zustand und wird nicht gespeichert (Ausnahme: siehe Option »Switch skipflag«).
Ist nur eine Datei zu packen, so erscheint erneut die Dateiauswahlbox und der Vorgang Dateiauswahl-Packen wiederholt sich. Um wieder ins Hauptmenü zu gelangen, drücken Sie den ABBRUCH-Knopf. Haben Sie einen ganzen Ordner ausgewählt, so fährt Turbo Packer mit der nächsten Datei des Ordners fort.
Create DECOMP.PRG: Mit diesem Menüpunkt erzeugen Sie das für's Entpacken der Data-Files nötige Programm. Ist DECOMP.PRG einmal geladen, erweitert es die Laderoutine des Betriebssystems und entpackt automatisch alle gepackten Daten-Files. Genaueres dazu folgt später.
Turbo Packer fordert Sie zunächst auf, den Pfad und einen Namen einzugeben. Geben Sie keinen Namen an, so speichert der Packer das Programm im ausgewählten Pfad, ansonsten erzeugt er einen neuen Ordner unter dem eingebenen Namen im aktuellen Pfad. Das erzeugte Programm trägt immer den Namen DECOMP.PRG und sollte zweckmäßigerweise im AUTO-Ordner stehen.
Drives: In diesem Menüpunkt stellen Sie das Quell-und Ziellaufwerk für den Packvorgang ein. Auf dem Quellaufwerk befinden sich die Dateien bzw. Ordner, die der Packer auf dem Ziellaufwerk komprimiert ablegt. Dabei ist lediglich die Angabe von angemeldeten Laufwerken erlaubt. Besitzen Sie nur ein Laufwerk, so sollten Sie nur eine Laufwerkskennung verwenden (entweder nur A oder nur B), da GEM ansonsten dazwischenfunkt. Drücken Sie beispielsweise die Taste A um das Laufwerk A: zu selektieren. Durch Drücken einer unbelegten Taste kehren Sie ohne Veränderungen wieder ins Hauptmenü zurück.
Switch skipflag: Unter diesem Menüpunkt legen Sie fest, was mit Dateien geschieht, die wegen Speichermangels oder zu geringer Effektivität ungepackt bleiben. Haben Sie »Ignore skipped files« eingestellt, so ignoriert Turbo Packer diese Dateien. Mit »Copy skipped files« liest er diese Dateien nachträglich nochmals in den Speicher und sichert sie unter dem Zielpfad. Diese Einstellung ist nützlich, um sicherzustellen, daß der komplette Ordner übernommen wird. Info: Der Turbo Packer stellt sich vor.
Quit: Sie kehren wieder ins Desktop zurück.
Befassen wir uns nun genauer mit DECOMP.PRG: Wie bereits erwähnt, muß dieses Programm aktiv sein, wenn Sie mit gepackten Data-Files arbeiten wollen. Dazu müssen Sie das Programm einmal laden - es bleibt dann resident im Speicher. Zweckmäßigerweise liegt es im AUTO-Ordner.
Um das Laden von DECOMP.PRG aus dem AUTO-Ordner zu verhindern, drücken Sie kurz nach einem Reset eine Taste. DECOMP.PRG bricht dann ab, ohne sich im Speicher verankert zu haben. Wollen Sie ein bereits installiertes DECOMP.PRG wieder aus dem Speicher entfernen, so müssen Sie ebenfalls kurz nach einem Reset eine Taste drücken.
Im folgenden gehen wir genauer auf die Arbeitsweise des Packers und Entpackers ein. Im Textkasten finden Sie einige Tips, die Sie im Umgang mit dem Turbo Packer beachten sollten.
Der Packer arbeitet mit einem Packalgorithmus, der sich wiederholende Bytesequenzen mit einer Länge zwischen 3 und 18 Byte auf 2 Bytes verkürzt. In diesen 2 Bytes, der sog. Auspackinformation, ist die Länge der Sequenz und der relative Versatz (max. $fff Bytes) festgehalten (siehe Bild 1). Längere Sequenzen setzen sich dementsprechend aus mehreren solcher Auspackinformationen zusammen. Alle anderen Bytefolgen bleiben unverändert.
Um beim Entpacken festzustellen, wo in der gepackten Datei eine Auspackinformation statt normalen Datenbytes steht, fügt der Packer sog. Packbytes ein. Ein Bit gibt dem Entpacker Auskunft darüber, ob es sich im folgenden um eine Auspackinformation oder um ein Datenbyte handelt (siehe Bild 2).
Das Packverfahren zum Suchen der günstigsten bereits durchlaufenen Bytefolge dauert mit normalen Suchroutinen sehr sehr lange (GFA-Assembler ca. 15 Minuten). Aus diesem Grund arbeitet Turbo Packer mit mehreren Tabellen, die 192 KByte benötigen.
Dieses Verfahren beschleunigt den Packvorgang ungefähr um den Faktor 30, so daß es den GFA-Assembler in ca. 30 s packt.
Jetzt ein paar Worte zum Entpacker DECOMP.PRG. Er erweitert das Betriebssystem, so daß Sie über die Betriebssystemfunktionen wie etwa Pexec, Fread und Fseek auch gepackte Data-Files lesen können. Sie dürfen sogar den Dateizeiger in einer gepackten Datei setzen und somit gepackte Random-Dateien verwenden. Dabei sollten Sie lediglich beachten, daß der Entpacker bei Fseek die komplette Datei wegen den rückbeziehenden Bytesequenzen durchlesen muß. Dies führt bei größeren Seek-Distanzen zu einer erheblichen Geschwindigkeitseinbuße. Einzige Ausnahme ist das Setzen des Dateizeigers auf das Ende des Datei - das ist immer gleich.
Die Geschwindigkeit des Entpackers ist besonders optimiert, was sich auch in den kurzen Ladezeiten der gepackten Programme zeigt. Er beansprucht für sich den Bereich $600 bis $800 für den Reset-Einsprung und 64 KByte am oberen Speicherende, wobei der größte Teil dem Sicherheitspuffer (Dummypuffer) zugeordnet ist.
Es kann Komplikationen geben, wenn Programme einen Teil des Entpackers überschreiben. Das passiert dann, wenn sie sich nicht nach der Systemvariablen PFTYSTOP richten. Die Folge ist ein Absturz. Dasselbe geschieht, wenn ein Programm den Vektor des Trap verbiegt. Außerdem darf bei aktivem Entpacker höchstens eine Datei gleichzeitig geöffnet sein. Andernfalls beschwert sich der Entpacker mit Bildschirmflackern. Dateien, die nachträglich über- oder beschrieben werden, dürfen nicht gepackt werden, da sonst die Gefahr eines Datenverlustes besteht.
Turbo Packer ist samt dokumentierten Assembler-Quelltext im Archiv TPACKER abgelegt. Das Programm entstand mit dem GFA-Assembler 1.3. Assemblieren Sie den Quelltext mit sämtlichen Optimierungen, sonst funktioniert das Programm nicht. Ich hoffe, Turbo Packer wird Ihnen - wie auch mir und allen meinen Bekannten - eine unentbehrliche Hilfe, (ba)