GCompare / GPatch 2.0 --------------------- Autor: Ralf Gruner, An der Sense 5a, D-02779 Großschönau ralf.gruner@t-online.de GCompare ist ein Programm zum Erzeugen von Patch-Dateien für den Vertrieb von Updates irgendwelcher Programme oder anderer Dateien. GPatch dient dazu, diese Updates auszuführen. Natürlich weiß ich, daß es bereits wenigstens einen brauchbaren Patch-Generator für den Amiga gibt. Aber als ich ein Patch-Programm für meine DCF77-Software brauchte, besaß ich SAS-C (und damit scompare) noch nicht, und das Freeware-Programm, das ich im Aminet gefunden hatte, hat als erstes einen Absturz meines Rechners verursacht und sich damit sofort disqualifiziert. Deshalb habe ich also einen neuen Patcher geschrieben. Die wesentlichen Eigenschaften sind: ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ -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. -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. Benutzung: ¯¯¯¯¯¯¯¯¯¯ GCompare und GPatch sind Shell-Befehle. Syntax: GCompare [mode ] [quick] GPatch Wenn GCompare eine bereits bestehende Patchdatei findet, dann hängt es die Patches an diese Datei an. GPatch wählt die passenden Patches anhand der Dateilänge und der CRC-Signatur aus. Wenn die Programme keine Fehlermeldungen ausgeben, dann waren die jeweiligen Vorgänge erfolgreich. Schwerwiegende Fehler werden immer von einem Return-Code größer als 10 begleitet. 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 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 (ca. 10 mal die Dateigröße der alten Datei), arbeitet es nur noch in der Betriebsart 3 (die nur lineare Suche benötigt). Als Beispiel für die Anwendung der Patchprogramme habe ich Skripts für das Erzeugen und Anwenden einer Patch-Datei eines fiktiven Programms beigelegt. 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. Diskussion und Hinweise zur Benutzung: ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Inzwischen habe ich eine ganze Menge 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 Programme wie lha oder lzx es wahrscheinlich besser können. 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. Vertrieb: ¯¯¯¯¯¯¯¯¯ 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): Rechtliches ¯¯¯¯¯¯¯¯¯¯¯ 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. Ralf Gruner