home *** CD-ROM | disk | FTP | other *** search
- #ifndef IFF_H
- #define IFF_H
- /*----------------------------------------------------------------------*/
- /* IFF.H defs for IFF-85 Interchange Format Files. 1/22/86 */
- /* */
- /* By Jerry Morrison and Steve Shaw, Electronic Arts. */
- /* This software is in the public domain. */
- /*----------------------------------------------------------------------*/
-
- /* cut down for my stuff - karl */
-
- #ifndef COMPILER_H
- #include "compiler.h"
- #endif
-
- #ifndef LIBRARIES_DOS_H
- #include <libraries/dos.h>
- #endif
-
- typedef LONG ID; /* An ID is four printable ASCII chars but
- * stored as a LONG for efficient copy & compare.*/
-
- /* Four-character IDentifier builder.*/
- #define MakeID(a,b,c,d) ( (LONG)(a)<<24L | (LONG)(b)<<16L | (c)<<8 | (d) )
-
- /* Standard group IDs. A chunk with one of these IDs contains a
- SubTypeID followed by zero or more chunks.*/
- #define ID_FORM MakeID('F','O','R','M')
- #define ID_PROP MakeID('P','R','O','P')
- #define ID_LIST MakeID('L','I','S','T')
- #define ID_CAT MakeID('C','A','T',' ')
- #define ID_FILLER MakeID(' ',' ',' ',' ')
- /* The IDs "FOR1".."FOR9", "LIS1".."LIS9", & "CAT1".."CAT9" are reserved
- * for future standardization.*/
-
- /* Pseudo-ID used internally by chunk reader and writer.*/
- #define NULL_CHUNK 0L /* No current chunk.*/
-
-
- /* ---------- Chunk ----------------------------------------------------*/
-
- /* All chunks start with a type ID and a count of the data bytes that
- follow--the chunk's "logicl size" or "data size". If that number is odd,
- a 0 pad byte is written, too. */
- typedef struct {
- ID ckID;
- LONG ckSize;
- } ChunkHeader;
-
- typedef struct {
- ID ckID;
- LONG ckSize;
- UBYTE ckData[ 1 /*REALLY: ckSize*/ ];
- } Chunk;
-
- /* Need to know whether a value is odd so can word-align.*/
- #define IS_ODD(a) ((a) & 1)
-
- /* This macro rounds up to an even number. */
- #define WordAlign(size) ((size+1)&~1)
-
- /* ALL CHUNKS MUST BE PADDED TO EVEN NUMBER OF BYTES.
- * ChunkPSize computes the total "physical size" of a padded chunk from
- * its "data size" or "logical size". */
- #define ChunkPSize(dataSize) (WordAlign(dataSize) + sizeof(ChunkHeader))
-
- /* The Grouping chunks (LIST, FORM, PROP, & CAT) contain concatenations of
- * chunks after a subtype ID that identifies the content chunks.
- * "FORM type XXXX", "LIST of FORM type XXXX", "PROPerties associated
- * with FORM type XXXX", or "conCATenation of XXXX".*/
- typedef struct {
- ID ckID;
- LONG ckSize; /* this ckSize includes "grpSubID".*/
- ID grpSubID;
- } GroupHeader;
-
- typedef struct {
- ID ckID;
- LONG ckSize;
- ID grpSubID;
- UBYTE grpData[ 1 /*REALLY: ckSize-sizeof(grpSubID)*/ ];
- } GroupChunk;
-
- #endif
-