Syntax20b.Scn.Fnt ParcElems Alloc Syntax24b.Scn.Fnt Syntax10.Scn.Fnt Syntax10b.Scn.Fnt FoldElems (* AMIGA *) MODULE AmigaIFFParse; (* Ralf Degner 25.07.1995 *) IMPORT SYSTEM, AmigaBase, AmigaExec, Amiga; CONST read*= {}; write*= {0}; rwBits*= read+write; fSeek*= {1}; rSeek*= {2}; parseScan*= 0; parseStep*= 1; parseRawStep*= 2; sizeUnknown*= -1; IFFHandlePtr*= POINTER TO IFFHandle; IFFHandle*= RECORD stream*: LONGINT; flgas*: SET; depth*: LONGINT; END; ContextNodePtr*= POINTER TO ContextNode; ContextNode*= RECORD(AmigaExec.MinNode) id*: LONGINT; type*: LONGINT; size*: LONGINT; scan*: LONGINT; END; StoredPropertyPtr*= POINTER TO StoredProperty; StoredProperty*= RECORD size*: LONGINT; data*: LONGINT; END; IOClipReqPtr*= POINTER TO IOClipReq; IOClipReq*= RECORD device*: AmigaExec.DevicePtr; unit*: LONGINT; command*: INTEGER; flags*: SHORTINT; error*: SHORTINT; actual*: LONGINT; length*: LONGINT; data*: LONGINT; offset*: LONGINT; clipID*: LONGINT; END; ClipboardHandlePtr*= POINTER TO ClipboardHandle; ClipboardHandle*= RECORD cbport*: AmigaExec.MsgPort; satisfyPort*: AmigaExec.MsgPort; END; CollectionItemPtr*= POINTER TO CollectionItem; CollectionItem*= RECORD next*: CollectionItemPtr; size*: LONGINT; data*: LONGINT; END; IFFLib: LONGINT; D: AmigaBase.Regs; PROCEDURE AllocIFF*(): IFFHandlePtr; BEGIN AmigaBase.LibCall(IFFLib, -30, D); RETURN SYSTEM.VAL(IFFHandlePtr, D.d[0]) END AllocIFF; PROCEDURE OpenIFF*(iff: IFFHandlePtr; modes: SET): LONGINT; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); D.d[0]:=SYSTEM.VAL(LONGINT, modes); AmigaBase.LibCall(IFFLib, -36, D); RETURN D.d[0] END OpenIFF; PROCEDURE ParseIFF*(iff: IFFHandlePtr; control: LONGINT): LONGINT; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); D.d[0]:=control; AmigaBase.LibCall(IFFLib, -42, D); RETURN D.d[0] END ParseIFF; PROCEDURE CloseIFF*(iff: IFFHandlePtr); BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); AmigaBase.LibCall(IFFLib, -48, D) END CloseIFF; PROCEDURE FreeIFF*(iff: IFFHandlePtr); BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); AmigaBase.LibCall(IFFLib, -54, D) END FreeIFF; PROCEDURE ReadChunkBytes*(iff: IFFHandlePtr; buf, num: LONGINT): LONGINT; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); D.a[1]:=buf; D.d[0]:=num; AmigaBase.LibCall(IFFLib, -60, D); RETURN D.d[0] END ReadChunkBytes; PROCEDURE WriteChunkBytes*(iff: IFFHandlePtr; buf, num: LONGINT): LONGINT; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); D.a[1]:=buf; D.d[0]:=num; AmigaBase.LibCall(IFFLib, -66, D); RETURN D.d[0] END WriteChunkBytes; PROCEDURE PushChunk*(iff: IFFHandlePtr; type, id, size: LONGINT): LONGINT; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); D.d[0]:=type; D.d[1]:=id; D.d[2]:=size; AmigaBase.LibCall(IFFLib, -84, D); RETURN D.d[0] END PushChunk; PROCEDURE PopChunk*(iff: IFFHandlePtr): LONGINT; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); AmigaBase.LibCall(IFFLib, -90, D); RETURN D.d[0] END PopChunk; PROCEDURE PropChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); D.d[0]:=type; D.d[1]:=id; AmigaBase.LibCall(IFFLib, -114, D); RETURN D.d[0] END PropChunk; PROCEDURE StopChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); D.d[0]:=type; D.d[1]:=id; AmigaBase.LibCall(IFFLib, -126, D); RETURN D.d[0] END StopChunk; PROCEDURE CollectionChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); D.d[0]:=type; D.d[1]:=id; AmigaBase.LibCall(IFFLib, -138, D); RETURN D.d[0] END CollectionChunk; PROCEDURE FindProp*(iff: IFFHandlePtr; type, id: LONGINT): StoredPropertyPtr; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); D.d[0]:=type; D.d[1]:=id; AmigaBase.LibCall(IFFLib, -156, D); RETURN SYSTEM.VAL(StoredPropertyPtr, D.d[0]); END FindProp; PROCEDURE FindCollection*(iff: IFFHandlePtr; type, id: LONGINT): CollectionItemPtr; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); D.d[0]:=type; D.d[1]:=id; AmigaBase.LibCall(IFFLib, -162, D); RETURN SYSTEM.VAL(CollectionItemPtr, D.d[0]); END FindCollection; PROCEDURE FindPropContext*(iff: IFFHandlePtr): ContextNodePtr; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); AmigaBase.LibCall(IFFLib, -168, D); RETURN SYSTEM.VAL(ContextNodePtr, D.d[0]); END FindPropContext; PROCEDURE CurrentChunk*(iff: IFFHandlePtr): ContextNodePtr; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); AmigaBase.LibCall(IFFLib, -174, D); RETURN SYSTEM.VAL(ContextNodePtr, D.d[0]); END CurrentChunk; PROCEDURE ParentChunk*(contextNode: ContextNodePtr): ContextNodePtr; BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, contextNode); AmigaBase.LibCall(IFFLib, -180, D); RETURN SYSTEM.VAL(ContextNodePtr, D.d[0]); END ParentChunk; PROCEDURE InitIFFasDOS*(iff: IFFHandlePtr); BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); AmigaBase.LibCall(IFFLib, -234, D); END InitIFFasDOS; PROCEDURE InitIFFasClip*(iff: IFFHandlePtr); BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, iff); AmigaBase.LibCall(IFFLib, -240, D); END InitIFFasClip; PROCEDURE OpenClipboard*(unit: LONGINT): ClipboardHandlePtr; BEGIN D.d[0]:=unit; AmigaBase.LibCall(IFFLib, -246, D); RETURN SYSTEM.VAL(ClipboardHandlePtr, D.d[0]); END OpenClipboard; PROCEDURE CloseClipboard*(clipHan: ClipboardHandlePtr); BEGIN D.a[0]:=SYSTEM.VAL(LONGINT, clipHan); AmigaBase.LibCall(IFFLib, -252, D); END CloseClipboard; PROCEDURE TermProc; BEGIN D.a[1]:=IFFLib; IF IFFLib#0 THEN AmigaBase.LibCall(AmigaBase.ExecBase(), -414, D) END END TermProc; BEGIN IFFLib:=AmigaExec.OpenLibrary("iffparse.library", 0); Amiga.TermProcedure(TermProc) END AmigaIFFParse.