home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / programming / utils / gadtoolsbox / nofraglib / oberon / nofrag.mod
Text File  |  1993-04-01  |  3KB  |  105 lines

  1. (* ------------------------------------------------------------------------
  2.   :Program.       NoFragLib
  3.   :Contents.      Interface to Jan van den Baard's Library
  4.   :Author.        Kai Bolay [kai]
  5.   :Address.       Snail-Mail:              E-Mail:
  6.   :Address.       Hoffmannstraße 168       UUCP: kai@amokle.stgt.sub.org
  7.   :Address.       D-7250 Leonberg 1        FIDO: 2:2407/106.3
  8.   :History.       v1.0 [kai] 15-Feb-91 (translated from C)
  9.   :History.       v1.0 [kai] 13-Feb-93 (recompiled + bug-fixes)
  10.   :Copyright.     FD
  11.   :Language.      Oberon
  12.   :Translator.    AMIGA OBERON v3.01d
  13. ------------------------------------------------------------------------ *)
  14.  
  15. MODULE NoFragLib;
  16.  
  17. IMPORT
  18.   Exec, Intuition, SYSTEM;
  19.  
  20. CONST
  21.   NoFragVersion* = 2;
  22.   NoFragRevision* = 2;
  23.   NoFragName* = "nofrag.library";
  24.  
  25. TYPE
  26.   NoFragBasePtr* = UNTRACED POINTER TO NoFragBase;
  27.   NoFragBase* = STRUCT (libNode: Exec.Library) END;
  28.  
  29. (*
  30.  * ALL structures following are PRIVATE! DO NOT USE THEM!
  31.  *)
  32.   MemoryBlockPtr* = UNTRACED POINTER TO MemoryBlock;
  33.  
  34.   MemoryBlock* = STRUCT
  35.     next*, previous*: MemoryBlockPtr;
  36.     requirements*: LONGSET;
  37.     bytesUsed*: LONGINT;
  38.   END;
  39.  
  40.   MemoryItemPtr* = UNTRACED POINTER TO MemoryItem;
  41.  
  42.   MemoryItem* = STRUCT
  43.     next*, previous*: MemoryItemPtr;
  44.     block*: MemoryBlockPtr;
  45.     size*: LONGINT;
  46.   END;
  47.  
  48.   BlockListPtr* = UNTRACED POINTER TO BlockList;
  49.  
  50.   BlockList = STRUCT
  51.     first*, end*, last*: MemoryBlockPtr;
  52.   END;
  53.  
  54.   ItemListPtr* = UNTRACED POINTER TO ItemList;
  55.  
  56.   ItemList* = STRUCT
  57.     first*, end*, last*: MemoryItemPtr;
  58.   END;
  59.  
  60. (*
  61.  * This structure may only be used to pass on to the library routines!
  62.  * It may ONLY be obtained by a call to "GetMemoryChain()"
  63.  *)
  64.  
  65.   MemoryChainPtr* = UNTRACED POINTER TO MemoryChain;
  66.  
  67.   MemoryChain* = STRUCT
  68.     block*: BlockList;
  69.     items*: ItemList;
  70.     blockSize*: LONGINT;
  71.   END;
  72.  
  73. CONST
  74.   MinAlloc* = SYSTEM.SIZE (MemoryItem);
  75.  
  76. VAR
  77.   base*: NoFragBasePtr;
  78.  
  79. PROCEDURE GetMemoryChain* {base, -30} (blocksize{0}: LONGINT): MemoryChainPtr;
  80. PROCEDURE AllocItem* {base, -36} (chain{8}: MemoryChainPtr; size{0}: LONGINT;
  81.                                   requirements{1}: LONGSET): Exec.ADDRESS;
  82. PROCEDURE FreeItem* {base, -42} (chain{8}: MemoryChainPtr;
  83.                                  memptr{9}: Exec.ADDRESS; size{0}: LONGINT);
  84. PROCEDURE FreeMemoryChain* {base, -48} (chain{8}: MemoryChainPtr;
  85.                                         all{0}: BOOLEAN);
  86. PROCEDURE AllocVecItem* {base, -54} (chain{8}: MemoryChainPtr; size{0}: LONGINT;
  87.                                      requirements{1}: LONGSET): Exec.ADDRESS;
  88. PROCEDURE FreeVecItem* {base, -60} (chain{8}: MemoryChainPtr;
  89.                                     memptr{9}: Exec.ADDRESS);
  90.  
  91. BEGIN
  92.  
  93.   base := Exec.OpenLibrary (NoFragName, NoFragVersion);
  94.   IF base = NIL THEN
  95.     IF Intuition.DisplayAlert (Intuition.recoveryAlert,
  96.          "\x00\x64\x14missing nofrag.library v2\o\o", 50) THEN END;
  97.     HALT (20)
  98.   END; (* IF *)
  99. CLOSE
  100.   IF base # NIL THEN
  101.     Exec.CloseLibrary (base);
  102.     base := NIL;
  103.   END; (* IF *)
  104. END NoFragLib.
  105.