NAME Convert::BinHex - extract data from Macintosh BinHex files *ALPHA WARNING: this code is currently in its Alpha release. Things may change drastically until the interface is hammered out: if you have suggestions or objections, please speak up now!* SYNOPSIS Simple functions: use Convert::BinHex qw(binhex_crc macbinary_crc); # Compute HQX7-style CRC for data, pumping in old CRC if desired: $crc = binhex_crc($data, $crc); # Compute the MacBinary-II-style CRC for the data: $crc = macbinary_crc($data, $crc); Hex to bin, low-level interface. Conversion is actually done via an object (the section on "Convert::BinHex::Hex2Bin") which keeps internal conversion state: # Create and use a "translator" object: my $H2B = Convert::BinHex->hex2bin; # get a converter object while () { print $STDOUT $H2B->next($_); # convert some more input } print $STDOUT $H2B->done; # no more input: finish up Hex to bin, OO interface. The following operations *must* be done in the order shown! # Read data in piecemeal: $HQX = Convert::BinHex->open(FH=>\*STDIN) || die "open: $!"; $HQX->read_header; # read header info @data = $HQX->read_data; # read in all the data @rsrc = $HQX->read_resource; # read in all the resource Bin to hex, low-level interface. Conversion is actually done via an object (the section on "Convert::BinHex::Bin2Hex") which keeps internal conversion state: # Create and use a "translator" object: my $B2H = Convert::BinHex->bin2hex; # get a converter object while () { print $STDOUT $B2H->next($_); # convert some more input } print $STDOUT $B2H->done; # no more input: finish up Bin to hex, file interface. Yes, you can convert *to* BinHex as well as from it! # Create new, empty object: my $HQX = Convert::BinHex->new; # Set header attributes: $HQX->filename("logo.gif"); $HQX->type("GIFA"); $HQX->creator("CNVS"); # Give it the data and resource forks (either can be absent): $HQX->data(Path => "/path/to/data"); # here, data is on disk $HQX->resource(Data => $resourcefork); # here, resource is in core # Output as a BinHex stream, complete with leading comment: $HQX->encode(\*STDOUT); PLANNED!!!! Bin to hex, "CAP" interface. *Thanks to Ken Lunde for suggesting this*. # Create new, empty object from CAP tree: my $HQX = Convert::BinHex->from_cap("/path/to/root/file"); $HQX->encode(\*STDOUT); DESCRIPTION BinHex is a format used by Macintosh for transporting Mac files safely through electronic mail, as short-lined, 7-bit, semi-compressed data streams. Ths module provides a means of converting those data streams back into into binary data.