123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #ifndef __MCBINIII_H__
- #define __MCBINIII_H__
- /****************************************************************
- MacBinaryIII.h
- Copyright 1997 Christopher Evans (cevans@poppybank.com)
- Basic encoding and decoding of Macintosh files to the
- MacBinary III spec.
- ****************************************************************/
- /*
- --------------------------------------------------------------------
- This source is copyrighted by Christopher Evans (cevans@poppybank.com)
- (available at ftp://ftp.lazerware.com/MacBinaryIII_src_C.sit
- homepage of Leonard Rosenthol leonardr@netcom.com)
- I made the following changes:
- * renamed files MacBinaryIII.h / MacBinaryIII.c to
- macbin3.c / macbin3.h
- * removed pragmas:
- #pragma once
- #pragma options align=mac68k
- * added 5 macros to make the migration into other projects easier:
- DELETE_MACBINARY_SOURCE -> delete the macbinary file after
- decoding
- INCLUDE_ENCODE_MACBINARY -> include the encode-part of the source
- INCLUDE_DECODE_MACBINARY -> include the decode-part of the source
- INCLUDE_CRC32CALC -> include the CRC32 calculation
- TRACE_MACBINARY -> produce some diagnostic printouts
- * changed the source layout to fit into a 80 col window
- * removed non-ASCII characters from the sources
- * renamed the function CalculateCRC() to crc32() and changed
- the order of the arguments. So the crc32() func of the InfoZip
- package can be used instead.
- * moved module specific macros and protos to the mcbiniii.c
- * added comments and enhanced the documention of the MacBinary Spec
- * changed definition crc_table[] from short to unsigned long.
- * improved the HeaderIsMacBinary() function to be more restrictive
- The specification says:
- "Offsets 83 and 87, Long Word, (the length of the forks)
- should be in the range of 0-$007FFFFF "
- However, I do not understand the reason of this range. The data fork
- can be much larger than $007FFFFF ( 2 Gigabytes! ) and the size of the
- resource fork can be until 16 MByte. ZipIt and Stuffit seems to be
- ignore this limit.
- I changed this limit (see kResourceForkMaxLen), and I removed the
- maximum check of the data fork.
- Dirk Haase (d_haase@sitec.de); 05.Dec.1998
- --------------------------------------------------------------------
- MacBinary III
- MacBinary is a standard format for binary transfer of arbitrary Macintosh
- documents via a telecommunication link. It is intended for use both between
- Macintoshes and for use in uploading arbitrary Macintosh documents to remote
- systems (where it is presumed that they will be stored as an exact image of
- the data transmitted). It does this by combing both the resource and data
- forks (as well as the "Finder Info") of a standard Macintosh file into a
- single data fork only file that can be stored on non-Macintosh machines.
- The format of the header for MacBinary III is as follows:
- Offset Length Contents
- 000 Byte old version number, must be kept at zero for
- compatibility
- 001 Byte Length of filename (must be in the range 1-31)
- 002 1 to 63 Bytes filename (only "length" bytes are significant).
- 065 Long Word file type (normally expressed as four characters)
- 069 Long Word file creator (normally expressed as four
- characters)
- 073 Byte original Finder flags
- Bit 7 - isAlias.
- Bit 6 - isInvisible.
- Bit 5 - hasBundle.
- Bit 4 - nameLocked.
- Bit 3 - isStationery.
- Bit 2 - hasCustomIcon.
- Bit 1 - reserved.
- Bit 0 - hasBeenInited.
- 074 Byte zero fill, must be zero for compatibility
- 075 Word file's vertical position within its window.
- 077 Word file's horizontal position within its window.
- 079 Word file's window or folder ID.
- 081 Byte "Protected" flag (in low order bit).
- 082 Byte zero fill, must be zero for compatibility
- 083 Long Word Data Fork length (bytes, zero if no Data Fork).
- 087 Long Word Resource Fork length (bytes, zero if no R.F.).
- 091 Long Word File's creation date
- 095 Long Word File's "last modified" date.
- 099 Word length of Get Info comment to be sent after the
- resource fork (if implemented, see below).
- 101 Byte Finder Flags, bits 0-7. (Bits 8-15 are already in
- byte 73)
- Bit 7 - hasNoInits
- Bit 6 - isShared
- Bit 5 - requiresSwitchLaunch
- Bit 4 - ColorReserved
- Bits 1-3 - color
- Bit 0 - isOnDesk
- *102 Long Word signature for indentification purposes ('mBIN')
- *106 Byte script of file name (from the fdScript field of an
- fxInfo record)
- *107 Byte extended Finder flags (from the fdXFlags field of
- an fxInfo record)
- 108-115 Unused (must be zeroed by creators, must be
- ignored by readers)
- 116 Long Word Length of total files when packed files are
- unpacked. As of the writing of this document, this
- field has never been used.
- 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.
- *122 Byte Version number of MacBinary III that the uploading
- program is written for (the version is 130 for
- MacBinary III)
- 123 Byte Minimum MacBinary version needed to read this file
- (set this value at 129 for backwards compatibility
- with MacBinary II)
- 124 Word CRC of previous 124 bytes
- *These fields have changed for MacBinary III.
- All values are stored in normal 68000 order, with Most Significant Byte
- appearing first then the file. Any bytes in the header not defined above
- should be set to zero.
- */
- /*
- Public functions
- */
- OSErr EncodeMacbinaryFile(FSSpec *file);
- OSErr DecodeMacBinaryFile(FSSpec *source);
- Boolean FSpIsMacBinary(FSSpec *file);
- #endif
|