M3DL.MOD 757 B

12345678910111213141516171819202122232425262728293031
  1. IMPLEMENTATION MODULE M3DL; (*NW 2.1.84 / 27.5.85*)
  2. FROM Heap IMPORT Allocate;
  3. FROM Terminal IMPORT WriteString;
  4. FROM SYSTEM IMPORT ADDRESS;
  5. CONST StackSize = 10000;
  6. VAR current, last: ADDRESS;
  7. PROCEDURE Size(): CARDINAL;
  8. CODE 247B; 4; 24B; 0; 271B (*H-L*)
  9. END Size;
  10. PROCEDURE ALLOCATE(VAR a: ADDRESS; n: CARDINAL);
  11. BEGIN
  12. IF (last <= 177777B - n) & (last + n < current) THEN
  13. current := current - n; a := current
  14. ELSE WriteString(" not enough heap space"); HALT
  15. END
  16. END ALLOCATE;
  17. PROCEDURE Available(): CARDINAL;
  18. BEGIN RETURN current - last
  19. END Available;
  20. PROCEDURE ResetHeap(a: ADDRESS);
  21. BEGIN current := a
  22. END ResetHeap;
  23. BEGIN Allocate(current, 4); Allocate(last, Size() - StackSize)
  24. END M3DL.