home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1989-09-06 | 1.6 KB | 67 lines |
- (* ------------------------------------------------------ *)
- (* STORAGE.MOD *)
- (* ------------------------------------------------------ *)
- IMPLEMENTATION MODULE Storage;
-
- (* ............. *)
-
- TYPE
- TMarkList = POINTER TO TMark;
- TMark = RECORD
- Heap : HeapRecPtr;
- Big : CARDINAL;
- Next : TMarkList;
- END;
- VAR
- MarkList : TMarkList;
-
- PROCEDURE Mark;
- TYPE
- DummTyp = RECORD
- CASE : BOOLEAN OF
- | TRUE : Adr : ADDRESS;
- | FALSE : Off, Seg : CARDINAL;
- END;
- END;
- VAR
- P, Q : TMarkList;
- Len : CARDINAL;
- Dummy : DummTyp;
- BEGIN
- P := MarkList;
- WHILE P^.Next <> NIL DO
- P := P^.Next
- END;
- NEW (Q);
- Len := HeapAvail (MainHeap);
- HeapAllocate (MainHeap, Dummy.Adr, Len);
- Q^.Heap := MakeHeap (Dummy.Seg, Len);
- Q^.Big := Len;
- Q^.Next := NIL;
- P^.Next := Q;
- MainHeap := Q^.Heap;
- END Mark;
-
- PROCEDURE Release;
- VAR
- P, Q : TMarkList;
- BEGIN
- P := MarkList;
- WHILE P^.Next <> NIL DO
- Q := P; P := P^.Next
- END;
- MainHeap := Q^.Heap;
- HeapDeallocate (MainHeap, P^.Heap, P^.Big);
- DISPOSE (P);
- Q^.Next := NIL;
- END Release;
-
- BEGIN
- HEAPINIT; (* ALT *)
- NEW (MarkList); (* Initialisierung der Heap-Liste *)
- WITH MarkList^ DO
- Heap := MainHeap; Next := NIL;
- END;
- END Storage.
- (* ------------------------------------------------------ *)
- (* Ende von STORAGE.MOD *)