| 12345678910111213141516171819202122232425262728293031 |
- IMPLEMENTATION MODULE M3DL; (*NW 2.1.84 / 27.5.85*)
- FROM Heap IMPORT Allocate;
- FROM Terminal IMPORT WriteString;
- FROM SYSTEM IMPORT ADDRESS;
- CONST StackSize = 10000;
- VAR current, last: ADDRESS;
- PROCEDURE Size(): CARDINAL;
- CODE 247B; 4; 24B; 0; 271B (*H-L*)
- END Size;
- PROCEDURE ALLOCATE(VAR a: ADDRESS; n: CARDINAL);
- BEGIN
- IF (last <= 177777B - n) & (last + n < current) THEN
- current := current - n; a := current
- ELSE WriteString(" not enough heap space"); HALT
- END
- END ALLOCATE;
- PROCEDURE Available(): CARDINAL;
- BEGIN RETURN current - last
- END Available;
- PROCEDURE ResetHeap(a: ADDRESS);
- BEGIN current := a
- END ResetHeap;
- BEGIN Allocate(current, 4); Allocate(last, Size() - StackSize)
- END M3DL.
|