home *** CD-ROM | disk | FTP | other *** search
- ----------------------------------------------------
- lxLite - ein Packer fuer ausfuehrbare OS/2-Dateien
- ----------------------------------------------------
-
- Widmung: Meiner kleinen Tochter Alice,
- geboren am 12 Feb, 1996 um 03:45.
-
- 0. Version der deutschen Dokumentation
- --------------------------------------
-
- Die deutsche Uebersetzung basiert auf der englischen Dokumentation zu
- lxLite 1.1.5.
-
- 1. Distribution
- ---------------
-
- Dieses Programm ist Freeware. Das heisst, man kann es verbreiten, wie
- man will, ausser fuer den kommerziellen Gebrauch. Kommerzielle Verwendung
- ist nur mit meiner ausdruecklichen Zustimmung erlaubt. Wie man mich
- kontaktieren kann ist in der letzten Sektion dieser Datei zu sehen.
-
- Freeware heisst aber auch, dass es keinerlei Garantie fuer das gibt, was
- das Programm macht, ob es das macht was man erwartet, ob es ueberhaupt
- etwas macht. Ich uebernehme keinerlei Verantwortung fuer irgendeinen
- Schaden, entgangene Profite etc., die durch Fehler dieses Programms (oder
- der Uebersetzung der Dokumentation) verursacht werden.
-
- Wie auch immer, es ist erlaubt, das Programm dazu zu verwenden, um
- jedes, auch jedes kommerzielle Produkt zu verbessern. Und zwar nicht um den
- eigenen Vorteil, sondern um den Vorteil aller armen User, die sich mit
- riesigen Programmdateien herumaergern muessen.
-
- Das Programm ist ausschliesslich in Virtual Pascal 1.0 Beta #003,
- geschrieben, vor allem mit dem eingebauten 32-bit Assembler. Virtual Pascal
- ist eine excellente Sprache, die alle Vorteile und Moeglichkeiten von OS/2
- bedient und unterstuetzt, gleichzeitig Borland Pascal kompatibel ist, und
- einen maechtigen eingebauten Optimierer hat.
-
- Falls du den Source Code von lxLite willst, bitte wende Dich an mich,
- aber du musst mir ganz sagen WARUM du ihn brauchst; Leute, die fremde
- Programme unter eigenem Namen verkaufen wollen, bekommen ihn sicher nicht.
-
- 2. Einfuehrung
- -------------
-
- Ich denke, wir alle sind recht sauer ueber die gewaltige Groesse die
- fast alle modernen Programme haben, die unter OS/2 laufen (fuer WinDOS gilt
- allerdings das gleiche), ohne oft entscheidend mehr zu koennen als
- Programme frueherer Zeiten. Ich verstehe nicht, warum sie so gross sind,
- weil die meisten Compiler, sogar IBM CSet generieren Code in moderaten
- Groessen.
-
- Nehmen wir als Beispiel das allseits bekannte MultiMaint. Was um alles
- in der Welt macht das Ding in einer 700K grossen EXE-Datei? Ich verstehe es
- nicht. Dazu kommt noch, warum wird die beinahe gleiche EXE-Datei noch
- doppelt und dreifach dazugepackt (Ich meine MultiSafe und IniMaint, die mit
- MultiMaint daherkommen). Das Programm ist ja ganz nett und es macht seine
- Arbeit ganz gut, aber fuer diese Arbeit ist es einfach zu gross. OS/2
- Kernel haben etwa den gleichen Umfang. Wo ist da die Relation? Ich kann
- (und will) es mir einfach nicht leisten so einen grossen Haufen Mist auf
- meine Platte zu laden, also habe ich MultiMaint & Co. wieder gekuebelt. Zu
- Dumm fuer deren Autoren.
-
- lxLite ist ein Workaround fuer dieses Problem. Programmdateien kann man
- packen, sie nehmen dann nur noch den halben Platz ein, und machen noch
- immer den glichen Job. Dummerweise braucht es auch den gleichen Platz im
- Speicher - das ist die Schuld des Autors.
-
- Soviel ich weiss, gibt es fuer OS/2 nur ein Programm, das etwas
- Aehnliches macht REPACK von IBM (EWS?). Aber vergleichen mit lxLite erzeugt
- es groessere Dateien, obwohl es den gleichen Algorithmus verwendet. Zum
- Beispiel, COURIER.FON aus OS/2 Warp Build 8.192 wird von REPACK zu 44K, von
- lxLite aber in 34K gepackt. Spuer den Unterschied! BTW, LINK386+Ressource
- Compiler compilieren COURIER.FON auch in ein 44K-Datei. Daher denke ich,
- dass das sie eine gemeinsame Library verwenden.
-
- Ich komprimierte alle meine Programmdateien (inklusive aber nicht nur
- ?:\os2\*.exe, ?:\os2\dll\*.* und ?:\os2\dll\ibmnull;laserjet) und mein
- System ist nach wie vor stabil. Ein lxLite Benutzer (Pavel Roskin) hat
- festgestellt, dass lxLite sogar os2krnl komprimiert:-) Sehr angenehm vor
- allem fuer eine einzelne Bootdiskette [Anmerkung d. Uebersetzers: Es
- stimmt].
-
- 3. Features
- -----------
-
- lxLite komprimiert die Dateien auf die gleiche Art wie LINK386 es tut.
- Es gibt keine andere Moeglichkeit gepackte Programmdateien unter OS/2 zu
- implementieren, als die zwei, die OS/2 Warp (oder die eine die 2.x) kennt.
- So, hier ist eine kurze Beschreibung dieser beiden Algorithmen:
-
- 1. Run-length packing. Das ist im Prinzip die gleiche Methode, wie sie
- Microsoft C fuer DOS verwendet. Das Ergebnis ist sehr SCHLECHT, weils sich
- Programmdateien nicht fuer die Pack-Methode eignen. Zum Beispiel, PCX
- Dateien werden auf die gleiche Art gepackt.
-
- 2. Eine Art Lempel-Ziv Algorithmus. Lempel-Ziv ist die Methode, die
- beinahe alle DOS-EXE Packer verwenden - LZEXE, PKLITE, PGMPAK etc. Die
- Methode die fuer ausfuehrebare OS/2 Dateien standardisiert ist, ist IMHO
- nicht die effektivste. Dazu kommt noch, dass OS/2-Programmdateien einen
- anderen Ladealgorithmus haben als DOS-EXE-Dateien, Teile von
- OS/2-Programmdateien koennen auch nur geladen werden, wenn sie gebraucht
- werden. Deshalb kann ein Lempel-Ziv Woerterbuch nicht ueber eine einzelne
- Page (4096 Bytes) hinausgehen. Folglich sind die Resultate auch nicht so
- gut, wie sie theoretisch sein koennten.
-
- lxLite kann beide Methoden verwenden, sowohl zum Packen, als auch zum
- Entpacken. Im Allgemeinen ergibt die zweite Methode die besseren Resultate,
- aber moeglicherweise (?) gibt es Dateien fuer die die erste besser ist. Aus
- diesem Grund werden defaultmaessig beide Methoden angewendet, die mit dem
- kleineren Ergebnis gewaehlt. lxLite kann auch benutzt werden, um Dateien zu
- entpacken, die bereits komprimiert sind, sei es mit mit lxLite, LINK386
- oder REPACK von IBM.
-
- Was fuer Dateien koennen nun mit lxLite gepackt werden? Das LX Format
- wird unter OS/2 beinahe ueberall verwendet: Beinahe alles ist im LX format.
- Nicht nur EXE-Dateien, sondern auch .DLL, .PDR, .QPR, .DRV, .FON,
- .SYS-Dateien koennen mit lxLite gepackt werden. Sogar die VDDs (Virtual
- Device Drivers) in \OS2\MDOS koennen damit gepackt werden. Praktisch kann
- man lxLite auf jedes Datei loslassen: Wenn es kein LX ist, wird lxLite es
- nicht anruehren.
-
- Es ist also moeglich, den ganzen \OS2\*\ zu komprimieren, man bekommt
- jede Menge Extraplatz ohne irgendwelchen Overhead! Die Dekompressionszeit
- wird durch die verkuerzten Ladezeiten der verkleinerten Dateien von der
- Platte bei weitem aufgewogen. Also, Reboot von einer Diskette (eventuell
- von den beiden Installationsdisketten und dann F3 waehlen, dann das
- entsprechende Laufwerk waehlen, wo das installierte OS/2 liegt. Dann ist
- folgendes beim Command prompt einzugeben:
-
- \[path]\lxLite os2\*.exe os2\dll\*.* os2\dll\ibmnull\*.drv
-
- und so weiter. So koennen auch die Dateien, welche zur Laufzeit
- normalerweise gesperrt (EXE,DLL) sind, problemlos gepackt werden.
-
- lxLite Version 1.00 und hoeher ist sogar in der Lage Dateien, die gerade
- benutzt werden, zu packen. In diesem Fall kann warnt lxLite und fragt nach
- ob es das Modul auslassen oder durch seine gepackte Version ersetzen soll.
- Grundsaetzlich ist das ersetzen auch so kein Problem, nur muss man im
- Hinterkopf behalten, dass das Original bereits im Speicher sitzt, und so
- auch jede Menge Platz im SWAPPER.DAT auffressen. Ein Reboot sobald wie
- moeglich ist daher immer eine gute Idee.
-
- Versionen von lxLite ueber 1.00 gibt es in zwei verschiedenen
- EXE-Dateien: lxLite.exe ist die normale Version fuer OS/2 v2.99, Warp und
- hoeher. Die andere, namens lxLite2x.exe ist fuer die aelteren 32 bit
- Versionen von OS/2 (i.e. 2.x, NICHT 1.x weil unter 1.x gab es das LX Format
- noch nicht). Als OS/2 Warp User kann man es getrost loeschen.
-
- Version 1.1.0 und Hoeher erkennen Programme, die Daten nach der eigent-
- lichen LX-Struktur stehen (i.e. was auf DOS overlay data heisst).
- Watcom`s gebundene Programme (wie WCC.EXE Versionen >= 10.0) und Watcom
- Visual Rexx Programme haben so eine Struktur. In diesem Fall erzeugt
- lxLite eine Warnung und ersucht um Bestaetigung, ob ein solches Programm
- wirklich gepackt werden soll. Es ist SEHR empfehlenswert, dass zuerst eine
- Kopie von diesem Programm gemacht wird, bevor man es zu packen versucht,
- denn die Chance, dass es danach nicht mehr geht, ist sehr hoch. Das
- deshalb, weil lxLite (natuerlich) keine (prinzipiell moeglichen) Pointer
- innerhalb des Programms, die auf Daten, die an das Programm gebunden sind
- (wie zum Beispiel VX-REXX Programme), veraendert.
-
-
-
-
- 4. Optionen
- -----------
-
- Es gibt jede Menge Optionen in lxLite. Ich liebe Optionen einfach :-)
- Deshalb kann man bei lxLite beinahe alles und jedes konfigurieren. Um den
- User vor allzuviel Konfiguration zu schuetzen, unterstuetzt lxLite eine
- einzelne Konfigurationsdatei, in der gleich einige Konfigurationen
- mitgeliefert ('factory defaults') sind. Sie sind weiter unten aufgelistet:
- ---------------------------------------------------------------------------
-
- DEFAULT (wird standardmaessig geladen): DEFAULT ist eine `Arbeitskonfigura-
- tion'. Alle Parameter sind auf maximale Kompression gesetzt. Die Er-
- zeugung von .BAK Dateien ist abgeschaltet. Beachte, dass diese
- Konfiguration IMMER geladen wird, bevor irgendwelche andere Optionen
- wirksam werden, sogar die /C{#} Option wird ausgefuehrt NACHDEM die
- DEFAULT- Konfiguration geladen Worten ist.
-
- FAST: Niedrigste Kompressionsrate, kuerzeste Ladezeiten. Wenn man IBM
- glaubt, werden Programmdateien schneller geladen, wenn Datenobjekte
- innerhalb der Datei an Sektorgrenzen (512 Bytes) ausgerichtet werden.
- Ich kann eigentlich keinen Unterschied feststellen, daher: Selber
- ausprobieren! Vorkomprimierte Daten werden nicht de-komprimiert und
- wieder re-komprimiert.
-
- FAST2: Packt ein bisschen besser, aber langsamer. Ladezeiten sind so
- schnell wie bei CFG#1.
-
- VER2X: Optimal fuer pre-Warp Versionen von OS/2. Versionen vor Warp (3.0)
- wissen nichts von der Lempel-Ziv (/EXEPACK:2) Methode. Programme sollten
- nicht mit Lempel-Ziv gepackt werden, falls die Moeglichkeit besteht,
- dass sie unter OS/2 2.xx (ausser 2.99) laufen sollen.
-
- FAILSAFE: Lempel-Ziv packen ist eingeschaltet. Ein fehlersichere Konfigura-
- tion. Alle Daten werden genau wie von LINK386 geschrieben, deshalb sind
- die Dateien etwas groesser als bei der DEFAULT-Konfiguration. Nur fuer
- WARP (oder hoeher) und 2.99!
-
- MAX: Beste Kompressionsrate. SEHR LANGSAM! Wird wohl selten gebraucht wer-
- den.
-
- NEWSTUB: Das ist eine spezielle Konfiguration mit der man den DOS-Stub in
- LX Programmen durch einen anderen ersetzen kann, ohne irgendetwas
- anderen zu veraendern. Du musst einen Dateinamen fuer den neuen Stub
- angeben - diese Konfiguration teilt lxLite mit, dass es alte, gepackte
- Objekte nicht entpackt und unkomprimierte Objekte nicht packt.
-
- MINSTUB: Diese Konfiguration ist mit NEWSTUB verbunden und ersetzt durch
- den kleinstmoeglichen Stub vom Typ `say-error-and-exit`. Kleiner gehts
- nimmer (glaub ich zumindest), ausser du kuerzt die Fehlermeldung.
-
- VDMSTUB: Diese Konfiguration befiehlt lxLite, den vorgefundenen Stub durch
- einen`run-from-VDM`-Type zu ersetzen. Dieser ist auch so kurz, wie
- moeglich:-). Bitte die Beschreibung der /T{#} Option fuer weitere
- Details durchlesen.
-
- INFO: Diese Konfiguration verwenden, um an Informationen ueber die
- Programmdatei zu erhalten ohne es neu zu schreiben (siehe auch Option
- /V+)
-
- ---------------------------------------------------------------------------
-
- Um eine spezifische Konfiguration zu verwenden, ist lxLite mit /C# als
- Parameter aufzurufen, wobei # der Name der Konfiguration ist. Die Einstel-
- lungen sind in der Datei lxLite.CFG im gleichen Verzeichnis, in dem sich
- lxLite.EXE befindet. Kuemmere dich nicht um Pfade, lxLite wird sein .CFG
- schon finden. Beispiel: Um die Konfiguration `max` zu verwenden, starte
- lxLite /cMax.
-
- Fuer eine detailierte Beschreibung des .CFG-Dateiformats, lies die ueber-
- naechste Sektion.
-
- Nun kommt eine detaillierte Erklaerung darueber was jeder einzelne Switch
- tut. Jeder Switch, der das '+'- oder '-'-Zeichen akzeptiert (um Aktion ein-
- oder auszuschalten) kann auch ohne Zeichen benutzt werden, das heisst dann
- halt '+'. Das heisst z.B., /V+ ist gleich wie /V.
-
- /A{P|S|N{P|S}}
- setzt die Ausrichtungsmethode (Alignment) fuer das erste und die
- weiteren Objekte. Das erste Objekt kann man auf [P]age shift, [S]ector
- oder [N]o boundary ausrichten. Die letzte Option (No boundary) wird von
- LINK386 niemals benutzt, aber es funktioniert, und das LX Format erlaubt
- es. Alle Objekte ausser dem ersten MUeSSEN zumindest auf PageShift
- boundary ausgerichtet sein. PageShift ist ein Wert, der im LX Header
- spezifiziert ist. Um ihn neu zu definieren, verwende die /R# Option.
-
- /B{+|-}
- Das Umbenennen der Originaldatei in .BAK ein- (+) oder ausschalten (-).
- Beachte bitte, dass das eine BETA-Version ist - deshalb sind .BAK
- Dateien standardmaessig eingeschaltet.
-
- /C{#}
- Verwenden der Konfiguration mit ID = #. Die zwei vordefinierten
- Konfigurationsnamen sind "DEFAULT" und "UNPACK". Die Erste wird immer
- geladen, wenn lxLite startet und die Zweite wird benutzt wenn die /X+
- Option angegeben wird (NICHT gleichbedeutend mit /cUnpack).
-
- /D{#}
- Ausschliessen[D]e Dateimaske. Alle Dateien die zu einer der angegebenen
- Dateimasken passen, werden von lxLite uebergangen. Alle Dateimasken
- muessen durch Doppelpunkte (:) voneinander getrennt sein (weil ein :
- nicht Teil einer Maske sein kann). Zum Beispiel wird /D*.zip:*.arj:*.rar
- lxLite daran hindern .zip, .arj and .rar Dateien zu bearbeiten.
- Standardmaessig (/Cdefault) enthaelt eine Liste aller Progreammdateien,
- von denen bekannt ist, dass sie nicht richtig gepackt werden koennen.
- Mehrere /D-Switches hintereinander werden addiert, daher ist /D*.zip
- /D*.arj /D*.rar das gleiche wie das obige Beispiel. Um die Liste zu
- loeschen ist einfach /D zu verwenden.
-
- /F{+|-}
- Erzwungenes repacking. Ist zu verwenden um die Meldung `already
- processed` zu uebergehen, i.e. wenn lxLite denkt, dass die Datei schon
- bearbeitet wurde, das aber in Wirklichkeit nicht der Fall war. Das
- passiert normalerweise nicht, kann aber passieren, wenn man versucht
- einen Stub durch einen anderen Stub derselben Groesse zu ersetzen, und
- zwar bei einer bereits komprimierten Datei.
-
- /G[X|D|S]{#}
- e[X]tra / [D]ebug / [S]tub Daten werden in die spezifizierte Datei
- [G]eschrieben. Wenn lxLite eine LX Datei findet, die solche Daten
- enthaelt, und man diese Daten verwerfen (oder ersetzen bei einem
- Stub) will, wird lxLite sie in die spezifizierte Datei stellen, bevor
- sie verworfen werden. Die {#} Komponente kann auch eine Dateimaske sein,
- sodass man Daten in Dateien mit demseleben Namen, aber einem anderen
- Extender schreiben kann. Zum Beispiel /GD*.dbg teilt lxLite mit, dass es
- zu verwerfende Debug-Informationen in Dateien mit demselben Namen aber
- der Endung ".dbg" schreiben soll; der switch /GS*.stub.$s$ auf die Datei
- "myfile.exe" schreibt den Stub in die Datei "myfile.stub.$s$". Siehe
- auch die /O Option.
-
- /I{+|-}
- Zwingt (+) lxLite dazu, mit Idle Prioritaet zu laufen. Das heisst, es
- arbeitet nur, wenn keine andere Aktivitaet im System herrscht (d.h. es
- wartet auf Tasten und Mausbewegungen). Das ist meiner Meinung nach am
- besten, da lxLite so im Hintergrund laufen kann und die Performance
- beinahe ueberhaupt nicht beeinflusst. Nur wenn man eine ungezogene
- DOS-Box laufen hat, die sich alle CPU-Zeit schnappt, bleibt lxLite
- stehen. Wenn lxLite nun mit /I- gestartet wird aendert es seine
- Prioritaet nicht auf Idle, und daher mit einer bestimmten Prioritaet
- (z.B. via PRIORITY.EXE) gestartet werden.
-
- /L{#}
- Instruirt lxLite ein Logfile anzulegen. Es enthaelt nur die Dateien, die
- lxLite auch bearbeitet, uebergangene Dateien werden hier nicht aufgenom-
- men. wenn kein Name angegeben ist, wird lxLite.log im Verzeichnis in
- dem sich auch lxLite.exe befindet verwendet. Neben dem Dateinamen wird
- die Anfangs- und Endgroesse und die Probleme (falls welche auftraten).
-
- /M{R{N|1|2|3}|L{N|1}}
- Setzt die Kompressionsmethode und -parameter. Das zweite Zeichen
- definiert die Methode, die verwendet werden soll: `R` steht fuer
- Run-Length (/EXEPACK:1) und 'L' fuer Lempel-Ziv (/EXEPACK:2). Das dritte
- Zeichen ist der Kompressionslevel, der mit der Methode erreicht werden
- soll; Falls N spezifiziert wird, ist die Methode abgeschaltet. Drei
- Levels gibt es fuer die Run-Length-Kompression. Der Level 1 ist der
- schnellste. Er sucht nur nach 1-Zeichen Strings. Zum Beispiel, ein
- 'AAAAAAAA' String wird erkannt und zu 8, 1, 'A' gespeichert, waehrend
- ein 'ABABABAB' String unkomprimiert gespeichert wird. Level 2 erkennt
- Strings jeder Laenge bis 16 Zeichen. Das Beispiel von oben wird zu
- 4,2,'AB' kodiert. Das ist die Standardeinstellung fuer die meisten
- 'Factory`-Konfigurationen. Und als letztes, der dritte Level sucht nach
- allen Strings jeder Laenge bis zu einen halben Page-Laenge (= 2048).
- Diese Kompressionsmethode ist SEHR langsam und ergibt selten echte
- Ergebnisse, man sollte sie nur verwenden wenn man sie wirklich braucht.
- Der Lempel-Ziv Algorithmus kann nur entweder abgeschaltet (/MLN) oder
- eingeschaltet (/ML1) sein. Wenn er eingeschaltet ist, sucht er nach al-
- len Matches unter Verwendung einer ziemlich schnellen Hash-Tabelle, des-
- halb gibts keinen Grund die Kompression abzustufen.
-
- /O{X|D|S}{+|-}.
- [O]utput e[X]tra/[D]ebug/[S]tub Daten immer (+) oder nur wenn verworfen
- (-). Wenn es abgeschaltet ist (/O-, Standard) arbeitet der /G Switch
- wie vorher, i.e. Daten werden nur geschrieben, wenn sie in der Quellda-
- tei verworfen werden sollen. Wenn die /O+ Option benutzt wird, werden
- die Daten immer geschrieben (wenn die entsprechende Dateimaske in /G
- Option angegeben wurde). Falls {X|D|S} nicht angegeben wird, gilt die
- Option fuer allen Arten von Daten (Extra,Debug,Stub) (i.e. /O+ schaltet
- das Feature fuer alle X/D/S Daten ein, /O- schaltet es fuer alle ab).
-
- /P{+|-}
- Ein- (+) oder ausschalten (-) einer Pause vor jeder Datei. Das Programm
- zeigt den Namen der Datei, die als naechstes gepackt werden soll, und
- ermoeglich eine Auswahl, ob sie bearbeitet oder in Ruhe gelassen werden
- soll.
-
- /Q
- Alle Konfigrationsoptionen abfragen. Im Prinzip ist das ein buntes
- Listing der lxLite.cfg Datei :-) Andere Optionen falls vorhanden, werden
- ignoriert.
-
- /R{#}
- [R]e-align (ausrichten) der Pages auf eine spezielle Boundary. (#) muss
- eine Potenz von 2 sein. Diese Option ist analog zu LINK386`s /ALIGN:
- Switch. Viele Programmierer kuemmern sich nicht darum, dass das /A:
- standardmaessig auf eine Boundary von 512 (ein Sektor) gesetzt ist und
- richten jede Page der ausfuehrbaren Module auf 512 Byte aus. Das
- Ergebnis ist ein Haufen unbenutzter Platz innerhalb der Programmdatei.
- Man kann nun solche Dateien mit einer anderen /ALIGN: Option neu linken.
- Standardmaessig ist /R:4. Um lxLite zu zwingen sich wie LINK386, muss
- man /R:512 verwenden. Das ist equivalent zu /ASS :-) .
-
- /S{+|-}
- Zeigen (+) oder nicht zeigen (-) der aktuellen Konfiguration. Das ist
- ganz brauchbar, um mal zu schauen welche Einstellungen in der CFG-Datei
- gespeichert sind, besonders bei verketteten Konfigurationen (siehe
- weiter unten). Beispiel: lxLite /CDEFAULT /S zeigt die
- standardmaessigen Einstellungen.
-
- /T{#}
- Die mit # spezifizierte Datei als neuen DOS-Stub verwenden. Ein DOS-Stub
- ist eine kleine DOS-.EXE-Datei, die in eine OS/2`s LX-Datei gelinked
- wird, damit das Programm eine Fehlermeldung ausgibt, wenn es von DOS aus
- gestartet wird. Normalerweise sieht das etwa folgend aus:
-
- Dieses Programm laeuft nur unter OS/2
-
- Mit lxLite kommen 2 DOS-Stub-Programme mit: stub_min.bin und
- stub_vdm.bin. Der erste ist ein Standard-`Schreib geht nicht und Ende`
- Typ, aber er ist etwas kleiner als die ueblichen DOS-Stub-Programme die
- von den ueblichen Linkern erzeugt werden. Der zweite ist ein Stub, der
- eine neue OS/2-Session startet und das Programm daraus startet. Falls
- OS/2 nicht gefunden wird, die uebliche Fehlermeldung produziert.
- Standardmaessig laesst stub_vdm.bin OS/2 den Sitzungstyp bestimmen.
- Alternativ dazuy, kann man den Sitzungstyp auch in stub_vdm.bin
- festlegen. Dafuer braucht man einen Hexeditor - man muss nach dem String
- `SesType->' im Stub suchen und das Byte, das unmittelbar nach dem Pfeil
- kommt (->) durch den gewuenschten Sitzungstype ersetzen, wobei folgende
- Tabelle gilt:
-
- 00 - OS/2 session manager determines type (default)
- 01 - OS/2 full-screen session
- 02 - OS/2 windowed session
- 03 - PM application
- 04 - VDM full-screen session
- 07 - VDM windowed session
-
- /U{+|-}
- Ein- (+) oder ausschalten (-) des Entpackens einer Datei vor dem Packen.
- lxLite weiss wie man beide der beschriebenen Methoden zum Entpacken
- verwendet, deshalb ist die Option standardmaessig ist eingeschaltet.
- Ausschalten ist nur dann sinnvoll, wenn Zeit gespart werden soll.
-
- /V{+|-}
- Verbose (zeigt ein ganzen Haufen Dateiinformationen) Das ist der
- Schalter fuer Neugierige:-) Mit /V+ zeigt lxLite ein paar Informationen
- ueber die bearbeitete Datei an (um komplette Information ueber .LX
- Dateien zu bekommen, rate ich jedem exeHdr.EXE aus dem OS/2 Programmer`s
- Toolkit zu verwenden).
-
- /W{+|-}
- Ein- (+) oder ausschalten (-) ob das Ergebnis des Packens auf die Platte
- geschrieben werden soll. Standardmaessig ist es eingeschaltet (nona!),
- aber du kannst es ausschalten falls du die Informationen ueber /V+
- anschauen willst, ohne die Datei neu zu packen und frisch zu schreiben.
- Diese Option kann auch fuer debugging der Optionen nuetzlich sein.
-
- /X{+|-}
- e[X]pandieren (+) oder Packen (-) der uebergebenen Dateien. Diesen
- Switch verwendet man, um Dateien zu entpacken. lxLite kann sowohl
- Dateien, die es selbst komprimiert hat, als auch solche, die von anderen
- Programmen mit den Standardmethoden gepackt wurden. (i.e. Resource
- Compiler, LINK386, REPACK). /X- ist nicht identisch mit der /cUnpack
- Option.
-
- /Z{#}
- Diese Option setzt den `threshold` fuer lxLite und hilft so
- festzustellen, ob eine Stub ein `dummy` ist oder ob er eine spezielle
- Funktion hat. Es gibt einige Programme (zum Beispiel, \os2\xdfloppy.exe)
- die sowohl unter DOS als auch unter OS/2 laufen - in solchen Programmen
- ist die DOS Executable in der OS/2` LX als ein DOS stub implementiert.
- Standardmaessig (wenn man einfach /Z benutzt) lxLite haelt jeden Stubs
- der groesser als 1024 Bytes ist, fuer einen funktionellen, und daher hat
- die /T{#} Option auf diese keinen Effekt.
-
- /?,/H
- Zeigt eine kurze Hilfe an. Diese ist ganz brauchbar, wenn man einen
- Switch aus der ganzen Liste vergessen hat:-)
-
- ---------------------------------------------------------------------------
- Das .CFG Dateiformat ist so simpel wie moeglich: Es ist eine reine ASCII
- Textdatei, welche mit jedem beliebigen Texteditor bearbeitet werden kann.
- Jedes Zeichen nach einem Strichpunkt ';' wird ignoriert, i.e. damit koennen
- Kommentare in die Konfigurationsdatei eingesetzt werden:
-
- ; Diese Zeile ist ein Kommentar
-
- Jede Zeile, die mit einem Wort und einem Doppelpunkt beginnt (z.B.:
- "Wort:") wird als einzelne Konfiguration behandelt. Das Wort identifiziert
- die Konfiguration.
-
- Das ist ein Beispiel fuer einen Konfigurationseintrag:
-
- FAILSAFE: /APP /B- /G+ /R4 /MR2 /ML1 /P- /U+ /V-
-
- Wie man sieht stehen nach dem Doppelpunkt beliebige Switches, wie man sie
- auch in der Kommandozeile nach lxLite schreiben wuerde. Rekursive /C
- Optionen werden nicht ignoriert, so dass man mehrere Konfigurationen
- aneinander binden kann, aber die /C Option wird als letztes verarbeitet,
- das heisst von zwei ueberlappenden Optionen wird nur die letzte effektiv
- sein. Als Beispiel:
-
- here: /app /b- /g+
- da : /ass /b+ /p+ /chere
-
- "lxLite /cda " ist also gleichbedeutend mit "lxLite /app /b- /p+ /g+". Man
- beachte, dass lxLite auch weitere Aufrufe auf dieselbe Konfiguration
- ignoriert, um unendliche Schleifen zu vermeiden. Das bedeutet, "lxLite
- /cOne /" wird die `One` Konfiguration nur EINMAL laden.
-
- 5. Fehlermeldungen
- ------------------
-
- Wie die allermeisten normalen Programme erzeugt lxLite manchmal
- Fehlermeldungen :-) Manche von Ihnen erscheinen in aehnlichen Situationen
- haben aber unterschiedliche Ausloeser. Hier ist eine kurze Liste der
- haeufigsten Fehler:
-
- * Invalid Konfiguration Datei format:
- Ungueltiges Format der Konfigurationsdatei. Selbsterklaerend:-)
-
- * Error reading Konfiguration Datei:
- Diese Meldung wird nur generiert, wenn die Konfigurationsdatei phy-
- sisch nicht lesbar ist. Das Programm erzeugt keine Fehlermeldung falls
- die Konfigurationsdatei einfach fehlt.
-
- * Error writing Konfiguration Datei:
- Fehler beim Schreiben der Konfigurationsdatei. Selbsterklaerend:-)
-
- * Error reading executable
- Diese Meldung wird generiert, wenn die Programmdatei physisch nicht
- lesbar ist.
-
- * error writing executable
- Diese Meldung wird generiert, wenn die Programmdatei nicht mehr auf
- die Platte geschrieben werden kann. Das kann dann passieren, wenn auf
- der Platte zuwenig Platz ist, lxLite selbst ueberprueft das nicht.
-
- * invalid executable file format
- Die Datei ist nicht vom Format [L]inear E[x]ecutable. Bei EXE-Dateien
- kann diese Meldung auftreten, wenn sie im alten, '[N]ew [E]xe
- (bwhahaha)' Format sind oder eine DOS-EXE-Datei oder eine WinDOS- EXE-
- Datei.
-
- * unsupported executable format revision
- Diese Meldung wird generiert (vielleicht:-), wenn die Programmdatei
- eine andere Dateiformatrevision hat als 0. Da OS/2 Warp normalerweise
- nur mit Revision 0 arbeitet, duerfte dieser Fehler normalerweise nie
- auftreten.
-
- * invalid word/dword ordering in executable
- Die Datei verwendet die 'little-endian' Byte order. Wahrscheinlich ist
- sie nicht fuer eine Intel-Plattform-Maschine gedacht.
-
- * executable target ist an unsupported CPU type
- Das kann passieren, falls die Ziel CPU eine andere als 286, 386, 486
- oder P5 ist.
-
- * executable target ist an unsupported OS
- Das heisst, dass die Programmdatei nicht fuer OS/2 ist. WinDOS 95
- verwendet ein aehnliches Format, aber seine Kennung ist nicht LX
- sondern LE, daher sollte es normalerweise eine 'invalid format'
- Meldung geben.
-
- * unknown entry bundle type in executable
- * unknown page flags in executable
- * invalid object page detected in executable
- Diese alle bedeuten, dass lxLite etwas ueber die interne Struktur nicht
- versteht. Ich bitte um Benachrichtigung, falls jemand Dateien findet
- bei denen diese Fehlermeldungen auftreten.
-
- * nicht enough memory to load executable
- Ich glaube nicht, dass dieser Fehler unter OS/2 auftreten kann:-) Eher
- wird eine 'Kein Platz mehr im SWAPPER.DAT' Meldung auftauchen. Wie
- auch immer, ich finde, es war keine gute Idee der IBM-Programmierer
- einen Fehler zu erzeugen, statt auf die Speicheranfrage einfach einen
- NIL-Pointer zurueckzugeben:-(
-
- 6. To-do-Liste
- --------------
-
- Das ist eine Liste aller Features, die plane in zukuenftigen Versionen
- einzubauen. Jede Anregung ist willkommen, wie man mich erreicht, siehe
- letztes Kapitel.
-
- * Vielleicht eine Moeglichkeit, den LX Stub in VX-REXX Programmen zu
- packen; Ich weiss nur nicht obs wirklich gebraucht wird, der Unterschied
- in der Groesse macht gerade mal 18K aus - lxLite kann das echte Programm
- nicht packen, da es 1.) ausserhalb der LX-Struktur ist 2.) irgendwie
- verschluesselt ist und solche Daten ueberhaupt nicht gepackt werden
- koennen, PKZIP nicht einmal PKZIP kann das.
-
- * Vielleicht eine 'extra-pack'-Option, ich haette da eine Idee, wie man
- Programmedateien wirklich klein kriegt (kleiner als DOS-Packer jeden-
- falls:-); diese Programme wuerden dann aber nicht so wie ueblich
- arbeiten - sie waeren immer 'unlocked' (siehe auch das UNLOCK-Utility)
- i.e. sie werden im Swapfile landen, wenn nicht genaug Speicher da ist,
- sie werden nicht langsamer, aber das Swapfile wuerde dramtisch wachsen,
- wenn so ein Programm gestartet wuerde. Daher, sagt mir ob ihr sowas
- haben wollt, wenns genug Nachfrage gibt, mache ich es.
-
- 7. Bekannte Fehler und Einschraenkungen
- --------------------------------------
-
- Hier ist eine Liste von Programmen, die sich aus irgendeinem Grund nicht
- packen lassen, probieren sinnlos:
-
- * PMJPEG v1.5 bis 1.74. Wie auch immer, sogar IBM`s REPACK kann es nicht
- packen, ich denke, dass es sich entweder um einen Bug im Linker, der
- benutzt wurde, um es zu generieren (die ganze EXE hat eine seltsame
- Struktur) oder eine Art debug-Schutz (Pruefsummen?).
-
- * VX-REXX-Programme. Der Hauptteil des Programms (der verschluesslte
- REXX-Code) wird einfach an einen kleinen LX-Stub angehaengt. Diese
- Programme haben eine unbekannte Struktur und wenn lxLite den Stub
- komprimiert, funktionieren sie ueberhaupt nicht mehr.
-
- * Watcom C & C++ v>=10.0. Schaut so aus als wuerde Watcom gerne Muell an
- die Dateien anhaengen. Diese Dateien sind dafuer gedacht, sowohl unter DOS
- als auch unter OS/2 zu laufen und haben ebenfalls eine seltsame Struktur.
-
- * ZIPBRAND v1.11. Es ueberprueft, ob sein .EXE-File veraendert wurde,
- vermutet einen Virus und will dann nicht mehr laufen [Ergaenzung des Ueber-
- setzers].
-
- * InterCom.
-
-
- 8. Den Autor kontaktieren
- -------------------------
-
- Via Email bin unter folgenden Adressen erreichbar:
-
- FIDOnet: 2:5030/84.5 (ist mir am Liebsten)
- Internet: bit@freya.etu.ru
-
- Enjoy,
- _\ndy
-
- 9. Der Uebersetzer
- -----------------
-
- Ich war von Andys Programm so begeistert, dass ich ihm spontan angeboten
- habe, fuer ihn die Dokumentation der Version 1.01 ins Deutsche zu ueber-
- setzen. Manches klingt etwas holprig, aber erstens mache ich das nur
- hobbymaessig, zweitens bin ich kein professioneller Programmierer. Aber ich
- hoffe, es hilft trotzdem etwas. Die Uebersetzung zu 1.1.5 ist bereits ein
- kleines bisschen weniger holprig und enthaelt etwa 60 Tippfehler weniger
- als die zu 1.0.1.
-
- Via Email bin unter folgenden Adressen erreichbar (obwohl das ziemlich
- sinnlos ist, da ich ausser der Uebersetzung nichts beigesteuert habe):
-
- FIDOnet: Herwig Bauernfeind, 2:312/5.35 (ist auch mir am Liebsten)
- InterNet: H_BFD@fidonet.at (funktioniert zur Zeit aber nicht so gut)
-
-