home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / oberon / system / amigaiffparse.mod (.txt) < prev    next >
Oberon Text  |  1977-12-31  |  8KB  |  201 lines

  1. Syntax20b.Scn.Fnt
  2. ParcElems
  3. Alloc
  4. Syntax24b.Scn.Fnt
  5. Syntax10.Scn.Fnt
  6. Syntax10b.Scn.Fnt
  7. FoldElems
  8. (* AMIGA *)
  9. MODULE AmigaIFFParse; (* Ralf Degner 25.07.1995 *)
  10. IMPORT
  11.     SYSTEM, AmigaBase, AmigaExec, Amiga;
  12. CONST
  13.     read*= {}; write*= {0}; rwBits*= read+write; fSeek*= {1}; rSeek*= {2};
  14.     parseScan*= 0; parseStep*= 1; parseRawStep*= 2;
  15.     sizeUnknown*= -1;
  16.     IFFHandlePtr*= POINTER TO IFFHandle;
  17.     IFFHandle*= RECORD
  18.         stream*: LONGINT;
  19.         flgas*: SET;
  20.         depth*: LONGINT;
  21.     END;
  22.     ContextNodePtr*= POINTER TO ContextNode;
  23.     ContextNode*= RECORD(AmigaExec.MinNode)
  24.         id*: LONGINT;
  25.         type*: LONGINT;
  26.         size*: LONGINT;
  27.         scan*: LONGINT;
  28.     END;
  29.     StoredPropertyPtr*= POINTER TO StoredProperty;
  30.     StoredProperty*= RECORD
  31.         size*: LONGINT;
  32.         data*: LONGINT;
  33.     END;
  34.     IOClipReqPtr*= POINTER TO IOClipReq;
  35.     IOClipReq*= RECORD
  36.         device*: AmigaExec.DevicePtr;
  37.         unit*: LONGINT;
  38.         command*: INTEGER;
  39.         flags*: SHORTINT;
  40.         error*: SHORTINT;
  41.         actual*: LONGINT;
  42.         length*: LONGINT;
  43.         data*: LONGINT;
  44.         offset*: LONGINT;
  45.         clipID*: LONGINT;
  46.     END;
  47.     ClipboardHandlePtr*= POINTER TO ClipboardHandle;
  48.     ClipboardHandle*= RECORD
  49.         cbport*: AmigaExec.MsgPort;
  50.         satisfyPort*: AmigaExec.MsgPort;
  51.     END;
  52.     CollectionItemPtr*= POINTER TO CollectionItem;
  53.     CollectionItem*= RECORD
  54.         next*: CollectionItemPtr;
  55.         size*: LONGINT;
  56.         data*: LONGINT;
  57.     END;
  58.     IFFLib: LONGINT;
  59.     D: AmigaBase.Regs;
  60. PROCEDURE AllocIFF*(): IFFHandlePtr;
  61. BEGIN
  62.     AmigaBase.LibCall(IFFLib, -30, D);
  63.     RETURN SYSTEM.VAL(IFFHandlePtr, D.d[0])
  64. END AllocIFF;
  65. PROCEDURE OpenIFF*(iff: IFFHandlePtr; modes: SET): LONGINT;
  66. BEGIN
  67.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  68.     D.d[0]:=SYSTEM.VAL(LONGINT, modes);
  69.     AmigaBase.LibCall(IFFLib, -36, D);
  70.     RETURN D.d[0]
  71. END OpenIFF;
  72. PROCEDURE ParseIFF*(iff: IFFHandlePtr; control: LONGINT): LONGINT;
  73. BEGIN
  74.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  75.     D.d[0]:=control;
  76.     AmigaBase.LibCall(IFFLib, -42, D);
  77.     RETURN D.d[0]
  78. END ParseIFF;
  79. PROCEDURE CloseIFF*(iff: IFFHandlePtr);
  80. BEGIN
  81.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  82.     AmigaBase.LibCall(IFFLib, -48, D)
  83. END CloseIFF;
  84. PROCEDURE FreeIFF*(iff: IFFHandlePtr);
  85. BEGIN
  86.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  87.     AmigaBase.LibCall(IFFLib, -54, D)
  88. END FreeIFF;
  89. PROCEDURE ReadChunkBytes*(iff: IFFHandlePtr; buf, num: LONGINT): LONGINT;
  90. BEGIN
  91.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  92.     D.a[1]:=buf;
  93.     D.d[0]:=num;
  94.     AmigaBase.LibCall(IFFLib, -60, D);
  95.     RETURN D.d[0]
  96. END ReadChunkBytes;
  97. PROCEDURE WriteChunkBytes*(iff: IFFHandlePtr; buf, num: LONGINT): LONGINT;
  98. BEGIN
  99.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  100.     D.a[1]:=buf;
  101.     D.d[0]:=num;
  102.     AmigaBase.LibCall(IFFLib, -66, D);
  103.     RETURN D.d[0]
  104. END WriteChunkBytes;
  105. PROCEDURE PushChunk*(iff: IFFHandlePtr; type, id, size: LONGINT): LONGINT;
  106. BEGIN
  107.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  108.     D.d[0]:=type; D.d[1]:=id; D.d[2]:=size;
  109.     AmigaBase.LibCall(IFFLib, -84, D);
  110.     RETURN D.d[0]
  111. END PushChunk;
  112. PROCEDURE PopChunk*(iff: IFFHandlePtr): LONGINT;
  113. BEGIN
  114.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  115.     AmigaBase.LibCall(IFFLib, -90, D);
  116.     RETURN D.d[0]
  117. END PopChunk;
  118. PROCEDURE PropChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT;
  119. BEGIN
  120.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  121.     D.d[0]:=type; D.d[1]:=id;
  122.     AmigaBase.LibCall(IFFLib, -114, D);
  123.     RETURN D.d[0]
  124. END PropChunk;
  125. PROCEDURE StopChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT;
  126. BEGIN
  127.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  128.     D.d[0]:=type; D.d[1]:=id;
  129.     AmigaBase.LibCall(IFFLib, -126, D);
  130.     RETURN D.d[0]
  131. END StopChunk;
  132. PROCEDURE CollectionChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT;
  133. BEGIN
  134.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  135.     D.d[0]:=type; D.d[1]:=id;
  136.     AmigaBase.LibCall(IFFLib, -138, D);
  137.     RETURN D.d[0]
  138. END CollectionChunk;
  139. PROCEDURE FindProp*(iff: IFFHandlePtr; type, id: LONGINT): StoredPropertyPtr;
  140. BEGIN
  141.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  142.     D.d[0]:=type; D.d[1]:=id;
  143.     AmigaBase.LibCall(IFFLib, -156, D);
  144.     RETURN SYSTEM.VAL(StoredPropertyPtr, D.d[0]);
  145. END FindProp;
  146. PROCEDURE FindCollection*(iff: IFFHandlePtr; type, id: LONGINT): CollectionItemPtr;
  147. BEGIN
  148.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  149.     D.d[0]:=type; D.d[1]:=id;
  150.     AmigaBase.LibCall(IFFLib, -162, D);
  151.     RETURN SYSTEM.VAL(CollectionItemPtr, D.d[0]);
  152. END FindCollection;
  153. PROCEDURE FindPropContext*(iff: IFFHandlePtr): ContextNodePtr;
  154. BEGIN
  155.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  156.     AmigaBase.LibCall(IFFLib, -168, D);
  157.     RETURN SYSTEM.VAL(ContextNodePtr, D.d[0]);
  158. END FindPropContext;
  159. PROCEDURE CurrentChunk*(iff: IFFHandlePtr): ContextNodePtr;
  160. BEGIN
  161.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  162.     AmigaBase.LibCall(IFFLib, -174, D);
  163.     RETURN SYSTEM.VAL(ContextNodePtr, D.d[0]);
  164. END CurrentChunk;
  165. PROCEDURE ParentChunk*(contextNode: ContextNodePtr): ContextNodePtr;
  166. BEGIN
  167.     D.a[0]:=SYSTEM.VAL(LONGINT, contextNode);
  168.     AmigaBase.LibCall(IFFLib, -180, D);
  169.     RETURN SYSTEM.VAL(ContextNodePtr, D.d[0]);
  170. END ParentChunk;
  171. PROCEDURE InitIFFasDOS*(iff: IFFHandlePtr);
  172. BEGIN
  173.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  174.     AmigaBase.LibCall(IFFLib, -234, D);
  175. END InitIFFasDOS;
  176. PROCEDURE InitIFFasClip*(iff: IFFHandlePtr);
  177. BEGIN
  178.     D.a[0]:=SYSTEM.VAL(LONGINT, iff);
  179.     AmigaBase.LibCall(IFFLib, -240, D);
  180. END InitIFFasClip;
  181. PROCEDURE OpenClipboard*(unit: LONGINT): ClipboardHandlePtr;
  182. BEGIN
  183.     D.d[0]:=unit;
  184.     AmigaBase.LibCall(IFFLib, -246, D);
  185.     RETURN SYSTEM.VAL(ClipboardHandlePtr, D.d[0]);
  186. END OpenClipboard;
  187. PROCEDURE CloseClipboard*(clipHan: ClipboardHandlePtr);
  188. BEGIN
  189.     D.a[0]:=SYSTEM.VAL(LONGINT, clipHan);
  190.     AmigaBase.LibCall(IFFLib, -252, D);
  191. END CloseClipboard;
  192. PROCEDURE TermProc;
  193. BEGIN
  194.     D.a[1]:=IFFLib;
  195.     IF IFFLib#0 THEN AmigaBase.LibCall(AmigaBase.ExecBase(), -414, D) END
  196. END TermProc;
  197. BEGIN
  198.     IFFLib:=AmigaExec.OpenLibrary("iffparse.library", 0);
  199.     Amiga.TermProcedure(TermProc)
  200. END AmigaIFFParse.
  201.