Extensión de nombre de archivo | .hqx |
---|---|
Tipo de medio de Internet |
|
Identificador de tipo uniforme (UTI) | archivo com.apple.binhex |
BinHex , originalmente abreviatura de "binario a hexadecimal", es un sistema de codificación de binario a texto que se utilizó en el sistema operativo Mac OS clásico para enviar archivos binarios por correo electrónico . Originalmente era una codificación hexadecimal , pero las versiones posteriores de BinHex son más similares a uuencode , pero combinan ambas "bifurcaciones" del sistema de archivos de Mac junto con información de archivo extendida. Los archivos BinHex ocupan más espacio que los archivos originales, pero no se corromperán con software que no sea " limpio de 8 bits ".
BinHex fue escrito originalmente en 1981 por Tim Mann para el TRS-80 como una versión independiente de un esquema de codificación originalmente incorporado en un popular emulador de terminal , ST80-III por Lance Micklus. BinHex se utilizó para enviar archivos a través de los principales servicios en línea , como CompuServe , que no eran "limpios de 8 bits" y requerían protección ASCII para sobrevivir. Sin embargo, no todos usaban ST-80, por lo que Mann escribió BinHex para permitir que los usuarios de otros terminales usaran el formato. [1]
El sistema ST-80 original funcionaba convirtiendo el contenido de los archivos binarios en números hexadecimales , que se codificaban como dígitos y letras ASCII0
( – 9
, A
– F
). Luego añadía una nueva línea después de cada 60 caracteres. El sistema se hizo muy popular después de que Mann lo subiera al área de archivos TRS-80 de CompuServe. El sistema rápidamente obtuvo la incorporación de una suma de comprobación al final de cada línea para comprobar si había errores. Bill Stockwell convirtió esa versión al compilador BASIC/S, que funcionaba mucho más rápido que la versión interpretada de Mann. [1]
Los archivos BinHex de la época solían tener la extensión .hex . Pronto aparecieron versiones para otras plataformas populares de la época, incluida la Apple II . Más tarde, CompuServe agregó compatibilidad con transferencias de 8 bits y el formato desapareció rápidamente. [1]
El problema de la carga de archivos todavía existía en CompuServe cuando se lanzó Mac por primera vez en 1984. En abril de 1984, William Davis portó BinHex a Mac usando Microsoft BASIC para producir una versión que era en gran parte idéntica a las versiones TRS-80 de la misma era. [1] Esta versión solo admitía la codificación de la "bifurcación de datos", ignorando la bifurcación de recursos , lo que significaba que solo podía usarse para archivos de datos. El aumento en el uso del correo electrónico de Internet coincidió aproximadamente con el lanzamiento de Macintosh, y la versión de Davis fue publicada en la lista de correo Info-Mac por Joel Heller en junio de 1984. Varias versiones más nuevas se publicaron durante 1984, lo que resultó en BinHex 3 que podía codificar ambas bifurcaciones.
Yves Lempereur, autor del primer ensamblador para Mac, MacASM, descubrió que para poder cargar sus archivos en CompuServe tenía que usar BinHex. La versión BASIC era muy lenta, por lo que Lempereur adaptó BinHex 3 al ensamblador y lo lanzó como BinHex 1.0. El programa era aproximadamente cien veces más rápido que la versión BASIC y pronto comenzaron a llegarle solicitudes de actualización. [2]
El formato original de BinHex era bastante simple, pero no era muy eficiente porque expandía cada byte de entrada a dos, como lo requiere la representación hexadecimal (una codificación de 8 a 4 bits). Para BinHex 2.0, Lempereur utilizó una nueva codificación de 8 a 6 que redujo el tamaño del archivo en un 50 %. También aprovechó la oportunidad para expandir la suma de comprobación de 8 a 16 bits. [2]
Esta nueva codificación utilizaba los primeros 64 caracteres de impresión ASCII, incluido el espacio, para representar los datos, [3] de forma similar a uuencode . Aunque la nueva codificación ya no era de naturaleza hexadecimal , se mantuvo el nombre establecido del programa. Los archivos más pequeños eran incompatibles con los antiguos, por lo que la extensión pasó a ser .hcx , c de compacto. La nueva versión reemplazó a las anteriores "de la noche a la mañana". [2]
Lempereur tenía inquietudes sobre algunas de las características de BinHex, en particular su uso de una suma de comprobación en lugar de una verificación de redundancia cíclica (CRC) y el hecho de que la información de metadatos en el encabezado estaba en texto simple y, por lo tanto, podía corromperse de la misma manera que los datos. [2]
Para resolver todos estos problemas, Lempereur lanzó BinHex 4.0 en 1985, saltándose la versión 3.0 para evitar confusiones con la versión BASIC, que ya no existía. La versión 4.0 combinó primero la bifurcación de datos, la bifurcación de recursos y los metadatos de archivo en un formato común de 8 bits, ejecutó la codificación de longitud de ejecución (RLE) en el resultado para proporcionar cierta compresión y luego ejecutó la conversión de 8 a 6 en el resultado y protegió todo con múltiples CRC. Los .hqx
archivos resultantes tenían aproximadamente el mismo tamaño que los .hcx
de , pero eran mucho más robustos. [2]
Aproximadamente en la misma época en que se lanzó BinHex 4, la mayoría de los servicios en línea comenzaron a admitir protocolos de transferencia de archivos de 8 bits robustos, como ZMODEM , y desapareció la necesidad de blindaje ASCII. Sin embargo, esto dejó un problema en Mac, ya que todavía era necesario codificar las dos bifurcaciones en una sola.
Un esfuerzo de equipo entre los programadores de comunicaciones de Macintosh, incluido Lempereur, dio como resultado MacBinary . Estos .bin
archivos dejaron el contenido de las bifurcaciones en su formato original de 8 bits y agregaron un encabezado simple para combinarlos en la recepción; los archivos MacBinary eran, por lo tanto, mucho más pequeños que BinHex. Lempereur lanzó BinHex 5.0, casi idéntico a 4.0 con la excepción de que usaba MacBinary para combinar las bifurcaciones antes de ejecutar la codificación 8 a 6. Esto tuvo poco uso, como esperaba. [2]
En Internet , el correo electrónico seguía siendo el método principal para transferir archivos. En ese momento, relativamente poca gente tenía acceso completo a Internet y servicios como FTPmail eran la única forma en que muchos usuarios podían descargar archivos. Años después, cuando entró por primera vez a Internet, Lempereur se sorprendió al descubrir que BinHex 4.0 seguía siendo extremadamente popular. [2]
Se podrían lograr los mismos fines utilizando primero MacBinary o AppleSingle para combinar las bifurcaciones, y luego utilizando Uuencode o Base64 en el archivo resultante, pero ninguna de estas soluciones se volvió popular y BinHex 4.0 sobrevivió hasta fines de la década de 1990. Los archivos comprimidos del software clásico de Mac OS todavía están llenos de archivos BinHexed.
Al observar el contenido de un archivo BinHex, se puede observar que, generalmente, en la primera línea aparece un mensaje que lo identifica como BinHex, seguido de muchas líneas de 64 caracteres formadas por letras, números y signos de puntuación aparentemente aleatorios. A continuación, se muestra un ejemplo de cómo se ve realmente BinHex:
(Este archivo debe convertirse con BinHex 4.0):$f*TEQKPH#jdCA0d,R0TG!"6594%8dP8)3#3"!&m!*!%EMa6593K!!%!!!&mFNaKG3,r!*!$&[rr$3d,BQPZD'9i,R4PFh3!RQ+!!"AV#J#3!i!!N!@QKUjrU!#3'[q3"&4&@&483N)f!3#Xaj6bV-H8mJ!!!B3!N!0"!*!$[3#3!cR@iiY)!*!'[I%4!!JFp$X%X3@J!mZE6!GRiKUi$HGKMf0U61S46%i1"AB!TI,fLl!d1X3RDDE8ALfTCbM8UP9p4iUqY-0k4krHpk9XK@`rbj2Ti'U@5rGH@+[fr-i4T6-qXpfl26,k!H5$NmlTIkI'(l3GI4)f8mII&01CNEbC2LrNLBeaZ1HG@$G8!Z6"k)hh,q9p"r6FC*!!Se"(ic,Pd(4(b`pflKC`H1&JN5)GVX3mREdH55[l`%`Yhp%q092c`A(hPV)!83Dr&f4$$L#I1aM-"VjqV-q$34KQq6$M$f8#,Zc,i),!(`*ZN!$K$rS!LA%3cL+dYi"@,K(Z"`#3!fKi!!!:
Debe haber una línea de texto que los usuarios y las herramientas utilizan para reconocer las versiones de BinHex: (This file must be converted with BinHex 4.0)
. Cualquier texto anterior a esta línea debe ignorarse. [4]
El resto del archivo consta de tres partes: un encabezado (que contiene el nombre del archivo, el tamaño, etc.), una bifurcación de datos (que contiene los datos del archivo) y una bifurcación de recursos . Cada una tiene una suma de comprobación CRC de dos bytes .
Todo excepto la (This file
línea ... se ve entonces como un área de datos binarios, que se codifica en caracteres ASCII. El algoritmo de codificación dice que tres bytes de entrada se dividen en cuatro valores de 6 bits, de una manera similar a la forma en que lo hace Base64 . Los números 0 a 63 reciben caracteres de acuerdo con la siguiente lista!"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr
Al codificar, se debe insertar un <return> después de cada 64 caracteres. Después de la codificación, se colocan dos puntos antes y después de los datos.
hexbin
incluida en macutils , en hecx.c
la línea 187, utiliza la expresión ((c)-0x20) & 0x3f
para obtener el valor numérico de un dígito HCX con el valor ASCII c
.