Date: Tue, 9 Feb 1993 15:37:11 +0800 From: Peter N Lewis Subject: tech/macbinary2+specs.txt This is a priliminary specification of an extension to the MacBinary II Standard to allow MacBinary to incorporate a directory tree in a similar way to a unix tar file. This is done by a fairly simple extension to the standard (which is documented seperately, and which you should be familiar with before reading this document). This extension is implemented by MacBinary II+ posted at the same time. **** Cut here **** MacBinary II+ Preliminary Specification This is a priliminary specification of an extension to the MacBinary II Standard to allow MacBinary to incorporate a directory tree in a similar way to a unix tar file. This is done by a fairly simple extension to the standard (which is documented seperately, and which you should be familiar with before reading this), basically, I defined a 128 byte block that marks the start of a folder, and another one that marks the end of the folder, and then set it up like this: start block for folder "Folder1" file1 - standard macbinary format file2 start block for "Folder2" file3 end block end block While the end block doesn't actually need to contain any information, its format is similar to the header block for consistency. Start Block: Offset 000-version 1 - this is incomptible with previous decoders. Offset 001-Byte, Length of foldername (must be in the range 1-63) Offset 002-1 to 63 chars, foldername (only "length" bytes are significant, the rest should be zero). Offset 065-Long Word, file type - 'fold' Offset 069-Long Word, file creator - $FFFFFFFF Offset 073-Byte, original Finder flags of folder (high byte) Offset 074-Byte, zero fill, must be zero for compatibility Offset 075-Word, folder's vertical position within its window. Offset 077-Word, folder's horizontal position within its window. Offset 079-Word, folder's window or folder ID. Offset 081-Byte, "Protected" flag (in low order bit). Offset 082-Byte, zero fill, must be zero for compatibility Offset 083-Long Word, Data Fork length 0 Offset 087-Long Word, Resource Fork length 0 Offset 091-Long Word, Folder's creation date Offset 095-Long Word, Folder's "last modified" date. Offset 099-Word, length of Get Info comment to be sent after the resource fork (if implemented, see below). *Offset 101-Byte, Finder Flags, bits 0-7. (Bits 8-15 are already in byte 73) *Offset 116-Long Word, Length of total files when packed files are unpacked. This may be zero to avoid having to preparse the folder when creating the MacBinary file. *Offset 120-Word, Length of a secondary header. If this is non-zero, Skip this many bytes (rounded up to the next multiple of 128) This is for future expansion only, when sending files with MacBinary, this word should be zero. *Offset 122-Byte, Version number of Macbinary II - 130 *Offset 123-Byte, Minimum MacBinary II version needed to read this file - 130 *Offset 124-Word, CRC of previous 124 bytes NOTE: The secondary header length MAY be non-zero, and if so, the secondary header immediately follows the Start Block, padded to a multiple of 128 bytes as usual. NOTE: The comment length MAY be non-zero, and if so, the comment immediately follows the Start Block or secondary header, padded to a multiple of 128 bytes as usual. End Block: Offset 000-version 1 - this is incomptible with previous decoders. Offset 065-Long Word, file type - 'fold' Offset 069-Long Word, file creator - $FFFFFFFE *Offset 116-Long Word, Length of total files when packed files are unpacked. This may be zero. *Offset 120-Word, Length of a secondary header. If this is non-zero, Skip this many bytes (rounded up to the next multiple of 128) This is for future expansion only, when sending files with MacBinary, this word should be zero. *Offset 122-Byte, Version number of Macbinary II - 130 *Offset 123-Byte, Minimum MacBinary II version needed to read this file - 130 *Offset 124-Word, CRC of previous 124 bytes NOTE: This block is static except for the total length field, which may be zero as well, in which case its totally static. You should recognize the Start and End blocks by the version, file type and creator fields. Decoders MUST NOT rely on ANY other fields in the End Block being valid. Encoders MAY fill them out to look like a start block, or may zero-fill them. Encoders SHOULD zero-fill any bytes not explicitly set - this applies to all header blocks and all padding. All internal files should have version 0, MacBinary II version 129,129. An extended MacBinary file MUST start with a Start Block. Thus a MacBinary II+ file is either: 1) A MacBinary II file encoding a single file, OR 2) A MacBinary II+ file encoding a single folder. **** Cut here ****