NAME
Mac::Macbinary - Decodes Macbinary files
SYNOPSIS
use Mac::Macbinary;
$mb = Mac::Macbinary->new(\*FH); # filehandle
$mb = Mac::Macbinary->new($fh); # IO::* instance
$mb = Mac::Macbinary->new("/path/to/file");
# do validation
eval {
$mb = Mac::Macbinary->new("/path/to/file", { validate => 1 });
};
$header = $mb->header; # Mac::Macbinary::Header instance
$name = $header->name;
DESCRIPTION
This module provides an object-oriented way to extract various kinds of
information from Macintosh Macbinary files.
METHODS
Following methods are available.
Class method
new( THINGY, [ \%attr ] )
Constructor of Mac::Macbinary. Accepts filhandle GLOB reference,
FileHandle instance, IO::* instance, or whatever objects that can do
"read" methods.
If the argument belongs none of those above, "new()" treats it as a
path to file. Any of following examples are valid constructors.
open FH, "path/to/file";
$mb = Mac::Macbinary->new(\*FH);
$fh = FileHandle->new("path/to/file");
$mb = Mac::Macbinary->new($fh);
$io = IO::File->new("path/to/file");
$mb = Mac::Macbinary->new($io);
$mb = Mac::Macbinary->new("path/to/file");
"new()" throws an exception "Can't read blahblah" if the given
argument to the constructor is neither a valid filehandle nor an
existing file.
The optional "\%attr" parameter can be used for validation of file
format. You can check and see if a file is really a Macbinary or not
by setting "validate" attribute to 1.
$fh = FileHandle->new("path/to/file");
eval {
$mb = Mac::Macbinary->new(FileHandle->new($fh), {
validate => 1,
});
};
if ($@) {
warn "file is not a Macbinary.";
}
Instance Method
data
returns the data range of original file.
header
returns the header object (instance of Mac::Macbinary::Header).
Following accessors are available via Mac::Macbinary::Header instance.
name, type, creator, flags, location, dflen, rflen, cdate, mdate
returns the original entry in the header of Macbinary file. Below is
a structure of the info file, taken from MacBin.C
char zero1;
char nlen;
char name[63];
char type[4]; 65 0101
char creator[4]; 69
char flags; 73
char zero2; 74 0112
char location[6]; 80
char protected; 81 0121
char zero3; 82 0122
char dflen[4];
char rflen[4];
char cdate[4];
char mdate[4];
EXAMPLE
Some versions of MSIE for Macintosh sends their local files as Macbinary
format via forms. You can decode them in a following way:
use CGI;
use Mac::Macbinary;
$q = new CGI;
$filename = $q->param('uploaded_file');
$type = $q->uploadInfo($filename)->{'Content-Type'};
if ($type eq 'application/x-macbinary') {
$mb = Mac::Macbinary->new($q->upload('uploaded_file'));
# now, you can get data via $mb->data;
}
COPYRIGHT
Copyright 2000 Tatsuhiko Miyagawa <miyagawa@bulknews.net>
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
ACKNOWLEDGEMENT
Macbinary.pm is originally written by Dan Kogai <dankogai@dan.co.jp>.
There are also "Mac::Conversions" and "Convert::BinHex", working kind
similar to this module. (However, "Mac::Conversions" works only on
MacPerl, and "Convert::BinHex" is now deprecated.) Many thanks to Paul
J. Schinder and Eryq, authors of those ones.
Macbinary validation is almost a replication of is_macbinary in
Mac::Conversions.
SEE ALSO
perl(1), the Mac::Conversions manpage, the Convert::BinHex manpage.