MDIFF - MPATCH Release 1.50 Un software semplice ma completo per produrre e applicare patch a programmi e file di dati per Dos, OS/2, Windows95 e WindowsNT. Manuale in lingua italiana. (C) 1995/96 Maurizio Giunti - Tutti i diritti riservati 1.SOMMARIO 1.SOMMARIO 2 2.GARANZIE 3 3.USO E DISTRIBUZIONE 3 4.PERCHE' 3 5.A COSA SERVE 3 6.ESEMPIO 4 7.DOS, OS/2, WINDOWS 95 E WINDOWS NT 4 8.LIMITI E BUG NOTI 4 9.MDIFF - MDIFF2 - MDIFFW 5 10.MPATCH - MPATCH2 - MPATCHW 5 11.MDF2EXE - MDF2EXE2 - MDF2EXEW 6 12.ALCUNI CONSIGLI 6 13.LIBRERIE PER APPLICARE PATCH 7 14.COME REGISTRARSI 7 15.COME CONTATTARE L'AUTORE 7 16.RINGRAZIAMENTI 8 2 2.GARANZIE QUESTO SOFTWARE E I FILE CHE LO ACCOMPAGNANO SONO DISTRIBUITI COSI' COME SONO, E SENZA GARANZIE DI FUNZIONAMENTO O QUALUNQUE ALTRA GARANZIA. L'unica garanzia fornita con questo software e che occupa spazio su disco. Non posso assolutamente garantire che funzioni perfettamente o rappresenti la soluzione di ogni vostro problema. Sono inoltre sicuro che non e un virus e non contiene (a meno che non sia stato infettato o modificato dopo la compilazione) Trojan-Horses, Back-Doors o altre diavolerie simili. In ogni caso l'autore declina ogni responsabilita diretta o indiretta, per eventuali danni morali o materiali derivanti dal suo uso. 3.USO E DISTRIBUZIONE Questo software appartiene allo Shareware, cio significa che chiunque puo liberamente distribuirlo e puo usarlo gratuitamente per un periodo di prova di 15 giorni. Dopo tale periodo gli utenti che continueranno ad usarlo devono registrare la loro copia mandando il contributo richiesto all'autore, Maurizio Giunti. Gli utenti cosi registrati riceveranno un _codice di registrazione_ che conterra il loro nome (o il nome della loro impresa in caso di site license). Questo software puo essere liberamente distribuito ma gratuitamente, salvo le spese di copia e spedizione. E' imperativo che il pacchetto originale che contiene il software sia distribuito senza alcuna modifica. Gli utenti registrati potranno distribuire liberamente MPATCH.EXE, MPATCH2.EXE e MPATCHW.EXE insieme a uno o piu file *.MDF prodotti con la loro copia registrata di MDIFF. Inoltre gli utenti registrati potranno liberamente distribuire patch auto installanti create con MDF2EXE.EXE, MDF2EXE2.EXE e MDF2EXEW.EXE, che contengano solo file *.MDF realizzate con una copia registrata di MDIFF. In ogni caso i file di patch *.MDF create da MDIFF possono essere liberamente distribuiti, l'autore di MDIFF non reclama alcun diritto su di essi. 4.PERCHE' Qualche tempo fa dovevo rilasciare una versione aggiornata di un mio programma: il pacchetto compresso "pesava" piu di 200 Kbyte, e sarebbe stato sicuramente piu conveniente per tutti aggiornare il vecchio eseguibile tramite una patch. Mi misi in caccia di un software che mi permettesse di creare e distribuire patch dei miei programmi per Dos e OS/2: per Dos ne ho trovati alcuni (ma non mi hanno soddisfatto per vari motivi), per OS/2 neanche uno! Ho quindi deciso di farmene uno e....eccolo qui ! 8-) 5.A COSA SERVE MDIFF crea un file binario di differenza tra due file. Con MPATCH e il vecchio file si puo ricreare il nuovo file partendo dal file di differenza. Cosa c'e di buono in tutto cio? Semplice: supponendo che il file di differenza sia piu breve del nuovo file, e piu conveniente distribuire solo quello invece di tutto il file, soprattutto se la distribuzione avviene via modem. 3 6.ESEMPIO A titolo di esempio ho messo in due directory chiamate OLD e NEW rispettivamente MDIFF.EXE release 1.45a (una release intermedia sulla quale stavo lavorando) e MDIFF.EXE release 1.45 definitiva: Directory of OLD\*.EXE MDIFF.EXE 46602 16/08/95 21.01 Directory of NEW\*.EXE MDIFF.EXE 46602 21/08/95 00.45 C:\>mdiff OLD\MDIFF.EXE NEW\MDIFF.EXE MDIFF V1.50 - MDF file generator (Dos) (C) Copyright 1995/96 Maurizio Giunti Registered to: MAURIZIO GIUNTI OLD\MDIFF.EXE,NEW\MDIFF.EXE => MDIFF.MDF Working...(100%) MDF size: 1215 bytes Rate: 2% Directory of *.MDF MDIFF.MDF 1215 7/10/95 13.43 Adesso possiamo applicare la patch MDIFF.MDF al vecchio eseguibile per ricostruire quello nuovo: C:\>mpatch MDIFF.MDF old\MDIFF.EXE MPATCH V1.50 - MDF file applier (Dos) (C) Copyright 1995/96 Maurizio Giunti MDF file produced by: MAURIZIO GIUNTI Working: 0% |###########| 100% Ottenendo il seguente file: Directory of *.EXE MDIFF.EXE 46602 21/08/95 0.41 che e identico al file MDIFF.EXE che della directory NEW. 7.DOS, OS/2, WINDOWS 95 E WINDOWS NT MDIFF e MPATCH per Dos, OS/2 e Windows sono ottenuti tramite la compilazione dei medesimi sorgenti, quindi non c'e alcuna differenza nella funzione e nell'uso di tali programmi sui vari sistemi operativi. Inoltre i files *.MDF prodotti con MDIFF per Dos possono essere utilizzati con MPATCH per OS/2 o Windows32 e viceversa. 8.LIMITI E BUG NOTI MDIFF non puo trattare files piu ampi di 16 Megabyte o piu piccoli di 20 volte la lunghezza del chunk settata. 4 Dato che MDIFF per OS/2, e ottenuto tramite una compilazione diretta dei sorgenti di MDIFF per Dos, non e in grado di trattare gli attributi estesi, quindi si limitera ad ignorarli. Inoltre se si costruisce un file di patch con MDIFF per Dos o OS/2 e si applica con MPATCH per Windows32 (o viceversa) il file che si otterra avra la data errata; cio dipende da una diversa implementazione della funzione utime() nei compilatori Borland e Microsoft. 9.MDIFF - MDIFF2 - MDIFFW Il programma MDIFF si occupa di comparare due files e di immagazzinare le differenze tra di essi in un terzo file che, generalmente, e molto piu compatto. Vediamo come si usa: MDIFF [-C] [-R] [-F] [-S] [-Z] [-P] [] ovviamente e il nome della versione precedente del file da comparare, mentre e il nome della versione attuale. Se necessario si puo specificare il nome del file di differenza da creare , altrimenti MDIFF crea un file che ha lo stesso nome di ma estensione ".MDF". Per cercare le parti simili nei files, MDIFF si serve di una stringa base di lunghezza predefinita detta chunk. La lunghezza del chunk e per default di 16 byte ma puo essere cambiata (in un range 4-256) con lo switch -C seguito dalla lunghezza voluta. Quando MDIFF perde il sincronismo tra i due files che sta confrontando, cerca di ritrovarlo scandendo il vecchio file alla ricerca del chunk che sta elaborando. Tale ricerca viene effettuata, in un intorno dell'ultimo chunk trovato, nel range definito dallo switch -R. Per default tale range e di 8 blocchi di 512 byte, ma puo variare tra 1 e 16. Se tale ricerca fallisce MDIFF cerca di forzare il sincronismo cercando in un raggio piu ampio di quello definito solitamente ampio 1/16 della lunghezza del file. Questa seconda ricerca puo essere disabilitata o il suo range puo essere cambiato tramite lo switch -F. Specificando lo switch -S, alla fine dell'operazione, MDIFF fornira alcuni dati sulla composizione del file di differenza. E' inoltre possibile, tramite lo switch -Z, inserire nel file di differenza un breve commento (al massimo 2 Kbyte), che sara visualizzato durante l'applicazione della patch da parte di MPATCH. Il commento viene prelevato direttamente dallo standard input e quindi puo essere o digitato o prelevato da un file tramite l'apposito comando di redirezione "<". Tramite lo switch -P si puo proteggere la patch con una password (): chi non conosce tale password non potra applicare la patch. 10.MPATCH - MPATCH2 - MPATCHW MDIFF sarebbe un programma inutile se non esistesse MPATCH. Infatti MPATCH si occupa, dati e , di ricreare . Vediamo come si usa: MPATCH [-P] [ []] L'unico parametro necessario e il nome del file di differenza perche esso contiene i nomi degli altri due file, ma e possibile modificare tale impostazione semplicemente specificando i nomi voluti 5 nell'esatto ordine. MPATCH ha il solo switch -P che permette di specificare una eventuale password necessaria per applicare la patch. In caso di errore MPATCH ritorna un errorlevel che deve essere interpretato secondo la seguente tabella: Codice Descrizione 0 "OK!" 1 "Out of memory !" 2 "Can't open MDF file !" 3 "Invalid MDF file !" 4 "MDF file version mismatch !" 5 "UNREGISTERED !" 6 "Bad or incorrect OLD file !" 7 "Can't open OLD file !" 8 "Can't create NEW file !" 9 "General failure: NEW file corrupted !" 10 "OLD and NEW can't be the same file !" 11 "NEW file was already patched ! " 12 "Wrong password !" 11.MDF2EXE - MDF2EXE2 - MDF2EXEW MDF2EXE si occupa di trasformare un file di patch *.MDF creato con MDIFF in un file ESEGUIBILE autoinstallante per Dos (MDF2EXE), OS/2 (MDF2EXE2) o Windows95/WindowsNT (MDF2EXEW). Il file cosi creato conterra al suo interno il programma di installazione e un certo numero di file di patch (al massimo 127). La sintassi per creare una patch autoinstallante e: MDF2EXE [....] I vari possono contenere anche wildcard, in questo caso MDF2EXE crchera' automaticamente i files da inserire. Il file eseguibile creato (che DEVE avere estensione .EXE) potra essere avviato senza alcun parametro sulla linea di comando e cerchera automaticamente i file da aggiornare. Opzionalmente puo essere utilizzato lo switch -P per specificare una password oppure gli switch -V o -L per visualizzare la lista delle patch contenute nel file. Un'unica nota: non comprimete le patch autoinstallanti con PKLite, LZExe o altri software simili, altrimenti esse cesseranno di funzionare. 12.ALCUNI CONSIGLI Il metodo ottimale per costruire un file di differenza sarebbe quello di ricercare per tutto il vecchio file i chunks che compongono il nuovo file; ovviamente tale metodo sarebbe di una lentezza esasperante. L'algoritmo su cui e basato MDIFF rappresenta un compromesso tra risultato e velocita di esecuzione, per questo e talvolta opportuno regolare i parametri di funzionamento di MDIFF tramite gli appositi switch. Vediamo come comportarsi in alcune situazioni tipiche: 1. File con pochissime modifiche: e' opportuno utilizzare un chunk molto ampio (32, 64 o piu) in modo da ridurre il piu possibile le dimensioni del file di differenza, soprattutto se si sta lavorando con files di testo o con archivi. 2. File di testo: di solito un chunk di dimensione 32 e il piu indicato, e opportuno provare a diminuire o togliere il sincronismo forzato tramite lo switch -F. 6 3. File eseguibili molto ampi: spesso si ottengono risultati migliori allargando il range di ricerca del sincronismo tramite lo switch -R. Un ultimo consiglio: non attendetevi miracoli da MDIFF. Se i due file confrontati sono molto dissimili il file di patch risultera molto ampio. In questi casi c'e ben poco da fare, bisogna rassegnarsi a distribuire il nuovo file interamente. MDIFF e realmente utile solo se il numero delle modifiche apportate ai file non e troppo grande. 13.LIBRERIE PER APPLICARE PATCH Nel pacchetto di distribuzione di MDIFF troverete un set di librerie per il linguaggio C per realizzare programmi per applicare patch. Queste librerie funzionano soltanto con file di patch *.MDF creati con una copia registrata di MDIFF. Cio non significa che queste librerie non siano perfettamente funzionanti, significa soltanto che per volonta dell'autore le librerie non possono applicare patch prodotte da copie non registrate di MDIFF. 14.COME REGISTRARSI Registrando MDIFF otterrete un _codice di registrazione_ che contiene il vostro nome (o il nome della vostra impresa in caso di site license). Producendo una patch con una copia registrata di MDIFF nel file *.MDF risultante verra incluso tale nome, in questo modo al momento in cui la patch verra applicata MPATCH potra mostrare il nome di chi ha realizzato la patch stessa. Inoltre gli utenti registrati sono autorizzati a distribuire liberamente MPATCH.EXE, MPATCH2.EXE e MPATCHW.EXE insieme alle patch *.MDF da essi prodotte, e a distribuire ogni patch auto installante che contenga solo file *.MDF prodotti con la loro copia registrata di MDIFF. Per registrare MDIFF dovrete utilizzare il programma REGISTER.EXE che troverete nel pacchetto di distribuzione. REGISTER.EXE e una applicazione per Windows scritta da Grzegorz (Greg) Kochaniak che si occupa di raccogliere interattivamente tutte le informazioni necessarie per richiedere la registrazione di MDIFF, e a prepararle per spedirle via Posta, TeleFAX o e-mail alla Kagi Shareware. Se non siete utenti Windows contattatemi. Per qualunque informazioni sui servizi di Kagi Shareware vi invito a leggere il file KAGI.TXT. 15.COME CONTATTARE L'AUTORE Se avete qualche domanda potete contattarmi ai seguenti indirizzi: Posta: Maurizio Giunti Via G.B. Foggini, 24 50142 Firenze (FI) ITALY e-mail: Fidonet: 2:332/102.3 Internet: giunti@kagi.com giunti@abeline.it giunti@statsun.ds.unifi.it 7 16.RINGRAZIAMENTI Vorrei brevemente ringraziare gli amici che mi hanno aiutato nello sviluppo di questo software e della documentazione allegata, o che si sono coraggiosamente offerti come beta-testers. In ordine alfabetico: Mauricio Mello de Andreade Andrea Baitelli Silvia Borri Juan Jose Comellas Filippo Dini Fabrizio Fioravanti Cristiano Guidoccio Giovanni Lopes Pegna Marco Maccaferri Marco Menichelli Giuseppe Scarpi Toni Tatafiore Duncan Wilcox 8