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. CHANGES Version 1.118 Ready to go public (with Paul's version, patched for native Mac support)! Warnings have been suppressed in a few places where undefined values appear.