home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
02
/
praxis
/
storage.mod
< prev
next >
Wrap
Text File
|
1989-11-02
|
2KB
|
86 lines
(* ------------------------------------------------------ *)
(* STORAGE.DEF *)
(* Die folgenden Deklarationen werden im Definitionsmodul *)
(* Storage eingefügt. *)
(* (c) 1989 Cornelis van der Laan & TOOLBOX *)
(* ------------------------------------------------------ *)
DEFINITION MODULE Storage;
(* .... *)
PROCEDURE Mark;
PROCEDURE Release;
END Storage.
(* ------------------------------------------------------ *)
(* Ende von STORAGE.DEF *)
(* ------------------------------------------------------ *)
(* STORAGE.MOD *)
(* ------------------------------------------------------ *)
IMPLEMENTATION MODULE Storage;
(* ............. *)
FROM Lib IMPORT
FatalError;
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 : TMarkList;
Len : CARDINAL;
Dummy : DummTyp;
BEGIN
NEW(P);
Len := HeapAvail(MainHeap);
HeapAllocate (MainHeap, Dummy.Adr, Len);
P^.Heap := MakeHeap (Dummy.Seg, Len);
P^.Big := Len;
P^.Next := MarkList;
MarkList := P;
MainHeap := P^.Heap;
END Mark;
PROCEDURE Release;
VAR
P : TMarkList;
BEGIN
P := MarkList;
IF MarkList^.Next = NIL THEN
FatalError ('Invalid Release')
ELSE MarkList := MarkList^.Next
END;
MainHeap := MarkList^.Heap;
HeapDeallocate (MainHeap, P^.Heap, P^.Big);
DISPOSE (P);
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 *)