/* * * iff.h: General Definitions for IFFParse modules * * 6/27/91 */ #ifndef IFFP_IFF_H #define IFFP_IFF_H #include "iffp/compiler.h" #ifndef EXEC_TYPES_H #include <exec/types.h> #endif #ifndef EXEC_MEMORY_H #include <exec/memory.h> #endif #ifndef UTILITY_TAGITEM_H #include <utility/tagitem.h> #endif #ifndef UTILITY_HOOKS_H #include <utility/hooks.h> #endif #ifndef LIBRARIES_IFFPARSE_H #include <libraries/iffparse.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #ifndef MYDEBUG_H #include "iffp/debug.h" #endif #ifndef NO_PROTOS #include <clib/exec_protos.h> #include <clib/iffparse_protos.h> #endif #ifndef MAX #define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif #ifndef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #ifndef ABS #define ABS(x) ((x) < 0 ? -(x) : (x)) #endif #define CkErr(expression) {if (!error) error = (expression);} #define ChunkMoreBytes(cn) (cn->cn_Size - cn->cn_Scan) #define IS_ODD(a) (a & 1) #define IFF_OKAY 0L #define CLIENT_ERROR 1L #define NOFILE 5L #define message printf /* Generic Chunk ID's we may encounter */ #define ID_ANNO MAKE_ID('A','N','N','O') #define ID_AUTH MAKE_ID('A','U','T','H') #define ID_CHRS MAKE_ID('C','H','R','S') #define ID_Copyright MAKE_ID('(','c',')',' ') #define ID_CSET MAKE_ID('C','S','E','T') #define ID_FVER MAKE_ID('F','V','E','R') #define ID_NAME MAKE_ID('N','A','M','E') #define ID_TEXT MAKE_ID('T','E','X','T') #define ID_BODY MAKE_ID('B','O','D','Y') /* Used to keep track of allocated IFFHandle, and whether file is * clipboard or not, filename, copied chunks, etc. * This structure is included in the beginning of every * form-specific info structure used by the example modules. */ struct ParseInfo { /* general parse.c related */ struct IFFHandle *iff; /* to be alloc'd with AllocIFF */ UBYTE *filename; /* current filename of this ui */ LONG *propchks; /* properties to get */ LONG *collectchks; /* properties to collect */ LONG *stopchks; /* stop on these (like BODY) */ BOOL opened; /* this iff has been opened */ BOOL clipboard; /* file is clipboard */ BOOL hunt; /* we are parsing a complex file */ BOOL Reserved1; /* must be zero for now */ /* for copychunks.c - for read/modify/write programs * and programs that need to keep parsed chunk info * around after closing file. * Deallocated by freechunklist(); */ struct Chunk *copiedchunks; /* application may hang its own list of new chunks here * just to keep it with the frame. */ struct Chunk *newchunks; ULONG Reserved[8]; }; /* * Used by some modules to save or pass a singly linked list of chunks */ struct Chunk { struct Chunk *ch_Next; long ch_Type; long ch_ID; long ch_Size; void *ch_Data; }; #ifndef NO_PROTOS /* parse.c */ LONG openifile(struct ParseInfo *,UBYTE *,ULONG); void closeifile(struct ParseInfo *); LONG parseifile(struct ParseInfo *, LONG, LONG, LONG *, LONG *, LONG *); LONG getcontext(struct IFFHandle *); LONG nextcontext(struct IFFHandle *); LONG currentchunkis(struct IFFHandle *, LONG type, LONG id); LONG contextis(struct IFFHandle *, LONG type, LONG id); UBYTE *findpropdata(struct IFFHandle *iff, LONG type, LONG id); void initiffasstdio(struct IFFHandle *); UBYTE *IFFerr(LONG); LONG chkcnt(LONG *); long PutCk(struct IFFHandle *iff, long id, long size, void *data); /* copychunks.c */ struct Chunk *copychunks(struct IFFHandle *iff, LONG *propchks, LONG *collectchks, ULONG memtype); void freechunklist(struct Chunk *first); struct Chunk *findchunk(struct Chunk *first, long type, long id); long writechunklist(struct IFFHandle *iff, struct Chunk *first); #endif /* NO_PROTOS */ #endif /* IFFP_IFF_H */