home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 12 / tricks / storage.mod < prev    next >
Encoding:
Modula Implementation  |  1989-09-06  |  1.6 KB  |  67 lines

  1. (* ------------------------------------------------------ *)
  2. (*                    STORAGE.MOD                         *)
  3. (* ------------------------------------------------------ *)
  4. IMPLEMENTATION MODULE Storage;
  5.  
  6.   (* ............. *)
  7.  
  8. TYPE
  9.   TMarkList = POINTER TO TMark;
  10.   TMark     = RECORD
  11.                 Heap : HeapRecPtr;
  12.                 Big  : CARDINAL;
  13.                 Next : TMarkList;
  14.               END;
  15. VAR
  16.   MarkList   : TMarkList;
  17.  
  18.   PROCEDURE Mark;
  19.   TYPE
  20.     DummTyp = RECORD
  21.                 CASE : BOOLEAN OF
  22.                 | TRUE  : Adr      : ADDRESS;
  23.                 | FALSE : Off, Seg : CARDINAL;
  24.                 END;
  25.               END;
  26.   VAR
  27.     P, Q  : TMarkList;
  28.     Len   : CARDINAL;
  29.     Dummy : DummTyp;
  30.   BEGIN
  31.     P := MarkList;
  32.     WHILE P^.Next <> NIL DO
  33.       P := P^.Next
  34.     END;
  35.     NEW (Q);
  36.     Len := HeapAvail (MainHeap);
  37.     HeapAllocate (MainHeap, Dummy.Adr, Len);
  38.     Q^.Heap := MakeHeap (Dummy.Seg, Len);
  39.     Q^.Big  := Len;
  40.     Q^.Next := NIL;
  41.     P^.Next := Q;
  42.     MainHeap := Q^.Heap;
  43.   END Mark;
  44.  
  45.   PROCEDURE Release;
  46.   VAR
  47.     P, Q : TMarkList;
  48.   BEGIN
  49.     P := MarkList;
  50.     WHILE P^.Next <> NIL DO
  51.       Q := P;  P := P^.Next
  52.     END;
  53.     MainHeap := Q^.Heap;
  54.     HeapDeallocate (MainHeap, P^.Heap, P^.Big);
  55.     DISPOSE (P);
  56.     Q^.Next := NIL;
  57.   END Release;
  58.  
  59. BEGIN
  60.   HEAPINIT;             (* ALT *)
  61.   NEW (MarkList);       (* Initialisierung der Heap-Liste *)
  62.   WITH MarkList^ DO
  63.      Heap := MainHeap;   Next := NIL;
  64.   END;
  65. END Storage.
  66. (* ------------------------------------------------------ *)
  67. (*                  Ende von STORAGE.MOD                  *)