
               Informationen ber Binary Diff und Binary Patch
               ===============================================

                      Version 1.08 vom 8. Oktober 1994

                             (C) Robert Federle


     Bitte beachten:
     
     Binary Patch  (Dateiname:  BINPATCH.TTP)  ist Freeware, d.h.  jeder
     darf sich dieses Programm kopieren  und  es  benutzen,  ohne  dafr
     irgend etwas  zahlen  zu  mssen.  Das Copyright an diesem Programm
     bleibt aber weiterhin beim Autor.  Man erhlt  also  lediglich  ein
     kostenloses   Nutzungsrecht,   solange  man  BINPATCH.TTP  und  die
     zugehrigen   Texte   LIESMICH.TXT   und   MAN\CAT1\BINPATCH.1   in
     unvernderter Form  weitergibt.    Es  ist  auch  gestattet,  diese
     Dateien seinem eigenen Programmpaket beizulegen, solange immer alle
     Dateien enthalten sind.

     Binary Diff (Dateiname: BINDIFF.TTP) hingegen ist nur den  Personen
     vorbehalten,  die  einen  Vertrag  unterschrieben haben, in dem sie
     sich verpflichteten, die registrierte Version nicht  weiterzugeben.
     Nur dann erhlt man ein (im brigen kostenloses!) Nutzungsrecht fr
     Binary Diff. Jede Nutzung von Binary Diff ohne gltige Lizenz kommt
     der  Nutzung  einer  Raubkopie  gleich,  und dagegen werde ich mich
     ntigenfalls zur Wehr setzen!  Ich wrde es nmlich gar nicht gerne
     sehen, wenn man mein Entgegenkommen (die  kostenlose  Verfgbarkeit
     von Binary Diff und Binary Patch) derart mibrauchen wrde.


     Haftungsausschlu
     
     Die   Haftung   fr   unmittelbare   Schden,  mittelbare  Schden,
     Folgeschden und Drittschden  aus  dem  Einsatz  von  Binary  Diff
     und/oder  Binary  Patch ist, im Rahmen der gesetzlichen Regelungen,
     ausgeschlossen.  Die Anwendung erfolgt auf eigenes Risiko.

     Vereinfacht ausgedrckt: wer mit Binary Diff oder Binary Patch sich
     irgendwelche wichtigen oder unwichtigen Dateien  zerstrt,  sei  es
     nun  durch  einen Bedienfehler oder durch einen Programmfehler, ist
     selber schuld.  Ich habe versucht, keine Fehler in  den  Programmen
     brig zu lassen, was man auch daran erkennen kann, da der Betatest
     einige  Monate  lang  gelaufen  ist  und  die erste verffentlichte
     Version bereits die Nummer 1.08 trgt,  d.h.    bis  jetzt  gab  es
     gerade  mal  8  Beta-Releases,  die aber alle mit relativ harmlosen
     Fehlern zusammenhingen.    Dennoch  kann  (und  will)   ich   nicht
     ausschlieen,  da  sich noch weitere Fehler in einem der Programme
     befinden knnten.


     Die Philosophie hinter Binary Diff
     
     Vor nicht allzu langer Zeit galten Computerfreaks noch als  seltene
     Gattung,  whrend man heute Computer (und die zugehrigen Besitzer)
     sehr hufig antrifft.  Da war es nicht verwunderlich, da  mit  dem
     Aufstieg  der  Computer  auch die Nutzung des Telefonnetzes per DF
     einen Aufschwung erlebte.  So ist es heute nicht mehr selten,  sich
     neue  Versionen  oder  sogar neue Programme mittels Modem aus einer
     der zahlreichen Mailboxen zu besorgen, anstatt wie frher ber  den
     langwierigen  und  kostenspieligen Austausch von Disketten, die hin
     und wieder auf dem Transportwege verloren gingen  oder  irreparabel
     beschdigt wurden.

     Deshalb   greift  man  heute  (sofern  man  schon  vom  DF-"Virus"
     infiziert ist) zum Modem und zum Terminalprogramm und sucht sich in
     einer Mailbox die neueste Software zum Download heraus.    Aber  so
     ein  Download-Vorgang  dauert,  vor allem dann, wenn man keines der
     Highspeed-Modems besitzt.  Und je  lnger  der  bertragungsvorgang
     dauert,  desto  teurer  wird der Spa, sofern man sich nicht nur im
     Ortsnetz herumtreibt.    Jeder,  der  schon  mal  einen  500  KByte
     Dateitransfer in der Fernzone 2 (z.B. von Mnchen nach Hamburg) mit
     14400 BPS durchgefhrt hat, wei, wie "billig" so etwas ist.

     Trotz  der  leistungsfhigen Archivierer wie LHarc oder ST-Zip sind
     die Archive nmlich im Schnitt  immer  grer  geworden,  denn  die
     Atari-Programme  wurden  auch  immer  mehr  verbessert und in ihrem
     Leistungsumfang vergrert (was an und fr sich auch gut ist,  denn
     im  Moment  steht  es  um  die  Zukunft der Atari-Rechner wegen der
     Versumnisse von Atari selber nicht gerade gut).

     Besonders problematisch wird es,  wenn  gerade  eine  neue  Version
     herausgegeben  worden  ist,  und  der  Programmierer oder einer der
     Anwender  seiner  Software  entdeckt  einen  schwerwiegenden   oder
     rgerlichen Fehler, bei dem man eigentlich eine neue Version sofort
     hinterher schicken  mte.   Manch einer tut das auch, aber bei den
     Anwendern, die erst kurz zuvor die  neue  Version  erhalten  haben,
     kommt   dann  keine  Freude  auf,  weil  schon  wieder  ein  groes
     Datenpaket notwendig ist (die etwas "langsameren" Anwender strt so
     etwas natrlich nicht ;-)).

     Hier greift Binary Diff  ein.    Die  blichen  Archivierer  knnen
     Dateien "nur" komprimieren, aber sie kennen keinen Bezugspunkt oder
     die Umstnde,  aus denen heraus die Dateien entstanden sind.  Wrde
     man eine x-beliebige Datei nehmen und nur  ein  einziges  Datenbyte
     verndern, so wrde ein neu erstelltes Archiv in den meisten Fllen
     den gleichen  Umfang  einnehmen.    Knnte man aber dem Archivierer
     mitteilen, da die neue Datei  "zyx"  aus  der  alten  Datei  "xyz"
     entstanden  ist,  so  wrde im optimalsten Fall der Archivierer nur
     folgende Informationen  generieren  mssen,  um  aus  "xyz"  spter
     automatisch "zyx" erzeugen zu knnen:

     - Name der alten Datei als Referenz
     - Name, unter dem die neue Version gespeichert werden soll
     - Position des zu ndernden Datenbytes in der alten Datei
     - Neuer Wert fr dieses Datenbyte

     So  hnlich  arbeitet  auch  Binary Diff, nur kann Binary Diff auch
     noch neu hinzugekommene und entfernte Datenbytes erkennen, und dies
     nicht nur fr  eine  einzelne  Datei,  sondern  auch  fr  komplexe
     Verzeichnisstrukturen    innerhalb   eines   Laufwerks,   was   der
     Arbeitsweise eines Archivierers hnelt, weshalb  Archive,  die  von
     Binary  Diff  erzeugt worden sind, auch fortan Diff-Archive genannt
     werden.  Diese Archive kann man ganz einfach an ihrer Endung ".bdf"
     erkennen, wobei es meines Wissens nach kein weiteres  Programm  fr
     Atari-Rechner   gibt,  da  eine  Datei  mit  der  gleichen  Endung
     erzeugt.  Sollte dieser Umstand dennoch mal eintreten, so  ist  das
     dennoch  kein  Problem,  denn  Binary  Diff erkennt "seine" Archive
     eindeutig.

     Wenn  man  einmal  ein  Diff-Archiv  erzeugt  hat,  so   wird   man
     feststellen,  da es einen geringeren Umfang aufweist (sofern nicht
     einer  der  berhmten  Ausnahmeflle,  die  bekanntlich  die  Regel
     besttigen,  eingetreten  ist;  ich  kann  schlielich  auch  nicht
     zaubern, also warum sollte Binary Diff das knnen?), aber  mit  der
     Hilfe  von Binary Patch und der Vorgngerversion der zu erneuernden
     Software erhlt man genau den gleichen  Stand,  als  wenn  man  ein
     Archiv auf  die  bliche  Art und Weise erzeugt htte.  Der einzige
     Nachteil besteht nur darin, da man eben die Vorgngerversion schon
     besitzen mu.  In vielen Fllen trifft dies  aber  zu  (wer  mchte
     schon  mit  veralteter  Software arbeiten?), und genau dann ist der
     Einsatz von Diff-Archiven nur von Vorteil, denn es wird  nicht  nur
     ein  kleineres  Archiv  mittels  Modem  bertragen  (das schont den
     Geldbeutel), sondern whrend der Aktualisierung der alten  Software
     mittels  Binary  Patch  wird  auch  gleich  noch  eine  berprfung
     vorgenommen, ob die alten Dateien auch wirklich  in  Ordnung  sind.
     Ist  dies  nmlich nicht der Fall, so kann die Aktualisierung nicht
     durchgefhrt werden, was ansonsten dazu fhren knnte, da man  mit
     einer  beschdigten  Version  weiterarbeiten wrde, und das will ja
     wohl niemand, oder?


     Mgliche Einsatzgebiete von Binary Diff & Binary Patch:
     
     - Beseitigung von Fehlern (sogenannte Bug-Fixes)
     - Verbreitung von Update-Versionen (neue/verbesserte Funktionen)
     - Verwaltung von mehrsprachigen Versionen
     - Generieren von Programmen aus anderen, hnlichen Programmen
       (so knnte man z.B.  BINPATCH.TTP aus BINDIFF.TTP generieren)
     - Kompression von vielen, hnlichen Dateien
     - Kompakte Speicherung verschiedener Entwicklungsstnde
       (so etwas soll natrlich keine Konkurrenz fr ein RCS sein)
     - und noch vieles mehr...  (denkt euch doch selber was aus!)

     Es ist in der Tat so, da man zwar Binary  Diff  und  Binary  Patch
     hauptschlich  fr  eines der oben genannten Gebiete einsetzen wird
     (so  hoffe  ich  jedenfalls),  aber  dies  schliet  natrlich  ein
     vollkommen anderes  Anwendungsfeld  nicht  grundstzlich aus.  Zwar
     gibt es bestimmte Dateien,  die  sich  mit  Binary  Diff  nicht  so
     verarbeiten   lassen,   wie   man   es  gerne  mchte  (z.B.  schon
     komprimierte Dateien oder auch die  meisten  Hypertext-Dateien  von
     ST-Guide),   aber  findige  Kpfe  drfen  ruhig  mit  Binary  Diff
     herumexperimentieren.


     Anwendungsbeispiele fr Binary Diff:
     
     Fall 1: Erzeugen eines Korrekturarchivs wegen eines Fehlers

     Wer kennt das nicht?  Kaum hat man  eine  neue  Version  in  Umlauf
     gebracht,  schon  findet  man  einen  dummen  Fehler.  Nun kann man
     entweder ein neues Archiv zusammenstellen und herausgeben (was  bei
     kleinen  Archiven  noch ertrglich ist), aber bei Archiven mit mehr
     als 100 KByte ist es schon rgerlich fr viele Anwender,  wenn  sie
     schon wieder ein so groes Archiv per DF saugen mssen.

     Was kann  man  also dagegen machen?  Antwort: man erzeugt lediglich
     ein Diff-Archiv fr das fehlerhafte Programm, indem  man  die  alte
     (fehlerhafte)  Version  mit  der  korrigierten  Version vergleichen
     lt, und bringt das so entstandene Archiv zustzlich in Umlauf. So
     erspart man den Anwendern  einen  Groteil  der  Telefonkosten  und
     erreicht  dennoch  das  gleiche  Ziel  wie  mit  der  herkmmlichen
     Methode.

     Um dies zu realisieren, mu man mit Binary Diff die  alte  und  die
     korrigierte  Version  vergleichen,  aber gleichzeitig dafr sorgen,
     da beim Anwender nur eine einzige  (neue)  Version  brig  bleibt.
     Ein einfacher Dateivergleich reicht somit nicht aus, denn dort wird
     erwartet, da  beide Dateien unterschiedliche Namen besitzen.  Aber
     man kann sich ber einen kleinen Trick behelfen:

     Zuerst legt man einen Ordner "neu" in dem Verzeichnis  an,  in  dem
     sich  die  fehlerhafte  Version  befindet,  und  kopiert  dort  die
     korrigierte Fassung unter dem gleichen Namen hinein.   Anschlieend
     ruft man Binary Diff mit der folgenden Kommandozeile auf:

          bindiff --add --no-paths bugfix.bdf foo.prg neu\foo.prg
     Mit  der  Angabe  von  "--no-paths"  wird  der  Pfad "neu\" einfach
     weggelassen, und schon hat man als Referenz den gleichen Namen  wie
     bei der zu erzeugenden Datei, nmlich nur "foo.prg".

     Wenn  die  korrigierte  Version  aber  unter  einem  anderen  Namen
     angelegt werden soll, so geht dies natrlich viel einfacher:

          bindiff --add bugfix.bdf foo1.prg foo2.prg

     Damit wird also spter beim Anwender die Datei "foo2.prg" angelegt,
     und die Referenzdatei "foo1.prg" existiert auch weiterhin.


     Fall 2: Erzeugen eines Diff-Archives wegen einer neuen Version

     Um ein Update-Diff-Archiv fr mehr als nur eine Datei auf einmal zu
     erzeugen, wre es zwar mglich, Binary Diff mehrmals hintereinander
     aufzurufen, aber dies ist gar nicht notwendig.  Man braucht nmlich
     nur anstatt der Dateinamen den Namen zweier Verzeichnisse  angeben,
     wobei  es keine Rolle spielt, ob diese Namen mit einem "\" oder "/"
     enden oder nicht, da Binary Diff hier automatisch  den  Typ  (Datei
     oder Verzeichnis) erkennt.

     Um  nun also die Dateien in dem Verzeichnis "alt" mit dem aktuellen
     Stand der Dateien von  "neu"  zu  vergleichen,  kann  man  folgende
     Kommandozeile eingeben:

          bindiff --add update alt neu

     Damit  auch  in  "alt" und "neu" vorhandene Unterverzeichnisse (und
     natrlich  auch  deren  Inhalt)  beachtet  werden,  ist  noch   ein
     zustzlicher Schalter notwendig:

          bindiff --add --recursive update alt neu

     Beachten  sollte  man noch, da in dem Diff-Archiv keiner der Pfade
     "alt" bzw.  "neu" abgespeichert wird, da die  Verzeichnisnamen  fr
     Binary  Diff  nur  Hinweise  darstellen,  wo  die zu vergleichenden
     Dateien zu finden sind.


     Wie erzeugt man aus der Datei BINDIFF.CRP denn BINDIFF.TTP?
     
     Das geht ganz einfach.  Man braucht dazu lediglich

     - Binary Patch (BINPATCH.TTP)
     - Die unregistrierte Version BINDIFF.CRP
     - Das persnliche Registrationsarchiv REGISTER.BDF

     Dann kopiert man alle drei Dateien in ein Verzeichnis  und  startet
     dort  Binary  Patch, indem man die Datei REGISTER.BDF mit Hilfe der
     Maus auf das Icon von  BINPATCH.TTP  zieht,  wodurch  Binary  Patch
     gestartet und BINDIFF.TTP erzeugt wird.

     Man  kann  natrlich  zum  gleichen  Ergebnis kommen, wenn man eine
     Shell wie z.B.  die Mupfel aus dem Gemini-Paket einsetzt.    Hierzu
     geht  man  sehr hnlich vor: zuerst wechselt man in das Verzeichnis
     mit den drei Dateien und gibt dann  folgende Kommandozeile ein:

          binpatch register

     Wie man sieht, mu man die Endung ".bdf"  beim  Aufruf  von  Binary
     Patch nicht mit angeben, da sie automatisch hinzugefgt wird, falls
     sie fehlen  sollte.   Analog geht man brigens auch bei Binary Diff
     vor, denn dort gelten die gleichen Regeln. Was noch auffllt,  ist,
     da kein  Kommando  angegeben  wurde.   Dies ist in diesem Beispiel
     auch  nicht  notwendig  gewesen,  denn  sollte  mal  kein  Kommando
     angegeben  worden sein, so nimmt Binary Patch standardmig an, da
     man ein Archiv zur Aktualisierung einsetzen mchte, und  genau  das
     hatte man  ja  auch  vor.  Und auch hier gilt, da Binary Diff sich
     hnlich verhlt, nur wird  dort  angenommen,  da  man  ein  Archiv
     erzeugen  oder etwas zu einem bereits bestehenden Archiv hinzufgen
     mchte.


     Zum Schlu:
     
     Fr  weitere  Fragen  bin  ich   per   E-Mail   in   der   TUMA-Box
     (08231/87787),  im MausNet (Robert Federle@K) und ber das Internet
     (Robert_Federle@k.maus.de) erreichbar.    Wer  Interesse  an  einer
     Lizenz  hat,  sollte  sich  ebenfalls  vorher per E-Mail mit mir in
     Verbindung setzen und dabei folgende Daten mit angeben:

     - Name und vollstndige Anschrift
     - Name aller Programme, die man mit Binary Diff nutzen mchte
     - Typ des jeweiligen Programmes (z.B. Editor, Bibliothek, usw.)


     Was kommt noch?
     
     Die vorhandene Dokumentation ist noch nicht  perfekt.    So  fehlen
     noch  ein  paar  Hypertext-Dateien,  damit man wirklich einfach mit
     Binary  Diff   und   Binary   Patch   umgehen   kann,   auch   sind
     Lsungsvorschlge   fr   Probleme   noch   nicht  vorhanden  (aber
     eigentlich nur, weil ich im Moment keine Probleme kenne :-)),  aber
     vor  allem  fehlt  mir persnlich die Zeit, um mich intensiv um die
     Dokumentation zu kmmern.

     Die beiden Programme werden  aber  weiterentwickelt,  da  ich  noch
     einige  Ideen  habe,  was  man  noch  einbauen  knnte  (u.a.  eine
     eingebaute Kompression der Daten, die dann  noch  kleinere  Archive
     bieten wrde).

