home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 02 / praxis / storage.mod < prev    next >
Text File  |  1989-11-02  |  2KB  |  86 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     STORAGE.DEF                        *)
  3. (* Die folgenden Deklarationen werden im Definitionsmodul *)
  4. (* Storage eingefügt.                                     *)
  5. (*    (c) 1989 Cornelis van der Laan  &  TOOLBOX          *)
  6. (* ------------------------------------------------------ *)
  7. DEFINITION MODULE Storage;
  8.  
  9.                   (* .... *)
  10.  
  11.   PROCEDURE Mark;
  12.  
  13.   PROCEDURE Release;
  14.  
  15. END Storage.
  16. (* ------------------------------------------------------ *)
  17. (*                 Ende von STORAGE.DEF                   *)
  18.  
  19.  
  20. (* ------------------------------------------------------ *)
  21. (*                    STORAGE.MOD                         *)
  22. (* ------------------------------------------------------ *)
  23. IMPLEMENTATION MODULE Storage;
  24.  
  25.   (* ............. *)
  26.  
  27. FROM Lib IMPORT
  28.           FatalError;
  29.  
  30. TYPE
  31.   TMarkList = POINTER TO TMark;
  32.   TMark     = RECORD
  33.                 Heap : HeapRecPtr;
  34.                 Big  : CARDINAL;
  35.                 Next : TMarkList;
  36.               END;
  37. VAR
  38.   MarkList   : TMarkList;
  39.  
  40.   PROCEDURE Mark;
  41.   TYPE
  42.     DummTyp = RECORD
  43.                 CASE : BOOLEAN OF
  44.                 | TRUE  : Adr      : ADDRESS;
  45.                 | FALSE : Off, Seg : CARDINAL;
  46.                 END;
  47.               END;
  48.   VAR
  49.     P     : TMarkList;
  50.     Len   : CARDINAL;
  51.     Dummy : DummTyp;
  52.   BEGIN
  53.     NEW(P);
  54.     Len := HeapAvail(MainHeap);
  55.     HeapAllocate (MainHeap, Dummy.Adr, Len);
  56.     P^.Heap := MakeHeap (Dummy.Seg, Len);
  57.     P^.Big  := Len;
  58.     P^.Next := MarkList;
  59.     MarkList := P;
  60.     MainHeap := P^.Heap;
  61.   END Mark;
  62.  
  63.   PROCEDURE Release;
  64.   VAR
  65.     P : TMarkList;
  66.   BEGIN
  67.     P := MarkList;
  68.     IF MarkList^.Next = NIL THEN
  69.           FatalError ('Invalid Release')
  70.     ELSE MarkList := MarkList^.Next
  71.     END;
  72.     MainHeap := MarkList^.Heap;
  73.     HeapDeallocate (MainHeap, P^.Heap, P^.Big);
  74.     DISPOSE (P);
  75.   END Release;
  76.  
  77. BEGIN
  78.   HeapInit;             (* ALT *)
  79.   NEW (MarkList);       (* Initialisierung der Heap-Liste *)
  80.   WITH MarkList^ DO
  81.      Heap := MainHeap;   Next := NIL;
  82.   END;
  83. END Storage.
  84. (* ------------------------------------------------------ *)
  85. (*                  Ende von STORAGE.MOD                  *)
  86.