/convert-binhex

Extract data from Macintosh BinHex files

Primary LanguagePerlOtherNOASSERTION

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 (<STDIN>) {
    	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 (<STDIN>) {
    	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.