ZIP File System unaProducciónDr.Slump1998-9
Documentación oficial v0.1b (3-Marzo-1999)
Spanish version by Iván Montes Velencoso a.k.a Dr.Slump/Fearminds
Current ZFS version 1.0b3


INTRODUCCIÓN

El Zip File System permite acceder al contenido de cualquier fichero ZIP de una forma rápida y sencilla. Una de sus principales características, es que libera al programador de la tediosa tarea de descomprimir un fichero para poder utilizarlo. Con el ZFS no existe diferencia entre acceder a un fichero comprimido y empaquetado en un ZIP a acerlo a un fichero almacenado normalmente en un directorio del disco duro.

Esta simplicidad de manejo para los ficheros comprimidos no significa ninguna pérdida de libertad por parte del programador, sino que permite una mayor rapidez en el desarrollo de aplicaciones que precisen utilizar grandes cantidades de ficheros. Por ejemplo, si estás programando un videojuego puedes hacer todo el desarrollo sin comprimir las imagenes y al hacer la version final empaquetarlo todo en uno o varios ficheros ZIP y el programa seguirá funcionando correctamente sin haberle hecho ninguna modificación. ¡Es genial, verdad!


LICENCIA DE USO

El autor, que soy yo, no toma ninguna responsabilidad por cualquier daño que pueda ocasionar el uso de este software.

Probablemente podria haber utilizado la licencia GNU para distribuir esta librería, pero bajo mi punto de vista es innecesario utilizar una licencia tan amplia para una simple, aunque potentísima, librería. Por eso he creado mi propia licencia :

El ZIP File System o ZFS es copyright de Fearminds Productions. Este software puede ser distribuido siempre y cuando no se perciba una remuneración a cambio, como máximo se pueden cobrar el coste del medio de difusión (disquete, cdrom) y los gastos de envío. También está permitido la inclusión de esta librería en cd-roms recopilatorios y en cualquier medio de difusion gratuito (www, ftp ...)

Si usas este software tienes que poner al autor en los créditos y si puedes enviarme una copia del programa o decirme dónde puedo conseguirlo.

Si realizas alguna mejora en la librería deberías enviarmela para poder incluirla en la próxima distribución oficial.

Si realizas una aplicacion comercial de cualquier tipo usando este software, tienes que enviarme una copia completa del programa gratis y donar un 2% de los beneficios a una ONG como GreenPeace, Caritas, Unicef ...


DONDE CONSEGUIRLA

La distribución del ZFS esta disponible por el momento en :

My hompage, http://members.tripod.com/imontes/
X2FTP, ftp://x2ftp.oulu.fi/pub/msdos/programming/

Espero poder ponerla pronto en algunas Ftps anonimas


COMO CONTACTAR CON EL AUTOR

Puedes contactar con migo a traves de estas vias :

Email : drslump@axis.org

WWW : http://members.tripod.com/imontes/

Correo convencional :

FearMinds Productions
c/ Edison, 48
cp: 08812, Les Roquetes
Barcelona, España


DOCUMENTACIÓN


Con esta librería puedes acceder a ficheros comprimidos y empaquetados en formato ZIP tan facilmente como si estubieran normalmente guardados en el disco. Esto es posible gracias al diseño de la librería que reimplementa las rutinas estandard del Pascal para el manejo de ficheros (assign, reset, close, blockread ....), de esta forma es increiblemente fácil crear aplicaciones con ZFS. Una cosa a aclarar es que el ZFS jamas escribe en el disco, tan solo leé de él y hace todas las operaciones en memoria por lo que se puede utilizar perfectamente en un dispositivo de solo lectura como un cdrom.

El funcionamiento de la librería es tan sencillo que este documento es casi innecesario, pero hay que tener en cuanta algunas cosas para aumentar el rendimiento de la aplicación. Para una información detallada de lo que no es posible hacer con esta librería echa un vistazo a la sección "limitaciones" de más abajo.

Para utilizar la librería no hay más que incluirla en la sección Uses del programa y en cada unidad que haga uso de las rutinas de ficheros. Por ejemplo si tenemos una unidad para la carga de gráficos, tendremos que incluir el ZFS en la claúsula Uses de esa unidad para que las rutinas de carga reconozcan los ficheros comprimidos.

Unit LoadGFX;

Interface
...
Implementation
Uses ZFS;
...
end.
Program TEST001;

Uses Crt, LoadGFX, ZFS;

...


end.

Una vez que hemos incluido el ZFS en nuestro programa solo falta decirle que ficheros comprimidos queremos utilizar. Para ello utilizaremos la rutina OpenZIP(ZIPname :string; mode :Boolean) que nos devolvera un puntero del tipo pZip con la información del fichero Zip.
La rutina OpenZip permite dos modos de inicialización. El primero trata los ficheros del Zip como si estuvieran en el mismo directorio del programa, es el llamado NormalMode. El segundo, llamado DirMode, trata los ficheros como si estubieran en un subdirectorio con el nombre del fichero zip. Por ejemplo, si el zip se llama GFX.ZIP los ficheros que contenga seran situados en un subdirectorio llamado GFX.

Cuando abrimos un fichero el ZFS buscará en el disco tal fichero, si no lo encuentra buscará dentro de los Zips abiertos en orden de su abertura. Si abres primero GFX.ZIP y después SOUND.ZIP el sistema buscará los ficheros primero en GFX.ZIP y si no los encuentra en SOUND.ZIP. Espero que esto alla quedado claro porqué podría dar lugar a errores difíciles de encontrar.

¡Ya está!, una vez hemos abierto los Zips tan solo hay que operar como siempre has hecho para acceder a los ficheros del disco. Eso si, hecha un vistazo a las limitaciones del sistema para evitar errores y también mirate los trucos y consejos para una mejor optimización del código. Si después de eso todabía te queda alguna duda estudia los ejemplos y si aún así no consigues solucionar el problema mandamé un e-mail e intentare solucionar tus cuestiones.


LIMITACIONES

Debido a la naturaleza del sistema el acceso a ficheros comprimidos es mucho más lento que a los que están simplemente empaquetados. Cuando accedes a ficheros empaquetados sin comprimir la velocidad es más o menos la misma que si lo hicieras a una del disco, pero si lo haces a uno comprimido va mucho más lento.

En la version actual, aunque estoy trabajando en ello, no se puede acceder a una posición aleatoria de un fichero comprimido directamente. Esto es problema bastante gordo, porqué si tenemos un fichero de 64000 bytes comprimido y queremos empezar a leer en los 32000 bytes, el sistema tendrá que descomprimir los 32000 bytes primeros aunque no los utilicemos y después nos dara los bytes deseados. Esto provoca que para leer los últimos 32000 bytes tendremos que descomprimir en total 64000 bytes.

Otra limitación del sistema es que no es posible utilizar ficheros de tipo text comprimidos o empaquetados en un Zip. Esto es debido a que el Pascal trata de forma distinta a este tipo de ficheros y por falta de tiempo no he implementado las rutinas necesarias para soportarlos. Aunque el sistema no los soporte no quiere decir que no puedas utilizar estos ficheros si están en el almacenados en el disco.

Y por si fuera poco aún hay otra limitación. La forma de abrir un fichero con tipo (f : file of "type";) es ligeramente distinta del pascal estandard. El Zfs no puede saber el tamaño del tipo utilizado por el fichero, por lo que se lo tienes que dar tú. Mira el siguiente ejemplo :

Uses ZFS;
type
tRec = RECORD
a,b,c :Longint;
end;

var f: file of tRec;
begin
assign(f, 'TEST.REC');
reset(f, sizeof(tRec));
close(f);
end.
{En pascal sería Reset(f);}


TRUCOS Y CONSEJOS

-El ZFS necesita unos 60Kb para buffers temporales.

-No se pueden usar las rutinas de escritura a ficheros (Rewrite, BlockWrite, Write), con los ficheros empaquetados. Si lo haces el sistema devolverá un error de IO. Recuerda un ZIP es tratado como un dispositivo de solo lectura.

-Intenta no utilizar ficheros comprimidos demasiado grandes, pues no podras acceder a él aleatoriamente. Siempre que puedas leé toda la información que necesites de una vez.



ÚLTIMAS PALABRAS

Quiero dar las gracias a Christian Ghisler, Mark Adler, Dr Abimbola Olowofoyeku y Peter Vreman por la conversion al Pascal de la librería Unzip de INFO-ZIP


Espero que este documento te alla sido de ayuda


Copyright Iván Montes Velencoso a.k.a Dr.Slump/Fearminds, 3-3-1999