BinPatch (10k)
V2.1
(12. offizielles Release für DOS, Win95, NT, OS/2 und Linux am 26.3.98)

 1. Was ist BinPatch?
2. Die Lizenz
3. Was leistet BinPatch konkret?
 4. Wozu ist BinPatch sonst noch einsetzbar?
 5. Anforderungen
 6. Registrierung
 7. Bezugsquellen
 8. Distributionen
9. Geplante Features
10. History
11. Kurzanleitung
12. Tips & Tricks
13. Mögliche Probleme
14. Besonderheiten je Plattform
15. Bugreports
16. Danksagungen

1. Was ist BinPatch?

Mit BinPatch bezeichnen wir unser Programm-Paket zum Erzeugen und Anwenden von Patches auf beliebige binäre Dateien. Ein Programm namens GenPatch kann benutzt werden, um aus zwei Versionen einer Datei (oder zwei kompletten Verzeichnis-Strukturen) eine sogenannte Patchdatei zu erstellen. Diese Patchdatei kann dann einem anderen Programm namens DoPatch zur Vorlage dienen, um die eine vorhandene Version einer Datei oder eines ganzen Programmverzeichnisses in eine andere zu überführen.

Der Sinn dieser Aktion erschließt sich dann, wenn Sie vergleichen, wie klein eine Patchdatei nach der Kompression im Vergleich zur vollständigen neuen Version (auch komprimiert) sein kann. Bei Programmen, Texten oder Datenbanken ist das Verhältnis besonders gut. (Lesen sie dazu auch "Was leistet BinPatch konkret?".)

Im allgemeinen ändern sich bei Programmen von Version zu Version jeweils nur wenige Teile und dann auch nur immer ein wenig. Vieles was durch den Compiler vorgegeben ist, ändert sich sogar gar nicht oder nur minimal. Gerade bei Windows-Programmen ist dieser Anteil recht hoch. Es ist immerwieder überraschend, wieviel BinPatch in der Praxis einspart. Beachten sie aber, daß BinPatch nicht auf gepackten oder verschlüsselten Daten arbeiten kann. Archive müssen entpackt sein und generell ist es die Philosophie von BinPatch lebendige Installationen zu aktualisieren.

Bei Programmen kann es auch sein, daß diese intern gepackt sind. Das erkennen sie z.B. daran, daß ein Packer die Daten nicht weiter komprimieren kann. (Leider erzeugen Packer auch schon bei leicht unterschiedlichen Daten praktisch vollkommen unterschiedliche Archive, so daß BinPatch hier nicht greifen kann.) Dem Packen der erzeugten Patchdatei steht dann aber nichts im Wege und BinPatch arbeitet so, daß es solche Patchdateien erzeugt, die zwar größer sind, als das nötig wäre, aber nach dem Packen dennoch wesentlich kleiner sind!)

Gerade bei Software-Updates hat sich BinPatch inzwischen vielfach bewährt, dort kann bei der Datenübertragung eine Menge gespart werden. Ob via Mail oder WWW, letztlich kostet beides sowohl den Entwickler als auch seine Kunden eine Menge Zeit. Welche sonstigen Anwendungen es für BinPatch sonst noch gibt, wird explizit unter "Wozu ist BinPatch sonst noch einsetzbar ?" diskutiert.

Das Verfahren wurde mir durch die Unix-Programme "diff/patch" bekannt, die eine ähnliche Aufgabe haben, aber leider auf reine Textdateien beschränkt sind. Da schließt BinPatch also eine Lücke. (Die Universalität von BinPatch bedeutet übrigens keineswegs, daß es nicht auch hervorragend mit Textdateien arbeitet und das sogar noch deutlich effizienter als "diff", siehe auch hier "Was leistet BinPatch konkret?")


2. Die Lizenz

Die Benutzung des Computerprogrammpaketes "BinPatch" erfolgt ausschließlich zu den nachbenannten Bedingungen. Der Benutzer erkennt mit dem Einsatz des Programmpaketes die nachstehenden Bedingungen als verbindlich an. Im Sinne dieses Dokumentes bezeichnet BinPatch sowohl die Programme als auch die Dokumentation auf allen Plattformen. Lesen sie diesen Abschnitt bitte vollständig.

a) Es ist es ausdrücklich erwünscht, daß das vorliegende Release in der unregistrierten Version weitergegeben wird.

Dabei ist nur die vollständige Weitergabe - also insbesondere inklusive dieser Datei - erlaubt. Als Ausnahme davon ist es gestattet, das DoPatch einem Archiv mit einem Patch beizugeben, wobei der Verzicht der Beigabe dieser Datei dann beinhaltet, daß der Weitergebende die volle Haftung übernimmt, bzw. in der Dokumentation des Patches selbst auszuschließen hat. Diese sollte dann einen Verweis auf eine Bezugsquelle für dieses Dokument enthalten oder wenigstens die komplette Lizenz als Ausschnitt enthalten.

b) Die Weitergabe von Keyfiles ist nicht erlaubt. Die gemeinsame Nutzung nur bei einer Firmenlizenz im Auftrag der registrierten Firma.

c) Es ist verboten BinPatch abzuändern. Nur der Autor darf Patches auf BinPatch erzeugten und nur solche, die von ihm erzeugt wurden, dürfen auf BinPatch angewandt werden. Bei Verstoß gegen diese Bestimmung erlischt die Lizenz.

d) Wer eine Übersetzung des Textes oder Programm in eine andere Sprache machen möchte, sollte mir bitte schreiben. Damit nur offizielle Übersetzungen in Umlauf kommen, ist die unauthorisierte Übersetzung nicht gestattet.

e) Die nicht-kommerzielle Nutzung von GenPatch ist auch ohne Registrierung erlaubt. Die Benutzer sind aber aufgefordert, bei Gefallen dennoch BinPatch zu registrieren.

f) Die kommerzielle Nutzung von GenPatch ist nicht ohne vorherige Registrierung erlaubt. Eine Einzellizenz berechtigt eine Einzelperson zur kommerziellen Nutzung von GenPatch. Die Firmenlizenz (site licence) berechtigt die Angestellten einer Firma im Umkreis von 160km in deren Auftrag Patches zu erstellen. Die world-wide licence gestattet das sogar weltweit. Eine Nutzung ist in diesem Sinne kommerziell, wenn die zu patchenden Daten kommerziell sind oder wenn eine Shareware gepatcht wird. Prinzipiell ist es nicht erlaubt, Patches für kommerziellen Daten oder Shareware eines anderen Anbieters mit BinPatch zu erzeugen. Das darf nur der Autor selbst und das dann nur mit der registrierten Version von BinPatch. Das Anwenden von Patches mit DoPatch ist erlaubt, sofern der Patch nicht unter Verletzung der Lizenz entstanden ist. Eine Einzellizenz oder Firmenlizenz muß erworben werden und wird durch ein zu installierendes Keyfile gültig.

g) Eine Registrierung ist jeweils nur entweder für eine Einzelperson oder eine Firma gültig, so daß eine Firma ihre Produkte nicht mit der registrierten Version eines Mitarbeiters erstellen darf. Eine Registrations-Key ist nicht übertragbar und darf nicht an 3. Personen weitergegeben werden.

h) Es ist verboten Bestandteile von BinPatch zurückzuentwickeln, zu entkompilieren oder entassemblieren. Es ist ebenfalls verboten von BinPatch abgeleitete Werke zu erstellen, ohne zunächst die schriftliche Genehmigung von Kay Hayen <Kay@kayhayen.com> einzuziehen.

i) Der Autor ist optimistisch, daß BinPatch angegebene Zwecke erfüllt. Als einzige Eigenschaft von BinPatch wird garantiert, daß es Platz auf der Festplatte belegt. Die Software kann im Rahmen der Lizenz benutzt werden, aber nur so wie sie ist! Keine Funktion wird garantiert! Für Schäden, die durch die Anwendung von GenPatch oder DoPatch entstehen, ist eine Haftung durch den Autor von BinPatch komplett ausgeschlossen! Außerdem erhebt der Autor von BinPatch keinerlei Rechte auf mit BinPatch erzeugte Dateien, trägt aber auch keinerlei Verantwortung für deren Inhalt.

j) BinPatch ist © 1996-1998 Kay Hayen.


3. Was leistet BinPatch konkret?

Der Vorteil, den BinPatch gegenüber der vollständigen Übertragung einer neuen Version bietet, wird anhand von Beispielen schnell deutlich.

(Anmerkung: Die meisten Beispiele betreffen United-Edition ,ein PBEM, das wir derzeit entwickleln. Es handelt sich um ein mit Delphi erstelltes Windows-Programm inklusive Hilfe-Datei und was so typisch für diese Plattform ist)

Ein vollständiges Release hat als gepacktes Archiv stolze 570k und wer das per Mail an einen Adressaten irgendwo im Internet überträgt, muß wegen der derzeitigen Internet-Standards sogar damit rechnen, daß 760k übertragen und bezahlt werden müssen. Bei der Beschränkung auf jeweils veränderte Dateien kommen dennoch immer mind. 310k bzw. 413k raus, die das Hauptprogramm dabei belegt.

Beispiel A:

In einer Demoversion war vergessen worden, einige Texte im Programm zu lokalisieren, wir wollten aber dem nur Englisch-sprachigen Freund nicht zumuten, mit den Deutschen Texten auskommen zu müssen. Daher erstellten wir mit GENPATCH UNITED41 UNITED42 UPDATE.UTP eine Patchdatei. (United41 und United42 sind Verzeichnisse älterer und neuerer Version.) Es entstand ein ungepackt 5.7k großes "UPDATE.UTP", das sich noch auf 2.7k packen ließ und als Mail nur 3.6k ausmacht. Mensch sehe den Unterschied von 413k und 3.6k! In Prozent waren es nur noch 0.9%, verschwindend wenig im Vergleich zu vorher, nicht wahr ? Grafisch läßt sich das so veranschaulichen:

Minor bugfix to United-Edition demo
Full packed version 570k
Patch 5.7k
Packed Patch 2.7k

Der Tester mußte zur Anwendung der Patches nur "DoPatch update.utp -auto" tippern, schon suchte das Programm die alte Version und bot ihm an sie zu aktualisieren.

Beispiel B:

Wir hatte jemandem nach längerer Zeit ein Update zugeschickt, das viele kleine Abweichungen enthielt. Aber auch da leistet BinPatch hervorragendes.

Major update to United-Edition demo
Full packed version 570k
Patch 77k
Packed Patch 35k

Wenn sie keine neuen Komponenten hinzufügen, wächst die Größe des Patches in der Regel mit der Zeit nur noch langsam an, obwohl sie mehr verändern. Das hat damit zu tun, daß Änderungen beim Linken (moderne Linker stellen den Code zwecks Optimierung um) und in der Addressierung der globalen Variablen schnell zu 30K führen. Das Umschreiben einer einzelnen Routine ist aber für BinPatch mit weniger Bytes erledigt.

Beispiel C: In den ersten Releases für DOS war GenPatch.EXE nur als Patch von DoPatch.EXE vertreten. Dadurch hatte das Release gepackt nur 47k statt sonst 74k.

Kleinere Releases durch BinPatch
Full packed version 74k
Full packed version with install using Patch 47k

Diese Anwendung ist zugegeben ziemlich untypisch, zeigt aber ein zusätzliches Potential von BinPatch. Sinnvoll wird so ein Patch durch den Overhead von Programmen, die mit dem gleichen Compiler übersetzt wurden. Wenn sie z.B. ein Programm-Paket aus meheren Delphi-Programmen releasen wollen, dann wird die Bilbiothek, die für eine Größe der Programme von mind. 200K sorgt nur einmal eingebunden und Sie müssen sich nicht um die Größe des Archivs sorgen.

Beispiel E:

Ein netter Betatester hatte inkorrekte Links in zwei beigegebenen HTML-Dateien entdeckt. Nachdem er sie selbst korrigierte, sandte er uns den gepackt nur 610 Bytes "großen" Patch zu, der beide Dateien korrigierte. Der Patch war damit natürlich auch deutlich kleiner als die beiden Dokumente, aber vorallem war das für beide Seiten sehr komfortabel.

Resumee: Die ideale Anwendung für BinPatch ist der Betatest von komplexer Software über das Internet. Hier kann BinPatch so richtig zeigen, was in ihm steckt. Auch um Bugfixes und kleinere Updates ins WWW zu stellen, ist BinPatch sehr gut geeignet. Wer schonmal ein 1.4M Archiv von einem langsamen Server geladen hat, weiss wohl, wie froh er gewesen wäre, ein Update mit vielleicht nur 100K downloaden zu müssen, nicht wahr ? (Besonders weil meist nach 1.3M die Übertragung stillsteht.)


4. Wozu ist BinPatch sonst noch einsetzbar?

Durch eine spezielle Option kann GenPatch angewiesen werden, auch Redundanzen in der neueren Version einer Datei auszunutzen. Das klappt nur selten, kann dann aber dazu führen, daß BinPatch als Vorpacker eingesetzt werden kann. Dazu muß momentan BinPatch eine leere Datei als Vorlage gegeben und dann erzeugt es eine "Patchdatei", die nach dem Packen kleiner ist, als das die Datei sofort gepackt. Was damit zu erzielen ist, hängt stark von der Datei ab. Einen Versuch ist es wert (und spätere Versionen von BinPatch sollen den Einsatz als Vorpacker einmal ohne Umweg über leere Dateien erlauben).

Bei einem Programmpaket, das mit dem gleichen Compiler übersetzt wird, kann BinPatch dafür sorgen, daß der Overhead des Compilers und verwendeter Bilbliotheken nur einmal auftaucht anstatt für jedes Programm einmal.

Wenn sie verschiedene Versionen eines Programmes oder einer Datei rausgeben wollen, dann bietet BinPatch ihnen die Möglichkeit eine Reihe kleinererer optionaler Patches statt meherer kompletter Programme anzubieten. Die Installationsroutine muß dann nur DoPatch aufrufen.


5. Anforderungen

DOS/Windows 3.1:

Das Genpatch für DOS setzt beim Benutzer derzeit einen 386er und einen DPMI-Server vorraus. Von letzterem lassen sie sich bitte nicht erschrecken, diese Bedingung erfüllen sie schon, sobald sie GenPatch in einem DOS-Fenster von Windows oder OS/2 laufen lassen. Unter DOS können sie falls vorhanden QEMM verwenden oder alternativ den freien DPMI-Server CWSDPMI.

Das DoPatch für DOS setzt lediglich ein DOS und einen 286er voraus, Kunden können auf Wunsch auch eine Version für 8088 erhalten, die dann auf XTs lauffähig ist. Speicher benötigt es praktisch keinen ausser für den Programmcode und den kleinen Stack. Es ist dazu entwickelt worden, spontan auf jedem x-beliebigen Rechner zu laufen, ohne daß die Benutzer etwas spezielles wissen müssen.

Die Ungleichheit in den Anforderungen liegt zum einen in der hohen Komplexität der Aufgabe von GenPatch, zum anderen aber darin begründet, daß das DoPatch bei jedem Anwender und ohne zusätzlichen Aufwand von dessen Seite laufen soll.

Windows 95/NT:

Das DoPatch für Win95/NT läuft nicht unter purem DOS, aber im DOS-Fenster von Windows 95. Für DOS verwenden Sie bitte DoPatch für DOS.

OS/2:

Die Version für OS/2 sollte ab OS/2 V2 laufen. Getestet wurden OS/2 V2.1, OS/2 Warp 3 FixPack 26 und OS/2 Warp 4.

Linux:

Die Programme benötigen Kernel 2.0.0 oder installierte ELF Bibliotheken.


6. Registrierung

Bei Gefallen kann - bei kommerzieller Nutzung muß - eine BinPatch Lizenz erworben werden. Dazu gibt es verschiedene Möglichkeiten, die in BinPatch Registrierung erklärt werden, u.a. das sehr komfortable und vielseitige Register.EXE, das BinPatch beiliegen sollte, (wenn nicht bitte hier zum Download clicken) und die allerdings Englisch-sprachige online Registrierung mit Kreditkarte bei Kagi (sicher dank SSL).

Die DM-Preise sind:

Preis Lizenztyp Beschreibung

40DM

Einzellizenz Eine einzelne Person.

820DM

Standort Alle Angestellten einer Firma
im Radius von 160km.
8250DM Weltweit Alle Angestellten einer Firma
weltweit.

Wie oben erläutert, ist die nicht-kommerzielle Nutzung frei. Wir möchte aber an dieser Stelle darauf hinweisen, daß Sie mit BinPatch ein Produkt jahrelanger Entwicklung mit viel Dateilliebe verwenden dürfen, daß zugleich in Sachen Leistung auch noch Marktführer ist. Bitte unterstützen Sie daher bei regelmäßiger Nutzung von BinPatch dessen Weiterentwicklung durch freiwillige Registrierung.

Ihren persönlichen BinPatch key. Die Anwender ihrer Patches können sehen, daß Sie den Patch erzeugt haben.
Eine Registerierung jetzt beinhaltet alle späteren Updates!
Sie erhalten alle bugfixes und neue Releases für alle gewählten Plattformen per EMail zugesandt.
Ein wirklich gutes Produkt!

Eine Standort- oder Weltweitlizenz gilt nur für Produkte der registrierenden Firma. Angestellte dürfen damit keine eigenen Projekte patchen.

Anmerkung: Dieses Angebot bleibt nur bis zum Erscheinen eines neuen Releases gültig. Schauen sie jeweils nach der aktuellsten Version dieses Dokumentes in einer der Bezugsquellen.


7. Bezugsquellen

Die folgenden Quellen für BinPatch werden von mir mit den jeweils aktuellen Version versorgt. Von dort lassen sich die jeweils aktuellen Versionen für alle Plattformen beziehen. Lesen Sie vorher dazu auch das Kapitel Distributionen, damit Sie wissen, für welches Archiv Sie sich entscheiden sollten.

1. WWW

Wenn sie diese Seite schon online lesen, dann folgen sie einfach dem Link zum Download-Bereich, um zu der entsprechenden Seite im WWW zu gelangen. Ansonsten können sie die Addresse http://www.kayhayen.com/binpatch/download.htm in ihren Brower eingeben.

2. FTP

Der offizielle anon-FTP Server für BinPatch ist der unseres Besitzers: ftp.kayhayen.com. Dort finden sie die neuesten, aber auch ältere Versionen von BinPatch im Verzeichnis /binpatch.

3. Filenetze

Das GFD-Filenetz wird regelmässig mit der jeweils aktuellen OS/2-Version zu versorgt. Bei Hinweis werden wird auch andere Filenetze bedienen, teilen Sie uns bitte mit, wenn Sie weitere Filenetze kennen die für die BinPatch Verteilung geeignet sind.

4. Newsgroups

Die aktuelle Version von BinPatch gehen einige Zeit nach dem Release auch durch die geeigneten Binary-Newsgroups. Momentan geht nur die DOS-Version durch de.alt.binaries.msdos.

Anmerkung: Wer andere Bezugsquellen vorschlagen möchte, ist herzlich eingeladen, das auch zu tun. :-)


8. Distributionen

Dieses Kapitel listet die einzelnen Distributionen auf und erklärt, was genau sie enthalten:

- mkpat20d.zip
: BinPatch für DOS/Windows3.1 als InfoZip-File.

Programmdateien
Datei Größe(gepackt)  DOS Windows 3.1   Windows 95 Windows NT OS/2
GENPATCH.EXE k.a. Ja, mit DPMI-Server Im DOS-Fenster Im DOS-Fenster und mit LFN Im DOS-Fenster,
aber keine LFN
Im DOS-Fenster
DOPATCH.EXE 30k (16k) Ja Im DOS-Fenster, keine LFN
DOPATINT.EXE 36k (18k)

Sonstige Dateien
Datei Beschreibung
README.HTM Die BinPatch Dokomentation im HTML-Format
REGISTER.EXE Windows-Programm, um BinPatch über Kagi zu registrieren.
REGISTER.HTM Informationen über die Optionen zum Registrieren von BinPatch.
REGISTER.TXT Ein ASCII-Text, der die Registrierung bei Kagi
(allerdings auf Englisch) erläutert.
LOGO.GIF
MINIPNKT.GIF
BK101.GIF
BAR.GIF
Grafiken für die HTML-Dateien.

- mkpat20n.zip: BinPatch für Windows 95&NT als InfoZip-File.

Programmdateien
Datei Größe(gepackt)  DOS Windows 3.1 Windows 95 Windows NT
GENPATCH.EXE k.a. Nein Nein Im DOS-Fenster Auf der Kommandozeile
DOPATCH.EXE 51k (28k)
DOPATINT.EXE 57k (32k)

Sonstige Dateien wie bei mkpat20d.zip.

- mkpat20o.zip: BinPatch für OS/2 V2, Warp3&4 als InfoZip-File.

Programmdateien
Datei Größe(gepackt)  DOS OS/2
GENPATCH.EXE k.a. Nein Im OS/2-Fenster
DOPATCH.EXE 46k (27k)
DOPATINT.EXE 51k (30k)

Sonstige Dateien wie bei mkpat20d.zip.

- mkpat20e.tgz: BinPatch für Elf-Linux als tgz-file.

Programmdateien
Datei Größe(gepackt)  a-out ELF
genpatch k.a. Nein Ja
dopatch 30k (15k)

Sonstige Dateien wie bei mkpat20d.zip.


9. Geplante Features

Anmerkung: Erscheinende Releases können in Funktion und Implementierung von dieser Ankündigung abweichen.

V2.2 (Release in Vorbereitung für 4/5.98)

Sie meinen, es fehlt noch etwas, Sie benötigen ein Feature unbedingt? Eine wichtige Option fehlt noch? Sie halten ein geplantes Feature für einen Fehler? Sie können Information anbieten? Dann schreiben Sie uns, wir sind für Anregungen immer offen.


10. History

Hier eine Auflistung der Änderungen von Version zu Version.

V2.1 (12. offizielles Release für DOS, Win95, NT, OS/2 und Linux am 26.3.98)

V2.0 (11. offizielles Release für DOS, Win95, NT, OS/2 und Linux am 5.2.98)

V1.9 (10. offizielles Release für DOS, Win95, NT, OS/2 und Linux am 3.9.97)

V1.8 (9. offizielles Release für DOS, Win95, NT, OS/2 und Linux am 11.7.97)

V1.7 (8. offizielles Release für DOS, Win95, NT, OS/2 und Linux am 18.6.97)

V1.06 (7. offizielles Release für DOS, Win95, NT, OS/2 und Linux am 16.6.97)

V1.05 (6. offizielles Release für DOS, Win95, NT, OS/2 und Linux am 9.6.97)

V1.04 (5. offizielles Release für DOS, Win95, NT, OS/2 und Linux am 22.5.97)

V1.03 (4. offizielles Release für DOS, Win95, NT, OS/2 und Linux am 23.4.97)

V1.02 (3. offizielles Release für DOS, Win95 und Linux am 17.2.97)

V1.01 (2. offizielles Release für DOS, Win95 und Linux am 11.2.97)

V1.00 (1. offizielles Release für DOS, Win95 und Linux am 5.2.97)

V0.90 (9. Betaversion für DOS, Win95 und Linux am 31.1.97)

V0.89 (8. Betaversion für DOS, Win95 und Linux am 22.1.97)

V0.88 (7. Betaversion für DOS, Win95 und Linux am 20.1.97)

V0.87 (6. Betaversion für DOS, Win95 und Linux am 16.1.97)

V0.86 (5. Betaversion für DOS, Win95 und Linux am 14.1.97)

V0.85 (4. Betaversion für DOS und Linux am 23.12.96)

V0.84 (3. Betaversion für DOS und Linux am 19.12.96)

V0.83 (2. Betaversion für DOS am 16.12.96)

V0.82 (1. Betaversion für DOS am 11.12.96)

Alle frühereren Versionen waren rein interne Alpha-Versionen.


11. Kurzanleitung

Die einfachste Anwendung ist das Erstellen eines Patches von einer Datei auf eine andere. Nehmen wir an, wir haben zwei Dateien ALT.EXE und NEU.EXE. Wenn wollen einen Patch erstellen, der aus der Datei ALT.EXE die Datei NEU.EXE erstellt.

Dazu braucht GenPatch die Namen der beiden Dateien als Parameter und für den Patch noch eine Benennung, sagen wir "ALT2NEU". Der Name des Patches sollte dem späteren Anwender ungefähr sagen, was das für ein Patch ist, wobei "Update" meist weniger aussagekräftig ist als "V21_V22". Der stets verwendete Suffix ".UTP" für BinPatch Patches muß bei der Benennung an dieser Stelle übrigens weggelassen werden. Für unser Beispiel reicht also die Eingabe am DOS-Prompt:

GenPatch ALT.EXE NEU.EXE ALT2NEU

und schon legt das Programm los. An die Stelle von ALT.EXE kann jeder beliebige Pfad auf eine Datei treten, das gleiche gilt für NEU.EXE. Auch der erzeugte Patch darf eine Pfadangabe beinhalten, normalerweise werden aber die Dateien im aktuellen Verzeichnis gesucht.

Eine beim Vertrieb einer Software-Paketes übliche Praxis ist das Patchen ganzer Verzeichnisse. Im Prinzip funktioniert das ganz ähnlich wie oben gesehen bei einzelnen Dateien. Geben sie statt Dateinamen einfach die Pfade von Verzeichnissen an und schon löst GenPatch auch diese Aufgabe für sie:

GenPatch ALT_DIR NEU_DIR ALT2NEU

Dabei scannt es NEU_DIR und sucht nach *namensgleichen* Dateien in ALT_DIR, die dann verglichen werden und im Falle von Ungleichheit, wird der Patch um die Information ergänzt, wie diese Datei zu aktualisieren wäre. Bei gleichen Dateien werden diese ignoriert und wenn keine Datei dieses Namens in der alten Version existiert, dann wird die Datei komplett in den Patch eingebettet. Bei der Suche bezieht GenPatch übrigens auch Unterverzeichnisse mit ein. 

Beim Anwenden eines Patches muß dem Dopatch neben der Patch noch mitgeteilt werden welche Daten er patchen soll. In den obigen Beispielen sind das die älteren Daten ALT.EXE bzw. ALT_DIR. Natürlich darf der Name auch anders als beim Erzeugen des Patches lauten, wichtig ist nur, daß in ALT_DIR dann die Dateien wirklich den gleichen Namen haben. Der Aufruf

DoPatch ALT2NEU.UTP ALT.EXE MIAU.EXE

würde aus ALT.EXE und ALT2NEU die Datei MIAU.EXE erzeugen. Bei einem Verzeichnis-Patch würde

DoPatch ALT2NEU.UTP ALT_DIR NEU_DIR

ein Verzeichnis NEU_DIR anlegen (sofern es noch nicht existiert) und dort die neuen Dateien reinschreiben. Sollen die Veränderung direkt an den alten Daten durchgeführt werden, dann würde

DoPatch ALT2NEU.UTP ALT_DIR

die alten Daten mit den neuen überschreiben. Und wenn Sie das aktuelle Verzeichnis patchen wollen, dann reicht sogar ein noch kürzeres

DoPatch ALT2NEU.UTP

aus, um die alten Daten im aktuellen Verzeichnis durch neuere zu ersetzen.

Bei GenPatch können sie bisher 5 Optionen angeben. Hier wird der Versuch gemacht, eine kurze Erläuterung zu geben:

Mit "-f" wird GenPatch angewiesen, beim Verzeichnis-Patch auch Dateien, die nicht verändert wurden, zu patchen. Die Information dafür ist sehr kurz, hat aber zwei Konsequenzen: Zum einen verweigert DoPatch seine Arbeit, wenn die Datei fehlt, zum anderen kann DoPatch so dazu gebracht werden, dem Anwender aus einer "benutzten" Installation eine saubere Installation mit nur den unbedingt notwendigen Dateien zu erzeugen

Mit "-n" weisen sie GenPatch an, das Datum der eingetteten oder zu patchenden Dateien nicht auf das der Vorlage, sondern auf das aktuelle Systemdatum zu setzen. Die Variante "-nl" setzt das Datum auf das Datum der letzten Änderung einer Datei bei allen Dateien.

Mit "-z" veranlassen sie GenPatch nach dem Packen die Datei direkt an einen Packer zu übergeben. Das erspart ihnen den Aufruf des Packers. Gemäß Voreinstellung wird hierbei der Packer "InfoZIP" aufgerufen, ein freier Packer, der PkZIP und WinZIP kompatibel ist. Möchten Sie einen anderen Packer verwenden, so können Sie die Option -z=packername wählen und GenPatch verwendet dann diesen Pacher, der natürlich dazu auf ihrem Rechner installiert sein muß. Mit "-Z=packername" in der BINPATCH_OPTS Umgebungsvariablen wird ein Packer als Standardpacker für "-z" ohne weitere Angabe ausgewählt. Mit "-x" können sie sogar ein selbextrahierendes Archiv mit einem DoPatch dabei erzeugen, wobei Sie beachten sollten, daß nicht jeder Packer auf jeder Plattform selbstextrahierende Patches erzeugen kann.

Mit "-e=dateimuster" können Sie ein Muster für Dateien angeben, die nicht aus Dateien mit anderen Namen erzeugt werden sollen. So wird z.B. mit "-e=*.dat" die Datei "Daten/Beispiel.dat" im Zielverzeichnis des Patches nur aus Dateien des gleichen Namens im Quellverzeichnis generiert. Der "*" steht dabei stets für kein oder beliebig viele andere Zeichen (außer dem Verzeichnis-Trennzeichen) und das "?" steht für genau ein beliebiges solches Zeichen. Sie können beliebig viele "*" und "?" and beliebiger Stelle verwenden und auch beliebig viele Muster durch "-e" angeben, also "-e=muster1 -e=muster2". Muster sind immer rekursiv, d.h. daß wie oben Dateien in bel. Unterverzeichnissen erkannt werden. Es wird also "*.dat" sowohl gegen "Daten/Beispiel.dat" verglichen, was nicht zutrifft, und gegen "Beispiel.dat", was zutrifft.

Mit "-i=dateimuster" können sie im Verzeichnismodus global Dateien ignorieren lassen. Mit der Option "-is=dateimuster" ignorieren Sie Dateien nur in den Quellverzeichnissen des Patches, mit "-if=dateimuster" nur im Zielverzeichnis und mit "-i2=dateimuster" z.B. in der 2. Quelle, sofern die mehrere Quellen verwenden. Sie können auch mischen, also z.B. "i3,d=dateimuster" in der 3.Quelle und im Ziel ein Muster anwenden lassen. Gleichfalls können Sie auch hier bel. viele Muster angeben und dabei Muster des gleichen Regelschemas wie bei Option "-e" verwenden.

Mit "-r" erlauben sie BinPatch auf bereits abgebildete Teile des Ergebnisses Bezug zu nehmen. Das kann Sinn machen, ist aber in der Voreinstellung nicht aktiviert. Probieren sie einfach im konkreten Fall aus, was in ihrem Fall passiert. Eine generelle Empfehlung kann nicht gegeben werden, da sowohl bei Programmen als auch Textdateien beides, Verbesserungen und auch Verschlechterungen im Ergebnis beobachtet wurden. Achten sie auch darauf, daß im Normalfall die gepackte Dateigröße maßgebend ist. Obwohl die Dateigröße des Patches mit "-r" Option kleiner ist, sagt das häufig nichts über die Verhältnisse nach dem Packen beider Dateien aus. Anmerkung: In der momentanen Version bleibt diese Option wirkungslos, weil sie bis zu einer Neuimplementierung deaktiviert wurde.

Mit "-c" legen sie die Schrittweite beim Optimieren von nicht abbildbaren Teilen fest. Grössere Werte produzieren kleinere Patches, die dann aber wiederum schlechter zu packen sind. Im Normalfall ist die Voreinstellung von 20 für EXE-Dateien sehr gut, für Textdateien sollten sie eher mit grösseren Werten wie 200 experimentieren, da Textdateien recht stabile Eigenschaften im Vergleich zu EXE Dateien haben. Zugelassen sind nur Werte von 20..200, andere machen kaum Sinn.

Mit "-l" legen sie den Grad der Lokalität beim Optimieren von nicht abbildbaren Teilen fest. Dieser Wert beeinflußt nicht direkt die Grösse des Patches, sondern nur dessen Größe nach dem Packen! Für EXE-Dateien ist die Voreinstellung von 245 recht vernünftig. Bei kleineren Werten steigt dann in der Regel die Größe der gepackten Datei an. Der Idealwert hängt hier von der Datei ab. In der Regel lohnt es sich nicht oder kaum, die Voreinstellung von Hand zu ändern, Ausnahme dabei sind Textdateien, dort gibt ein Wert von 2000 wesentlich bessere Ergebnisse, noch höhere Werte erzielen dort meist nur wenig bessere Ergebnisse, zumal "Warp 3:" dadurch enorm verlangsamt wird.

Anmerkung: Im Verzeichnis-Modus können sie momentan nicht individuelle Parameter für jede Datei einzeln einstellen. Ich bin auch unsicher, ob sich der Aufwand hierfür lohnen würde. Stattdessen soll GenPatch zukünftig über eine Analyse-Funktion verfügen, die für jede Datei relativ gute Parameter zu wählen versucht. Dazu wäre ich dankbar, wenn Anwender von BinPatch mit ihre Erfahrungen mit BinPatch mitteilen würden.


12. Tips&Tricks

Tip: Es kommt vor, daß eine "automatische" Zuteilung von DPMI-Speicher unter Windows fehlschlägt, weil Windows unter "automatisch" eben nicht "nach Bedarf" versteht, sondern einen Wert, der auf der physischen Speichermenge beruht. Legen Sie dann ein spezielles DOS-Fenster an, dem Sie die benötigte Menge Speicher fest zuteilen. Tragen sie ruhig 32000 oder auch 60000 ein, ich hatte damit bisher keine Probleme, kann dafür aber keine Garantie geben. Sollte auch das nicht helfen, so müssen Sie auf GenPatch für NT, OS/2 oder Linux ausweichen. Diese Betriebssysteme sind großzügiger, was den Bedarf von Speicher angeht. Die damit erstellten Patches lassen sich dann ohne weiteres von einem DoPatch für DOS anwenden.

Tip: Die Enviroment-Variable "BINPATCH_OPTS" wird von GenPatch in jedem Fall an die Befehlszeile angehängt. Tragen Sie dort die Parameter ein, die sie immer verwendet haben möchten.

Tip: Achten sie darauf, daß sie beim Übersetzen ihrer Programme immer die gleichen Einstellungen beim Compiler haben, ansonsten entstehen nur unnötige Unterschiede, die sich negativ auf den Patch auswirken.

Tip: Die Option "-r" erreicht bei manchen Patches wesentlich bessere Ergebnisse, wenn von der zu erzeugenden Datei bekannt ist, daß sie Redundanzen (Teile treten in ähnlicher Form auf) enthält, die in den alten Daten noch nicht drin waren. Das Erzeugen und insbesondere das Anwenden der Patches wird dadurch zwar langsamer, aber es kann sich sehr lohnen. Eine Anwendung hierfür ist z.B. das Patchen von ZConnect-Puffern. Viele Puffer enthalten Nachrichten und Antworten darauf. Das kann GenPatch -r mit anschliessendem Packen besser als ein Packer allein ausnutzen.

Tip: Wenn sie Texte patchen wollen, dann verwenden sie die beiden Optionen "-c250" und "-l2000", die das Standardverhalten von GenPatch modifizieren. Normalerweise ist GenPatch nämlich auf EXE Dateien optimiert, was derzeit "-c20" und "-l245" entspricht. Das bedeutet im wesentlichen, daß GenPatch sein Verhalten lokaler optimiert, was bei Texten aber garnicht nötig ist, im Gegenteil sogar schädlich ist.


13. Mögliche Probleme

Unter DOS oder im DOS-Fenster kann es bei sehr großen Dateien vorkommen, daß GenPatch sich mit dem Hinweis beendet, daß leider nicht genug Speicher vorhanden sei und Sie die DPMI-Einstellungen überprüfen sollten. Eine Lösung hierfür finden sie in den Tips oben.

Dateien grösser als 2 Gigabyte bearbeitet DoPatch leider nicht, was allerdings noch nicht genau überprüft wurde. ;-)

Beim Abbruch von GenPatch für OS/2 mit STRG-C bleibt eine "angefangene" Patchdatei erhalten, die von DoPatch nicht als Patchdatei erkennbar wird.

Alle Versionen von DoPatch sind auch für den parallelen Betrieb geeignet, eine Ausnahme stellt das DoPatch für DOS dar. Nutzen sie stattdessen das DoPatch für andere Plattformen.

Für die Linux Version 1.05/6/7 wurde gemeldet, daß GenPatch nach jedem erzeugten Patch einen "coredump" liefert. Die erzeugten Patches sind aber ohne Probleme anwendbar. Ab 1.9g sollte das Problem behoben sein.

Das Datum für Einbettungen wurde in den Versionen 1.7 und 1.8 nicht gesetzt, nur gepatchte Dateien erhielten das Datum des Originals. Mit Version 1.9 wurde das Problem (im Dateiformat der Patches) behoben.


14. Besonderheiten je Plattform.

DOS/Windows 3.1: Keine.

Windows 95/NT: Keine, aber DoPatch für Windows95/NT erfordert bei Win95 den GUI-Modus. Benutzen sie DoPatch für DOS, wenn Sie Patches im MS-DOS Modus anwenden möchten.

Linux: Momentan ist Linux die einzige unterstützte Plattform, die bei Dateinamen die Gross/Kleinschreibung unterscheidet. Das kann zu Problemen führen, wenn mit dem GenPatch einer anderen Plattform erzeugte Patches durch das DoPatch für Linux angewenden. Erzeugen Sie Verzeichnis-Patches mit GenPatch für Linux bis das Problem behoben ist.

OS/2: Keine. Beachten Sie bitte, daß GenPatch für OS/2 nicht richtig mit STRG-C umgeht und eine unvollständige Patchdatei nicht löscht. Die erweiterten Attribute von OS/2 Dateien werden durch die Option "-A" in den Patch eingebunden und von DoPatch für OS/2 auch gesetzt. Andere Plattformen wenden solche Patches aber auch ohne Probleme an.


15. Bugreports

Wenn Sie nur DoPatch anwenden, dann fragen Sie bitte den Ersteller des Patches! Kein verantwortungsvoller Autor wird Patches rausgeben, die er nicht selbst getestet hat.

Wenn sie einen vermeintlichen Fehler in GenPatch oder DoPatch gefunden haben, dann lesen sie bitte unbedingt vorher die Kapitel "Besonderheiten je Plattform" und "Mögliche Probleme", um zu sehen, ob es sich um ein bekanntes Problem handelt. Dann schauen sie bitte vorher in einer der Bezugsquellen nach, ob das Problem in einer neueren Version behoben ist.

Dann versuchen sie bitte zunächst das Problem zu reproduzieren. Bei zu patchenden Verzeichnissen entfernen sie alle Dateien, die nicht nötig sind, um das Problem zu reproduzieren. Sofern der Fehler bei einer einzelnen Datei auftritt, versuchen Sie bitte auch, einen Dateipatch genau dieser Datei zu machen und sehen sie, ob das Problem auch dort auftritt.

Sofern möglich versuchen sie bitte auch die Versionen anderer Plattformen, um zu sehen, on das Problem nur für eine Plattform besteht. Toll wäre auch, wenn sie ältere Versionen von BinPatch ausprobieren könnten, ob das Problem da schon bestanden hat.

Dann versuchen Sie bitte ein Mail an mich zu fomulieren, die folgende Punkte beinhaltet:

  1. Welche Version von BinPatch auf welchen Plattformen verwenden sie konkret?
    Diese Information ist very wichtig! Mit diesem Wissen kann ich wesentlich gezielter nach der Ursache des Problems Ausschau halten.
  2. Welche Fehlermeldung geben GenPatch bzw. DoPatch aus?
    Auch diese Information ist sehr wichtig! Auch wenn die Fehlermeldung ihnen nicht verständlich ist, so kann ich doch u.U. sofort erkennen, was schiefgegangen ist.
  3. Welche genauen  Parameter haben sie verwendet?
    Auch diese Information ist recht wichtig! Manche Fehler mögen nur bei best. Parametern auftreten. Probieren sie bitte auch die normalen Parameter.
  4. Was genau haben sie zu patchen versucht?
    Waren es Programme, Bilder oder Texte? Diese qualitative Information kann auch hilfreich sein.

Schicken sie diese Mail an bugreport@kayhayen.com und wählen sie den Betreff "Bugreport BinPatch Vx.xx", so daß es mir ist, eine Vorsortierung zu machen. Die binären Dateien schicken sie BITTE NICHT gleich mit. Wenn es dazu Grund gibt, werde ich Sie dazu auffordern. Die registrierten Benutzer mögen selbst abwägen, ob ihr Anliegen wirklich dringend ist. In der Regel wird das Zusenden der Binärdateien aber nicht nötig sein, zumal Sie mit schneller Antwort von mir rechnen können.


16. Danksagungen

Mein genereller Dank gilt in ersten Linie meinem Bruder Andree, der mir über seine Site Edition das Tor zum Internet geöffnet hat. Sein brüderlicher Rat hat mir oft geholfen und mich vor mancher Dummheit bewahrt.

Außerdem seien DJ Delorie und Eli Zaretski gedankt. Ihnen verdanke ich viel Support was 'djgpp' einem GNU-Port des gcc für DOS angeht.

Mein Dank auch an den hilfsbereiter Übersetzer Roger Malin, der mir bei der Übersetzung von BinPatch in das Französische hilft.

Und last but not least geht ein Danke an alle Betatester und Kunden von BinPatch, sehr viele guten Ideen in BinPatch, habe ich ihren Anregungen entnommen: Ich habe hier diejenigen unter Ihnen mit besonders großer Hilfsbereitschaft in alphabetischer Reihenfolge aufgezählt:

Viel Spaß beim Ausprobieren!

Gruß, Kay Hayen


Anhang A: Begriffe

Ausführbare Patches: Normalerweise ist zum Anwenden von Patches ein spez. Programm names DoPatch nötig. Anders bei ausführbaren Patches. Diese müssen als Programme nur gestartet werden und aktualisieren dann die vorhandenen Daten. Diese Patches enthalten quasi selbst ein DoPatch und sind daher auch größer als Patches, die nicht ausführbar sind.

BinPatch: Bezeichnet das Programmpaket zum Erzeugen und Anwenden von Patches. Manchmal werden auch die erzeugten UTP-Dateien BinPatch(es) genannt.

Compiler: Ein Programm, das von Entwicklern genutzt wird, um Programme zu erzeugen. Normalerweise geben sie einem Programm gewissen Standard-Funktionalität mit, die bei allen Programmen, die den gleichen Compiler nutzen, vorhanden sind.

DoPatch: Bezeichnet das Programm zum Anwenden von Patches, Teil von BinPatch.

DPMI: Methode mit der DOS-Programme auf mehr Speicher zugreifen können als DOS früher einmal vorgesehen hatte. Jedes DOS-Fenster von Windows oder OS/2 hat einen sog. DPMI-Server auf den die DOS-Programme zugreifen können und genau das macht auch GenPatch für DOS/Windows 3.1.

GenPatch: Bezeichnet das Programm zum Erzeugen von Patches, Teil von BinPatch.

Lange Dateinamen: So werden die mit Windows 95 eingeführten Dateinamen genannt, die nichtmehr den Konventionen von DOS 6 und davor genügen müssen. Insbesondere dürfen Dateinamen länger als 8 Zeichen sein, mehr als einen Punkt enthalten und danach auch mehr als 3 Zeichen. Nur DoPatch für Windows 95/NT kann diese Dateinamen bearbeiten und nur GenPatch für NT kann unter NT diese Dateinamen bearbeiten.

Multipatch: Für gewöhnlich werden Patches für eine bekannte Quelle auf ein festgelegtes Ziel erzeugt. Beim Multipatch handelt es sich um Patches, die mehr als eine Quelle auf ein Ziel aktualisieren können. Damit lassen sich dann z.B. 1.0a und 1.0b mit dem gleichen Patch zur 1.1 aktualisieren.

Patch(datei): Eine Datei (bei BinPatch eine mit der Endung ".UTP", daher auch UTP-Datei genannt) mit der es möglich ist aus einer älteren Version einer Datei eine neuere Version zu erstellen. Bei BinPatch kann ein Patch sich auf eine gesamten Verzeichnis mitsamt Unterverzeichnissen beziehen.

Redundanz: So wird es genannt, wenn Information sich in gleicher Weise wiederholt. Für BinPatch ist auch z.B. auch ein zitierten Newsartikel redundant, weil BinPatch kleine Abweichungen gut kompensiert. Solche Redundanzen werden auch von modernen Packern nicht erkannt, wohl aber von GenPatch, wenn Sie die Option "-r" aktivieren.

Overhead: Anteil eines Programmes, der eigentlich keine Funktion hat, aber aus technischen Gründen dennoch im Programm enthalten ist.


Dies ist Seite http://www.kayhayen.com/binpatch/liesmich.htm

Copyright © 1998 Kay Hayen. Letzte Änderungen 5.2.1998. Alle erwähnten Namen und Warenzeichen sind Eigentum der jeweiligen Firmen. Verantwortlich ist webmaster@kayhayen.com, Kay Hayen Software, Hamburger Ch.114, 24113 Kiel - Germany.