home *** CD-ROM | disk | FTP | other *** search
- unit IFFParse;
-
- INTERFACE
- uses Exec, Clipboard, Utility;
-
-
- type
- pLocalContextItem = ^tLocalContextItem;
- tLocalContextItem = record
- lci_Node: tMinNode;
- lci_ID: long;
- lci_Type: long;
- lci_Ident: long;
- end;
-
- pContextNode = ^tContextNode;
- tContextNode = record
- cn_Node: tMinNode;
- cn_ID: longint;
- cn_Type: longint;
- cn_Size: longint;
- cn_Scan: longint;
- end;
-
- pCollectionItem = ^tCollectionItem;
- tCollectionItem = record
- ci_Next: pCollectionItem;
- ci_Size: longint;
- ci_Data: pbyte;
- end;
-
- pStoredProperty = ^tStoredProperty;
- tStoredProperty = record
- sp_Size: longint;
- sp_Data: pbyte;
- end;
-
- pClipboardHandle = ^tClipboardHandle;
- tClipboardHandle = record
- cbh_Req: tIOClipReq;
- cbh_CBport: tMsgPort;
- cbh_SatisfyPort: tMsgPort;
- end;
-
- pIFFHandle = ^tIFFHandle;
- tIFFHandle = record
- iff_Stream: long;
- iff_Flags: long;
- iff_Depth: longint;
- end;
-
- pIFFStreamCmd = ^tIFFStreamCmd;
- tIFFStreamCmd = record
- sc_Command: longint;
- sc_Buf: pointer;
- sc_NBytes: longint;
- end;
-
-
-
- var
- IFFParseBase: pLibrary;
-
-
- const
- IFFSCC_READ = 2;
- IFFCMD_WRITE = 3;
- IFFCMD_SEEK = 4;
- IFFSCC_WRITE = 3;
- IFFERR_NOMEM = $FFFFFFFC;
- IFFCMD_PURGELCI = 7;
- IFFCMD_ENTRY = 5;
- IFFSCC_SEEK = 4;
- IFFERR_READ = $FFFFFFFB;
- IFFERR_SYNTAX = $FFFFFFF7;
- IFFCMD_INIT = 0;
- IFFLCI_ENTRYHANDLER = $656E6864;
- IFFPARSE_RAWSTEP = 2;
- IFFSCC_INIT = 0;
- IFFCMD_EXIT = 6;
- IFFERR_WRITE = $FFFFFFFA;
- IFFERR_SEEK = $FFFFFFF9;
- IFFCMD_CLEANUP = 1;
- IFFLCI_EXITHANDLER = $65786864;
- IFFERR_MANGLED = $FFFFFFF8;
- IFFSCC_CLEANUP = 1;
- IFFLCI_PROP = $70726F70;
- IFFF_FSEEK = 2;
- ID_FORM = $464F524D;
- IFFF_RWBITS = 1;
- ID_NULL = $20202020;
- ID_LIST = $4C495354;
- ID_CAT = $43415420;
- IFFF_RSEEK = 4;
- IFFERR_EOC = $FFFFFFFE;
- ID_PROP = $50524F50;
- IFFERR_EOF = $FFFFFFFF;
- IFFSLI_PROP = 3;
- IFFF_READ = 0;
- IFFSLI_ROOT = 1;
- IFFLCI_COLLECTION = $636F6C6C;
- IFFF_WRITE = 1;
- IFFERR_NOSCOPE = $FFFFFFFD;
- IFFPARSE_SCAN = 0;
- IFFSIZE_UNKNOWN = $FFFFFFFF;
- IFF_RETURN2CLIENT = $FFFFFFF4;
- IFFSLI_TOP = 2;
- IFFF_RESERVED = $FFFF0000;
- IFFERR_NOTIFF = $FFFFFFF6;
- IFFERR_NOHOOK = $FFFFFFF5;
- IFFPARSE_STEP = 1;
- IFFCMD_READ = 2;
-
-
- function AllocIFF: pIFFHandle;
- function OpenIFF
- (iff: pIFFHandle;
- rwMode: longint): longint;
-
- function ParseIFF
- (iff: pIFFHandle;
- control: longint): longint;
-
- procedure CloseIFF (iff: pIFFHandle);
- procedure FreeIFF (iff: pIFFHandle);
- function ReadChunkBytes
- (iff: pIFFHandle;
- buf: pointer;
- size: longint): longint;
-
- function WriteChunkBytes
- (iff: pIFFHandle;
- buf: pointer;
- size: longint): longint;
-
- function ReadChunkRecords
- (iff: pIFFHandle;
- buf: pointer;
- bytesPerRecord: longint;
- nRecords: longint): longint;
-
- function WriteChunkRecords
- (iff: pIFFHandle;
- buf: pointer;
- bytesPerRecord: longint;
- nRecords: longint): longint;
-
- function PushChunk
- (iff: pIFFHandle;
- type_: longint;
- id: longint;
- size: longint): longint;
-
- function PopChunk (iff: pIFFHandle): longint;
- function EntryHandler
- (iff: pIFFHandle;
- type_: longint;
- id: longint;
- position: longint;
- handler: pHook;
- object: pointer): longint;
-
- function ExitHandler
- (iff: pIFFHandle;
- type_: longint;
- id: longint;
- position: longint;
- handler: pHook;
- object: pointer): longint;
-
- function PropChunk
- (iff: pIFFHandle;
- type_: longint;
- id: longint): longint;
-
- function PropChunks
- (iff: pIFFHandle;
- propArray: plongint;
- nProps: longint): longint;
-
- function StopChunk
- (iff: pIFFHandle;
- type_: longint;
- id: longint): longint;
-
- function StopChunks
- (iff: pIFFHandle;
- propArray: plongint;
- nProps: longint): longint;
-
- function CollectionChunk
- (iff: pIFFHandle;
- type_: longint;
- id: longint): longint;
-
- function CollectionChunks
- (iff: pIFFHandle;
- propArray: plongint;
- nProps: longint): longint;
-
- function StopOnExit
- (iff: pIFFHandle;
- type_: longint;
- id: longint): longint;
-
- function FindProp
- (iff: pIFFHandle;
- type_: longint;
- id: longint): pStoredProperty;
-
- function FindCollection
- (iff: pIFFHandle;
- type_: longint;
- id: longint): pCollectionItem;
-
- function FindPropContext (iff: pIFFHandle): pContextNode;
- function CurrentChunk (iff: pIFFHandle): pContextNode;
- function ParentChunk (contextNode: pContextNode): pContextNode;
- function AllocLocalItem
- (type_: longint;
- id: longint;
- ident: longint;
- dataSize: longint): pLocalContextItem;
-
- function LocalItemData (localItem: pLocalContextItem): pointer;
- procedure SetLocalItemPurge
- (localItem: pLocalContextItem;
- purgeHook: pHook);
-
- procedure FreeLocalItem (localItem: pLocalContextItem);
- function FindLocalItem
- (iff: pIFFHandle;
- type_: longint;
- id: longint;
- ident: longint): pLocalContextItem;
-
- function StoreLocalItem
- (iff: pIFFHandle;
- localItem: pLocalContextItem;
- position: longint): longint;
-
- procedure StoreItemInContext
- (iff: pIFFHandle;
- localItem: pLocalContextItem;
- contextNode: pContextNode);
-
- procedure InitIFF
- (iff: pIFFHandle;
- flags: longint;
- streamHook: pHook);
-
- procedure InitIFFasDOS (iff: pIFFHandle);
- procedure InitIFFasClip (iff: pIFFHandle);
- function OpenClipboard (unitNum: longint): pClipboardHandle;
- procedure CloseClipboard (clipboard: pClipboardHandle);
- function GoodID (id: longint): longint;
- function GoodType (type_: longint): longint;
- function IDtoStr
- (id: longint;
- buf: STRPTR): STRPTR;
-
-
-
- IMPLEMENTATION
- function AllocIFF; xassembler;
- asm
- move.l a6,-(sp)
- move.l IFFParseBase,a6
- jsr -$1E(a6)
- move.l d0,8(sp)
- move.l (sp)+,a6
- end;
-
- function OpenIFF; xassembler;
- asm
- move.l a6,-(sp)
- movem.l 8(sp),d0/a0
- move.l IFFParseBase,a6
- jsr -$24(a6)
- move.l d0,$10(sp)
- move.l (sp)+,a6
- end;
-
- function ParseIFF; xassembler;
- asm
- move.l a6,-(sp)
- movem.l 8(sp),d0/a0
- move.l IFFParseBase,a6
- jsr -$2A(a6)
- move.l d0,$10(sp)
- move.l (sp)+,a6
- end;
-
- procedure CloseIFF; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$30(a6)
- move.l (sp)+,a6
- end;
-
- procedure FreeIFF; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$36(a6)
- move.l (sp)+,a6
- end;
-
- function ReadChunkBytes; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d0
- move.l (a6)+,a1
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$3C(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function WriteChunkBytes; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d0
- move.l (a6)+,a1
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$42(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function ReadChunkRecords; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a1
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$48(a6)
- move.l d0,$18(sp)
- move.l (sp)+,a6
- end;
-
- function WriteChunkRecords; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a1
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$4E(a6)
- move.l d0,$18(sp)
- move.l (sp)+,a6
- end;
-
- function PushChunk; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d2
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$54(a6)
- move.l d0,$18(sp)
- move.l (sp)+,a6
- end;
-
- function PopChunk; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$5A(a6)
- move.l d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- function EntryHandler; xassembler;
- asm
- movem.l a2/a6,-(sp)
- lea $C(sp),a6
- move.l (a6)+,a2
- move.l (a6)+,a1
- move.l (a6)+,d2
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$66(a6)
- move.l d0,$24(sp)
- movem.l (sp)+,a2/a6
- end;
-
- function ExitHandler; xassembler;
- asm
- movem.l a2/a6,-(sp)
- lea $C(sp),a6
- move.l (a6)+,a2
- move.l (a6)+,a1
- move.l (a6)+,d2
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$6C(a6)
- move.l d0,$24(sp)
- movem.l (sp)+,a2/a6
- end;
-
- function PropChunk; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$72(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function PropChunks; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d0
- move.l (a6)+,a1
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$78(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function StopChunk; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$7E(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function StopChunks; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d0
- move.l (a6)+,a1
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$84(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function CollectionChunk; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$8A(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function CollectionChunks; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d0
- move.l (a6)+,a1
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$90(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function StopOnExit; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$96(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function FindProp; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$9C(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function FindCollection; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$A2(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- function FindPropContext; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$A8(a6)
- move.l d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- function CurrentChunk; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$AE(a6)
- move.l d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- function ParentChunk; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$B4(a6)
- move.l d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- function AllocLocalItem; xassembler;
- asm
- movem.l d3/a6,-(sp)
- lea $C(sp),a6
- move.l (a6)+,d3
- move.l (a6)+,d2
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l IFFParseBase,a6
- jsr -$BA(a6)
- move.l d0,$1C(sp)
- movem.l (sp)+,d3/a6
- end;
-
- function LocalItemData; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$C0(a6)
- move.l d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- procedure SetLocalItemPurge; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,a1
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$C6(a6)
- move.l (sp)+,a6
- end;
-
- procedure FreeLocalItem; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$CC(a6)
- move.l (sp)+,a6
- end;
-
- function FindLocalItem; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d2
- move.l (a6)+,d1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$D2(a6)
- move.l d0,$18(sp)
- move.l (sp)+,a6
- end;
-
- function StoreLocalItem; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,d0
- move.l (a6)+,a1
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$D8(a6)
- move.l d0,$14(sp)
- move.l (sp)+,a6
- end;
-
- procedure StoreItemInContext; xassembler;
- asm
- movem.l a2/a6,-(sp)
- lea $C(sp),a6
- move.l (a6)+,a2
- move.l (a6)+,a1
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$DE(a6)
- movem.l (sp)+,a2/a6
- end;
-
- procedure InitIFF; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,a1
- move.l (a6)+,d0
- move.l (a6)+,a0
- move.l IFFParseBase,a6
- jsr -$E4(a6)
- move.l (sp)+,a6
- end;
-
- procedure InitIFFasDOS; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$EA(a6)
- move.l (sp)+,a6
- end;
-
- procedure InitIFFasClip; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$F0(a6)
- move.l (sp)+,a6
- end;
-
- function OpenClipboard; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),d0
- move.l IFFParseBase,a6
- jsr -$F6(a6)
- move.l d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- procedure CloseClipboard; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a0
- move.l IFFParseBase,a6
- jsr -$FC(a6)
- move.l (sp)+,a6
- end;
-
- function GoodID; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),d0
- move.l IFFParseBase,a6
- jsr -$102(a6)
- move.l d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- function GoodType; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),d0
- move.l IFFParseBase,a6
- jsr -$108(a6)
- move.l d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- function IDtoStr; xassembler;
- asm
- move.l a6,-(sp)
- lea 8(sp),a6
- move.l (a6)+,a0
- move.l (a6)+,d0
- move.l IFFParseBase,a6
- jsr -$10E(a6)
- move.l d0,$10(sp)
- move.l (sp)+,a6
- end;
-
- end.
-