macresources
A Python library and command line tools to work with Classic MacOS resource forks on a modern machine.
Data Format
First, macresources and its sister package
machfs have a preferred representation for
Macintosh files, where Macintosh-specific information is stored in separate text
files.
-
The data fork is stored inside a file with the original name. This must be present for the following two files to be recognised.
-
The resource fork is stored in a 'Rez-style' textfile with
.rdumpappended to the original name. The format is slightly different from a vanilla 'DeRez' dump: non-ASCII characters are escaped, giving an ASCII-clean output:data '\0x96tbl' (0) { $"0000 0001 0000 0000 0000 0010 0669 4D61" /* .............iMa */ ... }; -
The four-character type and creator codes are concatenated (like a
PkgInfofile inside an app bundle) in a file with.idumpappended to the original name. If the type isTEXTorttro, then the data fork is converted to UTF-8 with Unix (LF) line endings.
Several other formats exist to store this Macintosh specific data in flat files,
the best known being
AppleSingle/AppleDouble,
MacBinary and
BinHex 4. The data format described here
instead adapts text-friendly formats (Rez and PkgInfo). The result is
especially useful for placing legacy Macintosh source code under modern version
control.
The role of macresources is to produce and parse Rez-style .rdump files, and
to produce and parse raw resource forks for machfs disk images.
Command Line Interface
rfx is a shell command wrapper for accessing resources inside a .rdump file.
Command line arguments are passed through to the command, but resources
specified as filename.rdump//type/id are converted to tempfiles before the
command is run, and back to resources after the command returns. This approach
even enables cp, mv and rm to work on individual resources.
rezhex and hexrez convert between
BinHex (.hqx) format and
macresources/macbinary format.
SimpleRez and SimpleDeRez are very simple reimplementations of the
deprecated Rez and DeRez utilities. They convert between raw resource forks
and Rez-style .rdump files. To access a raw resource fork under Mac OS X, you
can append /..namedfork/rsrc to a filename.
Commands implementing Apple's undocumented resource compression scheme:
greggybits(in Python:from greggybits import pack, unpack)
All utilities have online help.
API
The Python API is pretty spartan. It exists mainly to support machfs and the command line interface.
from macresources import *
make_rez_code(from_iter, ascii_clean=False) # Takes an iterator of Resource objects, returns Rez code
parse_rez_code(from_code) # Takes Rez code, returns an iterator of Resource objects
make_file(from_iter) # Takes an iterator of Resource objects, returns a raw resource fork
parse_file(from_file) # Takes a raw resource fork, returns an iterator of Resource objects
The Resource class inherits from bytearray.