@DATABASE GPatch.guide
@MASTER GPatch.guide
@$VER: 2.1
@AUTHOR "Ralf Gruner"
@(c) "© 1997 Ralf Gruner, Großschönau, Germany"
@INDEX "Index"

@NODE "Main" "GPatch Handbuch"
@{JRIGHT}***RGR***
@{JCENTER}
@{b}@{u}GCompare / GPatch:@{ub}  Das Patch-System für Programm-Updates@{uu}

Version 2.1

Autor: Ralf Gruner


@{JLEFT}
@{LINDENT 3}

@{" Vorwort " LINK "Vorwort" 0}
@{" GCompare " LINK "GCompare" 0}
@{" GPatch " LINK "GPatch" 0}
@{" Hinweise zur Benutzung " LINK "Hinweise" 0}
@{" Technische Details " LINK "Details" 0}
@{" Beispiel " LINK "Beispiel" 0}
@{" Copyright, Vertrieb und Haftungsausschluß " LINK "Copyright" 0}



@ENDNODE

@NODE "Vorwort" "Vorwort"
@SMARTWRAP
@{LINDENT 1}

@{B}Vorwort@{UB}


GCompare ist ein Programm zum Erzeugen von Patch-Dateien für den Vertrieb
von Updates beliebiger Programme oder anderer Dateien.


GPatch dient dazu, diese Updates auszuführen.


Die Vorteile von GCompare/GPatch gegenüber vergleichbaren Programmen sind:

@{LINDENT 2} @{PARI -1}

-Die Patch-Datei kann Patches für eine beliebige Anzahl von Dateien enthalten.
Dadurch ist es möglich, Updates für mehrere Versionen eines Programms
zusammen zu vertreiben. Wenn sich die Verzeichnis-Struktur des Produktes
nicht geändert hat, findet der Patcher selbständig die benötigten Patches,
ohne daß sich Ihr Skript darum kümmern muß.
Außerdem können Sie die Patches für verschiedene Dateien in einer einzigen
Patch-Datei unterbringen.


-Wenn die Patchdatei jeweils die Änderungen von einer Programmversion zur
nächsten enthält, dann ist es nicht mehr notwendig, alle alten Versionen zu
archivieren.


-Das Format der Patch-Datei ist bezüglich der Dateigröße aufwendig optimiert.
GCompare testet mehrere verschiedene Kodierungsarten und wählt diejenige aus,
die das kürzeste Resultat liefert.
Obwohl ich nicht allzuviele ähnliche Programme kenne, möchte ich behaupten,
daß GCompare in den meisten Fällen die kürzesten Patchdateien aller
verfügbarer Patchprogramme erzeugt.


-Um zu verhindern, daß beim Anwender beschädigte Dateien ankommen, enthalten
die Programme eine sehr zuverlässige Fehlererkennung (32-Bit-CRC-Signaturen
für alle Dateien). Wenn keine Fehlermeldungen auftreten, dann können Sie
sicher sein, daß die Ergebnisse des Patch-Vorgangs perfekt sind.


@ENDNODE


@NODE "GCompare" "GCompare"
@SMARTWRAP
@{LINDENT 1}

@{B}GCompare@{UB}


GCompare ist ein Shell-Befehl mit folgender Syntax:


@{LINDENT 3}

GCompare <alte Datei> <neue Datei> <Patchdatei> [mode <n> | quick]

@{LINDENT 1}


GCompare vergleicht die alte Datei mit der neuen Datei und speichert alle
Änderungen (Patches) in der Patchdatei.

Wenn GCompare eine bereits bestehende Patchdatei findet, dann hängt es die
Patches an diese Datei an.

Außerdem sucht es auch in dieser Datei nach passenden Daten.

Aus der alten Datei und der Patchdatei kann GPatch dann die neue Datei
erzeugen.


Bei Problemen gibt GCompare eine Fehlermeldungen aus.

Schwerwiegende Fehler werden immer von einem Return-Code von 15 begleitet,
und wenn das Ergebnis eine in irgendeiner Form beschädigte oder unvollständige
Patchdatei ist, dann wird sie gelöscht.


Die Argumente "mode" und "quick" wählen die Betriebsart aus:

Ohne Angabe einer Betriebsart wählt GCompare selbständig das optimale
Dateiformat aus.

Mit dem Argument "mode" können Sie das Dateiformat direkt angeben, und
"quick" ist eine schnelle Betriebsart für sehr große Dateien.
Die möglichen Werte für <n> nach "mode" sind 1 bis 4.


GCompare braucht genug Arbeitsspeicher, um die alte, die neue und die
Patchdatei gleichzeitig im Speicher halten zu können.
Wenn GCompare nicht genug Speicher für seinen Listen-Suchalgorithmus findet
(insgesamt 9 mal die Dateigröße der alten Datei plus 2 KB), dann arbeitet es
nur noch in der Betriebsart 3 (die nur lineare Suche benötigt).


Das gleiche gilt für die Suche in der möglicherweise vorhandenen Patchdatei.
Wenn der Speicher nicht ausreicht (9 mal Dateigröße plus 2 KB), dann wird
nur in der alten Datei gesucht.


@ENDNODE


@NODE "GPatch" "GPatch"
@SMARTWRAP
@{LINDENT 1}

@{B}GPatch@{UB}


GPatch ist ein Shell-Befehl mit folgender Syntax:


@{LINDENT 3}

GPatch <alte Datei> <Patchdatei> <neue Datei> [recursive]

@{LINDENT 1}


GPatch erzeugt aus der alten Datei und der Patchdatei die neue Datei.

Die passenden Patches wählt es anhand der Dateilänge und der CRC-Signatur
aus.


Bei Problemen gibt GPatch eine Fehlermeldungen aus.

Schwerwiegende Fehler werden immer von einem Return-Code von 15 begleitet,
und wenn das Ergebnis eine in irgendeiner Form fehlerhafte neue Datei ist,
dann wird sie gelöscht.


Das Argument "recursive" schaltet eine Betriebsart ein, in der GPatch,
nachdem es erfolgreich eine neue Datei erzeugt hat, solange weitere Versuche
zum Patchen unternimmt, bis keine passenden Daten mehr gefunden werden.
Dabei wird immer die zuletzt erzeugte neue Datei als alte Datei benutzt.

Diese Betriebsart können Sie verwenden, wenn Sie nicht alle alten Versionen
Ihrer Programme archivieren wollen.

Die Patchdatei sollte dann sinnvollerweise nicht die Änderungen aller alten
Versionen auf die neueste Version enthalten, sondern jeweils die Änderungen
von einer Version zur nächsten.

@ENDNODE


@NODE "Hinweise" "Hinweise zur Benutzung"
@SMARTWRAP
@{LINDENT 1}

@{B}Diskussion und Hinweise zur Benutzung:@{UB}


Inzwischen habe ich einige Mails mit Kommentaren zur Geschwindigkeit
und der Größe der resultierenden Patchdatei erhalten.

Einige fanden die Patchdatei viel kleiner als die anderer Patcher,
andere wiederum nicht, und allen ist das Compare-Programm nicht schnell genug.


Da es nicht möglich ist, ein Dateiformat für die Patchdatei zu entwickeln, das
in allen Fällen das kürzeste Ergebnis liefert (die Größe der Datei hängt vom
Abstand der passenden Daten ab und der Art und Weise, diesen Abstand zu
adressieren), hat GCompare vier verschiedene Algorithmen.
Der Optimierer wählt das beste Format aus, was aber etwa die 4-fache
Rechenzeit braucht.

Wenn Ihnen das zu lange dauert, dann können Sie das Format mit dem Argument
"mode" direkt angeben.

In den meisten Fällen liefert "mode 1" ein gutes Ergebnis. Wenn dabei für
große Dateien GCompare zu lange rechnet, dann können Sie "mode 3" benutzen.
Das Argument "quick" schaltet die schnellste Suche ein, aber dann wird die
Patchdatei deutlich größer.


Wenn Sie die Ergebnisse von GCompare mit denen anderer Programme vergleichen
wollen, sollten Sie das auch mit komprimierten Versionen der Patchdateien tun.
GCompare besitzt keine eingebaute Kompression (im Gegensatz zu anderen
Vergleichsprogrammen mit Lauflängenkompression), weil ich denke, daß alle
Vertriebsdateien vor ihrer Veröffentlichung ohnehin komprimiert werden und
eine doppelte Kompression die Effektivität wieder verringert.


GCompare sucht passende Daten nicht nur in der alten Datei, sondern
gegebenenfalls auch in der bereits vorhandenen Patchdatei. Die resultierende
Patchdatei wird also verglichen mit einzelnen Patchdateien um so effektiver,
je mehr Patches verschiedener Versionen des gleichen Programms sie enthält.



Und zur Geschwindigkeit: Es gibt wirklich keinen Weg, GCompare wesentlich
schneller zu machen. GCompare sucht passende Daten in der gesamten alten Datei
(und nicht nur in einem Relativbereich wie andere Patchprogramme).
Wenn Sie wirklich nicht so lange warten können, dann sollten Sie den
"quick"-Modus benutzen.


------


Um GPatch nicht zu groß werden zu lassen, ist das Bearbeiten der älteren
Dateiformate nicht mehr vorgesehen. Damit Sie bei Bedarf auch diese
Patchdateien bearbeiten können, sind die Versionen 1.4 und 1.6 ebenfalls
noch im Lieferumfang.

Wenn GPatch eine alte Patchdatei findet, dann teilt es Ihnen mit, welche
Version Sie dafür brauchen.


@ENDNODE

@NODE "Details" "Technische Details"
@SMARTWRAP
@{LINDENT 1}

@{B}Technische Details@{UB}


@{B}mode 1@{UB}


Modus 1 ist am effektivsten, wenn die meisten Änderungen der Dateien
kleiner als 128 Byte sind.


@{B}mode 2@{UB}


Modus 2 ist bei vielen sehr kleinen Änderungen am effektivsten.


@{B}mode 3@{UB}


Modus 3 findet passende Daten nur in einem Relativbereich von 64 KB.

Dafür wird aber nur eine lineare Suche gebraucht, was besonders bei
sehr großen Dateien nützlich ist.


@{B}mode 4@{UB}


Modus 4 ähnelt Modus 1, wobei die Vorteile bei Dateien mit wenigeren aber
größeren Änderungen liegen.


@{B}quick@{UB}


Der schnelle Modus produziert dasselbe Dateiformat wie Modus 3, es
wird aber nur in einem Relativbereich von 256 Byte nach passenden Daten
gesucht.


@ENDNODE

@NODE "Beispiel" "Beispiel"
@SMARTWRAP
@{LINDENT 1}

@{B}Beispiel@{UB}



Als Beispiel für die Anwendung der Patchprogramme habe ich Skripts für das
Erzeugen und Anwenden einer Patch-Datei eines fiktiven Programms beigelegt.


@{" MakePatchFile " LINK "ExampleScripts/MakePatchFile/MAIN"} erzeugt
die Patch-Datei
und @{" UpdateMyProgram " LINK "ExampleScripts/UpdateMyProgram/MAIN"} führt
das Patchen aus.


In dem Beispiel wird davon ausgegangen, daß verschiedene ältere Versionen
des Programms "MyProgram" in einem Archiv namens "Archive" liegen. Der Patch
für das Programm und eine Anleitung "MyProgram.readme" wird in diesem
Beispiel direkt auf der Programmdiskette "MyProgram" ausgeführt.


@ENDNODE

@NODE "Copyright" "Copyright, Vertrieb und Haftungsausschluß"
@SMARTWRAP
@{LINDENT 1}

@{B}Copyright@{UB}


Das Copyright © 1997 von GCompare und GPatch liegt bei


Ralf Gruner, An der Sense 5a, D-02779 Großschönau

ralf.gruner@t-online.de



@{B}Vertrieb@{UB}


GCompare und GPatch sind Freeware. Sie können beliebig eingesetzt werden,
einschließlich der Anwendung für kommerzielle Programme.


Wenn Sie aber Wert auf zukünftige Updates legen, dann senden Sie mir bitte
eine eMail, damit ich weiß, daß es überhaupt Benutzer der Programme gibt.
Es gibt immer noch einiges zu verbessern, aber die Zeit dafür nehme ich mir
nur, wenn es auch jemand braucht.
Die Änderungsliste der Programme finden Sie in der englischen Anleitung.



Und (wer's lesen will):


@{B}Rechtliches@{UB}


Bei der Entwicklung der Software wurde mit allergrößter Sorgfalt vorgegangen.
Trotzdem sind Fehler nicht vollständig ausgeschlossen. Der Autor übernimmt
keine Haftung für Schäden, die direkt oder indirekt auf die Benutzung
seiner Programme zurückzuführen sind.




@ENDNODE

@NODE "Credits" "Credits"
@{LINDENT 1}
@SMARTWRAP

@{B}Danksagungen@{UB}


an alle, die sich bei @{" mir " LINK "Copyright" 0} gemeldet haben,
entweder um mitzuteilen, daß sie GCompare benutzen oder um Testberichte
zu senden:


Thomas Baust

Christian Beck

Domenic Gebauer

John Girvin

Bernardo Innocenti

Richard Koerber

Tom Newton

Maik Schreiber

und Dirk Stöcker für seine ausführliche Fehlersuche.


@ENDNODE

@NODE "Index" "Stichwortverzeichnis"
@{LINDENT 1}

@{B}Stichwortverzeichnis@{UB}
@SMARTWRAP


A

Änderungsliste siehe History in
der @{" englischen Bedienungsanleitung " LINK "GPatch.guide/MAIN"}


B

@{" Beispiel " LINK "Beispiel" 0}


C

@{" Copyright " LINK "Copyright" 0}


G

@{" GCompare " LINK "GCompare" 0}

@{" GPatch " LINK "GPatch" 0}


H

@{" Hinweise " LINK "Hinweise" 0}


M

@{" mode " LINK "Details" 0}




@ENDNODE


