.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Macbinary 3" .TH Macbinary 3 "2004-07-02" "perl v5.8.8" "User Contributed Perl Documentation" .SH "NAME" Mac::Macbinary \- Decodes Macbinary files .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Mac::Macbinary; .Ve .PP .Vb 3 \& $mb = Mac::Macbinary->new(\e*FH); # filehandle \& $mb = Mac::Macbinary->new($fh); # IO::* instance \& $mb = Mac::Macbinary->new("/path/to/file"); .Ve .PP .Vb 4 \& # do validation \& eval { \& $mb = Mac::Macbinary->new("/path/to/file", { validate => 1 }); \& }; .Ve .PP .Vb 2 \& $header = $mb->header; # Mac::Macbinary::Header instance \& $name = $header->name; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This module provides an object-oriented way to extract various kinds of information from Macintosh Macbinary files. .SH "METHODS" .IX Header "METHODS" Following methods are available. .Sh "Class method" .IX Subsection "Class method" .IP "new( \s-1THINGY\s0, [ \e%attr ] )" 4 .IX Item "new( THINGY, [ %attr ] )" Constructor of Mac::Macbinary. Accepts filhandle \s-1GLOB\s0 reference, FileHandle instance, IO::* instance, or whatever objects that can do \&\f(CW\*(C`read\*(C'\fR methods. .Sp If the argument belongs none of those above, \f(CW\*(C`new()\*(C'\fR treats it as a path to file. Any of following examples are valid constructors. .Sp .Vb 2 \& open FH, "path/to/file"; \& $mb = Mac::Macbinary->new(\e*FH); .Ve .Sp .Vb 2 \& $fh = FileHandle->new("path/to/file"); \& $mb = Mac::Macbinary->new($fh); .Ve .Sp .Vb 2 \& $io = IO::File->new("path/to/file"); \& $mb = Mac::Macbinary->new($io); .Ve .Sp .Vb 1 \& $mb = Mac::Macbinary->new("path/to/file"); .Ve .Sp \&\f(CW\*(C`new()\*(C'\fR throws an exception \*(L"Can't read blahblah\*(R" if the given argument to the constructor is neither a valid filehandle nor an existing file. .Sp The optional \e%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 \*(L"validate\*(R" attribute to 1. .Sp .Vb 9 \& $fh = FileHandle->new("path/to/file"); \& eval { \& $mb = Mac::Macbinary->new(FileHandle->new($fh), { \& validate => 1, \& }); \& }; \& if ($@) { \& warn "file is not a Macbinary."; \& } .Ve .Sh "Instance Method" .IX Subsection "Instance Method" .IP "data" 4 .IX Item "data" returns the data range of original file. .IP "header" 4 .IX Item "header" returns the header object (instance of Mac::Macbinary::Header). .PP Following accessors are available via Mac::Macbinary::Header instance. .IP "name, type, creator, flags, location, dflen, rflen, cdate, mdate" 4 .IX Item "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 .Sp .Vb 14 \& 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]; .Ve .SH "EXAMPLE" .IX Header "EXAMPLE" Some versions of \s-1MSIE\s0 for Macintosh sends their local files as Macbinary format via forms. You can decode them in a following way: .PP .Vb 2 \& use CGI; \& use Mac::Macbinary; .Ve .PP .Vb 3 \& $q = new CGI; \& $filename = $q->param('uploaded_file'); \& $type = $q->uploadInfo($filename)->{'Content-Type'}; .Ve .PP .Vb 4 \& if ($type eq 'application/x-macbinary') { \& $mb = Mac::Macbinary->new($q->upload('uploaded_file')); \& # now, you can get data via $mb->data; \& } .Ve .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright 2000 Tatsuhiko Miyagawa .PP This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. .SH "ACKNOWLEDGEMENT" .IX Header "ACKNOWLEDGEMENT" Macbinary.pm is originally written by Dan Kogai . .PP There are also \f(CW\*(C`Mac::Conversions\*(C'\fR and \f(CW\*(C`Convert::BinHex\*(C'\fR, working kind similar to this module. (However, \f(CW\*(C`Mac::Conversions\*(C'\fR works only on MacPerl, and \f(CW\*(C`Convert::BinHex\*(C'\fR is now deprecated.) Many thanks to Paul J. Schinder and Eryq, authors of those ones. .PP Macbinary validation is almost a replication of \fBis_macbinary\fR in Mac::Conversions. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIperl\fR\|(1), Mac::Conversions, Convert::BinHex.