Quasijarus2Gzip, cómo se empieza un programa por casualidad
Resulta que recientemente cayó en mis manos un viejo archivo *.tar que contenía código fuente de diferentes programas de Unix y entre estos programas había varios, como una antiquísima versión de sendmail, que me picaron la curiosidad. Cuando fuí a descomprimir uno de los archivos me encontré con que no podía.
Anteriormente ya había descomprimido archivos *.tar.Z con gzip así que
lo siguiente que hice fue ver qué era exactamente ese archivo
*.tar.Z. Para ello utilicé el comando file
y me encontré conque era
un archivo del tipo Quasijarus Strong Compression Data. Como no sabía
lo que era, seguí investigando.
Ahora había que averiguar qué era exactamente el formato Quasijarus Strong Compression Data. Primero encontré una breve descripción del formato1 que contenía enlaces a la web del proyecto Quasijarus. Estos enlaces ya no están operativos pero gracias a archive.org2 pude repescar la web del proyecto Quasijarus3 y concretamente la información sobre el formato de compresión4.
Tras leerlo todo, lo más importante que averigüé fue que:
- Este formato de archivo está basado en Gzip y que ambos formatos solamente difieren en sus cabeceras.
- La cabecera del formato Quasijarus Strong Compression Data solamente está compuesta por los bytes 0x1f 0xa1 (número mágico).
Así que decidí hacerme un conversor de Quasijarus Strong Compression Data a Gzip ya que no podía ser muy complicado y además iba a proporcionarme la excusa de echar un rato divertido ;p.
El siguiente paso fue averiguar el formato de la cabecera del formato Gzip y según su especificación5, este tiene una cabecera de 10 bytes repartidos del siguiente modo:
- 2 bytes que son el número mágico 0x1f 0x8b
- 1 byte que indica el algoritmo de compresión (08 para DEFLATE).
- 1 byte que son banderas de cabeceras que, para el caso que nos ocupa, se podían dejar a 0.
- 4 bytes para el timestamp del archivo que también se puede dejar a 0 porque no es obligatorio indicarlo.
- 1 byte para las banderas de compresión que también se puede dejar sin asignar.
- 1 byte para el identificador del sistema operativo (3 para Unix)
Con toda la información clara me hice el conversor de Quasijarus Strong Compression a Gzip y puedes descargártelo aquí.