MDIFF - MPATCH Release 1.60 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) 1997/98 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 Š 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 Š 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 responsabilit… diretta o indiretta, per eventuali danni morali o materiali derivanti dal suo uso. 3.USO E DISTRIBUZIONE Questo software appartiene allo Shareware, ci• significa che chiunque pu• liberamente distribuirlo e pu• 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 cosŤ registrati riceveranno un "codice di registrazione" che conterr… il loro nome (o il nome della loro impresa in caso di site license). Questo software pu• 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 pi— 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" pi— di 200 Kbyte, e sarebbe stato sicuramente pi— 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 pu• ricreare il nuovo file partendo dal file di differenza. Cosa c'Š di buono in tutto ci•? Semplice: supponendo che il file di differenza sia pi— breve del nuovo file, Š pi— 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 Š 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'Š 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 pu• trattare files pi— ampi di 16 Megabyte o pi— piccoli di 20 volte la lunghezza del chunk settata. 4 Dato che MDIFF per OS/2, Š ottenuto tramite una compilazione diretta dei sorgenti di MDIFF per Dos, non Š in grado di trattare gli attributi estesi, quindi si limiter… 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 otterr… avr… la data errata; ci• 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, Š molto pi— compatto. Vediamo come si usa: MDIFF [-C] [-R] [-F] [-S] [-Z] [-P] [] ovviamente Š il nome della versione precedente del file da comparare, mentre Š il nome della versione attuale. Se necessario si pu• 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 per default viene scelta automaticamente ma pu• essere impostata (in un range 4-1024) 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 Š di 8 blocchi di 512 byte, ma pu• variare tra 1 e 16. Se tale ricerca fallisce MDIFF cerca di forzare il sincronismo cercando in un raggio pi— ampio di quello definito solitamente ampio 1/16 della lunghezza del file. Questa seconda ricerca pu• essere disabilitata o il suo range pu• essere cambiato tramite lo switch -F. Specificando lo switch -S, alla fine dell'operazione, MDIFF fornir… alcuni dati sulla composizione del file di patch. E' inoltre possibile, tramite lo switch -Z, inserire nel file di differenza un breve commento (al massimo 2 Kbyte), che sar… visualizzato durante l'applicazione della patch da parte di MPATCH. Il commento viene prelevato direttamente dallo standard input e quindi pu• essere o digitato o prelevato da un file tramite l'apposito comando di redirezione "<". Tramite lo switch -P si pu• proteggere la patch con una password (): chi non conosce tale password non potr… 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 Š il nome del file di differenza perchŠ esso contiene i nomi degli altri due file, ma Š 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 cosŤ creato conterr… 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 Š: 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) potr… essere avviato senza alcun parametro sulla linea di comando e cercher… automaticamente i file da aggiornare. Opzionalmente pu• 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 Š basato MDIFF rappresenta un compromesso tra risultato e velocit… di esecuzione, per questo Š 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: Š opportuno utilizzare un chunk molto ampio (32, 64 o pi—) in modo da ridurre il pi— 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 Š il pi— indicato, Š 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 risulter… molto ampio. In questi casi c'Š ben poco da fare, bisogna rassegnarsi a distribuire il nuovo file interamente. MDIFF Š realmente utile solo se il numero delle modifiche apportate ai file non Š troppo grande. 13.LIBRERIE PER APPLICARE PATCH Fino alla release 1.50 nel pacchetto di distribuzione di MDIFF erano incluse alcune librerie per realizzare programmi per applicare patch. Tali librerie non sono pi— distribuite. Al loro posto Š invece possibile ordinare (vedi cap. 14) i sorgenti in linguaggio C di un programma di esempio per applicare patch prodotte da una copia registrata 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 verr… incluso tale nome, in questo modo al momento in cui la patch verr… applicata MPATCH potr… 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 Š 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 o a esplorare il seguente URL: http://www.kagi.com/ 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 URL: http://www.kagi.com/authors/giunti/ 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