storage.def 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. (* Copyright (C) 1987 Jensen & Partners International *)
  2. DEFINITION MODULE Storage;
  3. TYPE
  4. HeapRecPtr = POINTER TO HeapRec;
  5. HeapRec = RECORD
  6. size : CARDINAL;
  7. next : HeapRecPtr;
  8. END;
  9. VAR
  10. MainHeap : HeapRecPtr;
  11. ClearOnAllocate : BOOLEAN;
  12. (* Main heap procedures *)
  13. PROCEDURE ALLOCATE (VAR a: ADDRESS; size: CARDINAL);
  14. PROCEDURE DEALLOCATE(VAR a: ADDRESS; size: CARDINAL);
  15. PROCEDURE Available (size : CARDINAL) : BOOLEAN;
  16. (* Other heap procedures *)
  17. PROCEDURE MakeHeap( Source : CARDINAL; (* base segment of heap *)
  18. Size : CARDINAL (* size in paragraphs *)
  19. ) : HeapRecPtr;
  20. PROCEDURE HeapAllocate ( Source : HeapRecPtr; (* source heap *)
  21. VAR A : ADDRESS; (* result *)
  22. Size : CARDINAL); (* size in paragraphs *)
  23. PROCEDURE HeapDeallocate( Source : HeapRecPtr; (* source heap *)
  24. VAR A : ADDRESS; (* block to deallocate *)
  25. Size : CARDINAL); (* size in paragraphs *)
  26. PROCEDURE HeapAvail(Source: HeapRecPtr) : CARDINAL;
  27. (* returns the largest block size available for allocation in paragraphs *)
  28. PROCEDURE HeapTotalAvail(Source: HeapRecPtr) : CARDINAL;
  29. (* returns the total size available for allocation in paragraphs *)
  30. PROCEDURE HeapChangeSize( Source : HeapRecPtr; (* source heap *)
  31. VAR A : ADDRESS; (* block to change *)
  32. OldSize, (* old size of block *)
  33. NewSize: CARDINAL); (* new size of block *)
  34. (* in paragraphs *)
  35. (*
  36. This procedure will change the size of an allocated block
  37. avoiding any copy of data if possible. Calls HeapChangeAlloc
  38. *)
  39. PROCEDURE HeapChangeAlloc(Source : HeapRecPtr; (* source heap *)
  40. A : ADDRESS; (* block to change *)
  41. OldSize, (* old size of block *)
  42. NewSize: CARDINAL) (* new size of block *)
  43. (* in paragraphs *)
  44. : BOOLEAN ; (* If sucessful *)
  45. (*
  46. This procedure attempts to change the size of an allocated block.
  47. It returns TRUE if succeeded (only expansion can fail).
  48. If it fails no action is taken.
  49. *)
  50. END Storage.
  51.