Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
BinHex
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Infobox file format | name = BinHex 4 | icon = | extension = .hqx | mime = {{plainlist| * application/mac-binhex40 * application/mac-binhex * application/binhex}} | type code = | uniform type = com.apple.binhex-archive | genre = | container for = | contained by = | extended from = | extended to = | standard = }} '''BinHex''', originally short for "binary-to-[[hexadecimal]]", is a [[binary-to-text encoding]] system which was used on the [[classic Mac OS]] for sending binary files over [[email]]. BinHexed files take up more space than the original files, but avoid [[data corruption]] by software that is not [[8-bit clean]]. == History == === TRS-80 BinHex === BinHex was originally written in 1981 by Tim Mann for the [[TRS-80]] computer, as a standalone version of the encoding scheme of the popular [[terminal emulator]] ''ST80-III'', for users of other terminals. It was used for sending files via major [[online service]]s such as [[CompuServe]] which, not being 8-bit clean, required files to use [[ASCII armoring]] to survive. The system became very popular after Mann uploaded it to CompuServe's TRS-80 files area.{{sfn|Mann|1997}} The original scheme converted the binary file contents to hexadecimal numbers, encoding those as [[ASCII]] digits and letters (<code>0</code>β<code>9</code>, <code>A</code>β<code>F</code>), and adding a [[newline]] after every 60 characters. The system quickly gained the addition of a [[checksum]] at the end of every line to check for errors, and a subsequent conversion to use the [[BASIC|BASIC/S]] [[compiler]] allowed it to run much faster than the original [[Interpreter (computing)|interpreted]] version.{{sfn|Mann|1997}} BinHex files of the era were typically given the [[file extension]] {{code|.hex}}. Ports soon appeared for other popular computers of the era, including the [[Apple II]]. When CompuServe later added support for 8-bit transfers, the format fell out of use.{{sfn|Mann|1997}} === Mac BinHex === When the [[Macintosh 128K]] was released in January 1984, the file upload problem still existed on CompuServe. In April, BinHex was ported to the Mac using [[MS BASIC for Macintosh]].{{sfn|Mann|1997}} The [[Macintosh File System]] had introduced the storage of files as a "[[resource fork]]" and "data fork", and the Macintosh port only supported encoding of files' data fork, meaning it could only be used for data files. Several newer versions were published during 1984, resulting in BinHex 3 which could encode both forks. Yves Lempereur, author of the first [[Assembly language#Assembler|assembler]] for the Mac, MacASM, ported BinHex 3 to assembly language, increasing its speed a hundred-fold, and released it as BinHex 1.0.{{sfn|Lempereur|1997}} === Compact BinHex === The simplicity of the original BinHex format made it inefficient, expanding every [[byte]] of input into two, as required by the hexadecimal representation, an 8-to-4 bit encoding. Lempereur implemented a new 8-to-6 bit encoding, which decreased file size by 50% and expanded the checksum from 8 to 16-bits, releasing this as BinHex 2.0.{{sfn|Lempereur|1997}} The new encoding used the first 64 ASCII printing characters, including the space, to represent the data, similarly to [[uuencoding]]. As the smaller files were incompatible with the older format, Lempereur changed the file extension to {{code|.hcx}}, with ''c'' meaning ''compact''. The name BinHex did not change, despite the format no longer being a hexadecimal representation.{{sfn|Lempereur|1997}} === BinHex 4 and 5 === In 1985 Lempereur released BinHex 4.0, skipping 3.0 to avoid confusion with a similarly-numbered version of BASIC. This version performed the following sequence of operations:{{sfn|Faltstrom|Crocker|Fair|1994}} * Generate [[cyclic redundancy check]]s (CRCs) for the data fork, resource fork, and file metadata, instead of a single checksum * Combine the forks and metadata with their checksums into a common 8-bit format * Apply [[run-length encoding]] to provide some compression * Perform the 8-to-6 bit conversion. The resulting files were roughly the same size as those from BinHex 2, but much more robust, with the [[metadata]] information in the header being protected from corruption by no longer being in plain text. The file extension for this new format was {{code|.hqx}}.{{sfn|Lempereur|1997}} At about the same time, most online services had started to support robust 8-bit file transfer protocols such as [[ZMODEM]]. This obviated the need for ASCII armoring, but on the Macintosh there was still the need to encode the two forks into one, leading to the development of the [[MacBinary]] file format. Lempereur released BinHex 5.0, which only differed by using MacBinary to combine the forks, but it saw little use.{{sfn|Lempereur|1997}} === Internet usage === While the [[Internet]] was gaining popularity in the 1990s, email was still the primary method of moving files. Relatively few people had full access, and services like [[FTPmail]] were the only way many users could download files. Consequently, binary files still required encoding, and BinHex 4.0 remained a popular tool for doing so into the late 1990s. BinHexed files can still be found today in archives of [[classic Mac OS]] software.{{sfn|Lempereur|1997}} == BinHex 4 file format == A BinHex file may begin with any text content, followed by a line which indicates the format of the file, and that binary data is about to begin: ''(This file must be converted with BinHex 4.0)''. The text preceding that line is ignored when the file is converted out of BinHex format.{{sfn|Faltstrom|Crocker|Fair|1994}}{{sfn|Lewis|1991}} The binary data is encoded to 7-bit ASCII characters, with three bytes of input (24 bits) divided into four 6-bit values, in a similar fashion to [[Base64]] encoding but using a different set of characters. The encoded data has a colon ({{code|:}}) placed before and after it, and is split into lines of a maximum of 64 characters in length.{{sfn|Faltstrom|Crocker|Fair|1994}} === Example of a BinHex-encoded file === {{pre|(This file must be converted with BinHex 4.0) <nowiki>:</nowiki>$f*TEQKPH#jdCA0d,R0TG!"6594%8dP8)3#3"!&m!*!%EMa6593K!!%!!!&mFNa KG3,r!*!$&[rr$3d,BQPZD'9i,R4PFh3!RQ+!!"AV#J#3!i!!N!@QKUjrU!#3'[q 3"&4&@&483N)f!3#Xaj6bV-H8mJ!!!B3!N!0"!*!$[3#3!cR@iiY)!*!'[I%4!!J Fp$X%X3@J!mZE6!GRiKUi$HGKMf0U61S46%i1"AB!TI,fLl!d1X3RDDE8ALfTCbM 8UP9p4iUqY-0k4krHpk9XK@`rbj2Ti'U@5rGH@+[fr-i4T6-qXpfl26,k!H5$Nml TIkI'(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!!!: }} == References == {{reflist}} == Citations == * {{cite IETF|rfc=1741|author1-first=P.|author1-last=Faltstrom|author2-first=D.|author2-last=Crocker|author3-first=E.|author3-last=Fair|title=MIME Content Type for BinHex Encoded Files|publisher=[[Internet Engineering Task Force|IETF]]|date=December 1994}} * {{cite web|first=Yves|last=Lempereur|title=Re: Prehistory of BinHex|date=25 November 1997|url=https://www.tim-mann.org/trs80/yves.txt}} * {{cite web|first=Peter N.|last=Lewis|title=BinHex 4.0 Definition|date=August 1991|url=http://files.stairways.com/other/binhex-40-specs-info.txt}} * {{cite web|first=Tim|last=Mann|title=Prehistory of BinHex|url=https://www.tim-mann.org/binhex.html|year=1997}} == See also == * [[Binary-to-text encoding]] for a comparison of various encoding algorithms == External links == * [https://www.macintoshrepository.org/479-binhex-4-0 BinHex 4.0] at Macintosh Repository [[Category:Archive formats]] [[Category:Binary-to-text encoding formats]] [[Category:Computer-related introductions in 1984]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite IETF
(
edit
)
Template:Cite web
(
edit
)
Template:Code
(
edit
)
Template:Infobox file format
(
edit
)
Template:Pre
(
edit
)
Template:Reflist
(
edit
)
Template:Sfn
(
edit
)