MDIFF - MPATCH Versi¢n 1.50 Un programa simple pero completo para producir y aplicar patches a programas y archivos de datos para DOS, OS/2, Windows 95 y Windows NT. Manual en idioma espa¤ol. (C) 1995/96 Maurizio Giunti - Todos los derechos reservados 1.INDICE 1.INDICE 2 2.GARANTIA 3 3.DISTRIBUCION Y USO 3 4.¨POR QUE? 3 5.¨QUE HACE MDIFF-MPATCH? 3 6.EJEMPLOS 3 7.DOS, OS/2, WINDOWS 95 Y WINDOWS NT 4 8.LIMITES Y ERRORES CONOCIDOS 4 9.MDIFF - MDIFF2 - MDIFFW 4 10.MPATCH - MPATCH2 - MPATCHW 5 11.MDF2EXE - MDF2EXE2 - MDF2EXEW 6 12.SUGERENCIAS 6 13.LIBRERIAS PARA APLICAR PATCHES 6 14.REGISTRANDO MDIFF 6 15.COMO CONTACTAR AL AUTOR 7 16.AGRADECIMIENTOS 7 2 2.GARANTIA ESTE SOFTWARE Y LOS ARCHIVOS QUE LO ACOMPA¥AN SE VENDEN "COMO ESTAN" Y SIN GARANTIA EN CUANTO A SU FUNCIONAMIENTO O COMERCIABILIDAD U OTRAS GARANTIAS TANTO EXPLICITAS COMO IMPLICITAS. La £nica garant¡a otorgada con este software es que ocupa espacio en su disco. No se puede garantizar absolutamente que funcione perfectamente o que sea la soluci¢n para su problema. Sin embargo, no es un virus y no contiene (a menos que haya sido infectado o modificado despu‚s de la compilaci¢n) troyanos, back-doors u otras basuras similares. En cada caso el autor declina su responsabilidad directa o indirecta, por da¤os morales o materiales que eventualmente puedan resultar de su uso. 3.DISTRIBUCION Y USO Este software pertenece a la categor¡a de programas Shareware: por lo que se puede copiar y utilizar libremente por un per¡odo de prueba de 15 d¡as. Despu‚s de este per¡odo el usuario que desee continuar utiliz ndolo debe registrar su copia enviando el importe de la registraci¢n al autor, Maurizio Giunti. Los usuarios que paguen el importe de la registraci¢n recibir n una "clave de registraci¢n" que contenga su nombre (o el de su empresa/organizaci¢n para licencias a empresas). Este software puede ser distribu¡do sin costo alguno, exceptuando el cargo eventual por gastos de copiado o transporte/flete. De todos modos, es imperativo que se distribuya el PAQUETE ORIGINAL sin modificaci¢n ALGUNA. Unica excepci¢n: se puede distribuir el programa MPATCH.EXE, MPATCH2.EXE y/o MPATCHW.EXE con uno o m s archivos *.MDF creados con una copia REGISTRADA de MDIFF. Adem s se puede distribuir cualquier archivo ejecutable producido con MDF2EXE.EXE, MDF2EXE2.EXE y MDF2EXEW.EXE que contengan £nicamente patches MDF creados con una copia registrada de MDIFF. El autor de este programa no reclama derechos sobre los patches *.MDF. 4.¨POR QUE? Hace un tiempo ten¡a que distribuir una versi¢n actualizada de un programa m¡o: el paquete comprimido ocupaba m s de 200 KB, y seguramente hubiera sido m s conveniente para todos actualizar el viejo ejecutable mediante un patch. Me puse en b£squeda de un software que me permitiera crear y distribuir un patch de mis programas para DOS y OS/2: para DOS encontr‚ algunos (pero ninguno me satisfizo por varios motivos); para OS/2 no encontr‚ ni uno! Por lo tanto, decid¡ hacer uno y... aqu¡ est ! 8-) 5.¨QUE HACE MDIFF-MPATCH? MDIFF crea un archivo binario con las diferencias entre dos archivos. Con MPATCH y el archivo original se puede recrear el nuevo archivo partiendo del archivo de diferencias. Qu‚ hay de bueno en todo ‚sto? Simple: suponiendo que el archivo de diferencias sea m s peque¤o que el nuevo archivo, es m s conveniente distribuir s¢lo ‚sto, en lugar del archivo completo, sobre todo si la distribuci¢n se hace por modem. 6.EJEMPLOS Como un ejemplo puse en dos directorios de nombre VIEJO y NUEVO, el MDIFF versi¢n 1.45a (una versi¢n alfa (de prueba) en progreso) y MDIFF 1.45 respectivamente: Directorio de VIEJO\*.EXE MDIFF.EXE 46602 16/08/95 21.01 Directorio de NUEVO\*.EXE MDIFF.EXE 46602 21/08/95 00.45 3 C:\>mdiff VIEJO\MDIFF.EXE NUEVO\MDIFF.EXE MDIFF V1.50 - MDF file generator (Dos) (C) Copyright 1995/96 Maurizio Giunti Registered to: MAURIZIO GIUNTI VIEJO\MDIFF.EXE,NUEVO\MDIFF.EXE => MDIFF.MDF Working...(100%) MDF size: 1215 bytes Rate: 2% Directorio de *.MDF MDIFF.MDF 1215 7/10/95 13.43 Ahora podemos aplicar el patch llamado MDIFF.MDF al archivo viejo para reconstruir el nuevo: C:\>mpatch MDIFF.MDF VIEJO\MDIFF.EXE MPATCH V1.50 - MDF file applier (Dos) (C) Copyright 1995/96 Maurizio Giunti MDF file produced by: MAURIZIO GIUNTI Working: 0% |###########| 100% I obtain the following file: Directorio de *.EXE MDIFF.EXE 46602 21/08/95 0.41 que es el EQUIVALENTE a nivel BINARIO del nuevo archivo. 7.DOS, OS/2, WINDOWS 95 Y WINDOWS NT MDIFF y MPATCH para DOS, OS/2 y Windows32 se obtienen a trav‚s de la compilaci¢n del mismo fuente, por lo tanto, no existe ninguna diferencia en la funcionalidad en el uso de los programas sobre los distintos sistemas operativos. Adem s, los archivos *.MDF producidos con MDIFF para DOS pueden ser utilizados con MPATCH para OS/2 o Windows32 y viceversa. 8.LIMITES Y ERRORES CONOCIDOS MDIFF no puede trabajar con archivos de m s de 16 MB y no puede procesar archivos m s peque¤os que 20 veces el largo de un chunk. Adem s, MDIFF para OS/2, habi‚ndose obtenido a trav‚s de una compilaci¢n directa del fuente de MDIFF para DOS, no est  capacitado para trabajar con los atributos extendidos (EA) y simplemente se limitar  a ignorarlos. Adem s, si se construye un patch usando MDIFF para DOS u OS/2, al aplicarlo usando MPATCH para Windows32 se obtendr  una fecha y hora incorrecta en el nuevo archivo. Lo mismo sucede si se construye un patch con MDIFF para Windows32 y se lo aplica con MPATCH para DOS u OS/2. Esto error surge de una implementaci¢n distinta de la funci¢n utime() en los compiladores de Microsoft y Borland. 9.MDIFF - MDIFF2 - MDIFFW El programa MDIFF se ocupa de comparar dos archivos y de almacenar las diferencias entre ellos en un tercer archivo que, generalmente, es mucho m s compacto. Esta es la sintaxis de la l¡nea de comandos: 4 MDIFF [-C] [-R] [-F] [-S] [-Z] [-P] [] es obviamente el nombre de la versi¢n anterior del archivo a comparar, mientras que es el nombre de la versi¢n actual. Si es necesario, se puede especificar el nombre del archivo de diferencias a crear ; si no, MDIFF crea un archivo que tiene el mismo nombre que pero con extensi¢n ".MDF". Para buscar las partes similares en los archivos MDIFF usa un string base de largo predefinido de nombre chunk. El largo del chunk es de 16 bytes por defecto, pero puede ser cambiado, en un rango 4-256, con el switch -C seguido del largo deseado. Cuando MDIFF pierde el sincronismo entre los dos archivos que est  comparando trata de resincronizarlos buscando el chunk que est  elaborando en el archivo viejo. Esa b£squeda se efect£a en un entorno del £ltimo chunk encontrado, en el rango definido por el switch -R. Por defecto ese rango es de 8 bloques de 512 bytes, pero puede variar entre 1 y 16. Si esa b£squeda falla MDIFF trata de forzar ese sincronismo entre los dos archivos buscando en un rango mayor, definido por 1/16 del tama¤o del archivo viejo. Esta segunda b£squeda puede ser deshabilitada o su rango puede ser cambiado mediante el switch -F. Especificando el switch -S, una vez terminada la operaci¢n, MDIFF arrojar  algunos datos acerca de la composici¢n del archivo de diferencias. Tambi‚n es posible, mediante el switch -Z, insertar en el archivo de diferencias un breve comentario (con un m ximo de 2 KB), que ser  visualizado durante la aplicaci¢n del patch por parte de MPATCH. El comentario se toma del dispositivo de entrada standard (stdin) y, por lo tanto, puede ser tomado de un archivo usando el comando de redirecci¢n "<". Mediante el switch -P se puede proteger el patch con una clave de acceso (): aquel que no conozca la clave no podr  aplicar el patch. Por favor tenga en cuenta que el campo de clave hace distinci¢n entre may£sculas y min£sculas. 10.MPATCH - MPATCH2 - MPATCHW Con el archivo anterior y el archivo de diferencias .MDF se puede reconstruir el archivo nuevo usando MPATCH. Esta es la sintaxis de la l¡nea de comandos: MPATCH [-P] [ []] El £nico par metro obligatorio es el nombre del archivo de diferencias , ya que el mismo contiene el nombre de los otros dos archivos, pero es posible modificar esa imposici¢n simplemente especificando los nombres deseados en el orden correspondiente. MPATCH acepta s¢lo el switch -P que permite especificar una eventual clave de acceso necesaria para aplicar el patch. En caso de error MPATCH retorna un errorlevel que debe ser interpretado seg£n la siguiente tabla: 0 "­OK!" 1 "­Memoria insuficiente!" 2 "­No se puede abrir el archivo MDF!" 3 "­Archivo MDF inv lido!" 4 "­Las versi¢n del archivo MDF no coincide!" 5 "­NO REGISTRADO!" 6 "­Archivo VIEJO corrupto o incorrecto!" 7 "­No se puede abrir el archivo VIEJO!" 9 "­No se puede crear el archivo NUEVO!" 10 "­Falla general: archivo NUEVO corrupto!" 11 "­El archivo VIEJO y el NUEVO no pueden ser el mismo!" 12 "­El archivo nuevo ya fue patcheado!" 13 "­Clave de acceso incorrecta!" 5 11.MDF2EXE - MDF2EXE2 - MDF2EXEW MDF2EXE es un simple programa que se ocupa de almacenar uno o m s (hasta 127) archivos de patch MDF en un archivo ejecutable (DOS, OS/2 o Windows32). Este tipo de ejecutable se llama patch autoinstalable. La sintaxis del programa MDF2EXE: MDF2EXE [....] Los distintos pueden contener "wildcards" (*,?); en este caso MDF2EXE buscar  autom ticamente los archivos a insertar. El archivo ejecutable creado (que DEBE tener extensi¢n .EXE) podr  ser ejecutado sin ning£n par metro en la l¡nea de comandos y buscar  autom ticamente los archivos a actualizar. Opcionalmente se puede utilizar el switch -P para especificar la clave de acceso, o los switches -V o -L para visualizar la lista de los patches contenidos en el archivo. Advertencia: no se deben comprimir los patches autoinstalables con PKLite, LZexe u otros programas de compresi¢n/encriptaci¢n similares; de otro modo, dejar n de funcionar. 12.SUGERENCIAS El m‚todo ¢ptimo para construir un archivo de diferencias ser¡a el de buscar en todo el archivo viejo los chunks que componen el nuevo archivo; obviamente, ese m‚todo ser¡a de una lentitud exasperante. El algoritmo en que se basa MDIFF representa un compromiso entre resultado y velocidad de ejecuci¢n, por eso conviene regular los par metros de funcionamiento de MDIFF mediante los switches correspondientes. Veamos c¢mo actuar en algunas situaciones t¡picas: 1.Archivos con poqu¡simas modificaciones: es bueno utilizar un chunk muy amplio (32, 64 o m s) para reducir al m ximo el tama¤o del archivo de diferencias, sobre todo si se est  trabajando con archivos de texto o de bases de datos. 2.Archivos de texto: cada tanto un chunk de largo 32 es el m s indicado; es conveniente probar de disminuir o eliminar el sincronismo forzado mediante el switch -F. 3.Archivos ejecutables muy grandes: a menudo se obtienen resultados mejores agrandando el rango de b£squeda del sincronismo mediante el switch -R. Un £ltimo consejo: no esperen milagros de MDIFF. Si los dos archivos comparados son muy distintos el archivo de patch resultar  muy grande. En estos casos hay poco que hacer, y hay que resignarse a distribuir el nuevo archivo entero. MDIFF es realmente £til s¢lo si el n£mero de modificaciones hechas a los archivos no es demasiado grande. 13.LIBRERIAS PARA APLICAR PATCHES Inclu¡do en este paquete encontrar  un conjunto de librer¡as para crear sus propios programas para aplicar patches. Estas librer¡as NO PUEDEN aplicar patches MDF creados con una copia NO REGISTRADA de MDIFF. Esto no significa que no sean completamente funcionales. Significa que las librer¡as s¢lo pueden aplicar patches producidos por una copia registrada de MDIFF. 14.COMO REGISTRARSE Si registra MDIFF obtendr  una CLAVE DE REGISTRACION que contenga su nombre (o el de su (o el de su empresa/organizaci¢n para licencias a empresas). Cuando produzca un patch con un MDIFF registrado, se grabar  su nombre en el patch y cuando MPATCH aplique los mismos mostrar  su nombre. Adem s, todo usuario registrado tiene autorizaci¢n para distribuir libremente MPATCH.EXE, MPATCH2.EXE y MPATCHW.EXE con cualquier archivo MDF que haya creado. Tambi‚n se pueden distribuir libremente los patches autoinstalables creados por usuarios registrados. ­No se requiere el pago de royalties ni de cargos extras! Inclu¡do en el paquete de MDIFF encontrar  un programa de registraci¢n para Windows de nombre REGISTER.EXE. Por favor ejec£telo en el entorno Windows. 6 REGISTER.EXE es una peque¤a aplicaci¢n para Windows escrita por Grzegorz (Greg) Kochaniak, que provee toda la informaci¢n necesaria para comprar MDIFF y que permite mandarla directamente al servicio Kagi Shareware por correo postal, correo electr¢nico (e-mail) o fax. Si no usa Windows, por favor cont ctese conmigo. Por cualquier informaci¢n acerca de Kagi Shareware por favor lea el archivo KAGI.TXT. 15.COMO CONTACTAR AL AUTOR Por cualquier problema o pregunta puede contactarme en las siguientes direcciones: correo postal: 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 16.AGRADECIMIENTOS Querr¡a agradecer brevemente a todos aquellos que me han ayudado en el desarrollo de este software y de su documentaci¢n, y a aquellos que se ofrecieron con coraje como beta-testers. En orden alfab‚tico: 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 7