STORAGE.DEF 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * STORAGE.DEF - Modula-2 synamic memory allocation *
  5. * *
  6. * COPYRIGHT (C) 1987..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. (*# call(o_a_copy => on,
  11. o_a_size => on) *)
  12. (*%F _fdata *)
  13. (*# call(seg_name => null) *)
  14. (*# data(seg_name => null) *)
  15. (*%E *)
  16. (*%T _fdata *)
  17. (*# call(ds_entry=>null) *)
  18. (*%E *)
  19. (*# module(implementation=>off) *)
  20. DEFINITION MODULE Storage;
  21. IMPORT SYSTEM;
  22. (*# save, data(near_ptr=> off) *)
  23. TYPE
  24. FarHeapRecPtr = POINTER TO FarHeapRec;
  25. FarHeapRec = RECORD
  26. size : CARDINAL;
  27. next : FarHeapRecPtr;
  28. END;
  29. (*# restore *)
  30. (*# save, data(near_ptr=> on) *)
  31. TYPE
  32. NearHeapRecPtr = POINTER TO NearHeapRec;
  33. NearHeapRec = RECORD
  34. size : CARDINAL;
  35. next : NearHeapRecPtr;
  36. END;
  37. (*# restore *)
  38. (* Main heap procedures *)
  39. PROCEDURE FarAllocate (VAR a: FarADDRESS; size: CARDINAL);
  40. PROCEDURE FarDeallocate(VAR a: FarADDRESS; size: CARDINAL);
  41. PROCEDURE FarAvailable(size: CARDINAL ): BOOLEAN;
  42. PROCEDURE NearAllocate (VAR a: NearADDRESS; size: CARDINAL);
  43. PROCEDURE NearDeallocate(VAR a: NearADDRESS; size: CARDINAL);
  44. PROCEDURE NearAvailable(size: CARDINAL ): BOOLEAN;
  45. PROCEDURE FarMakeHeap(Source: CARDINAL; Size: CARDINAL): FarHeapRecPtr;
  46. PROCEDURE FarHeapAllocate(Source: FarHeapRecPtr; VAR A: FarADDRESS; Size: CARDINAL);
  47. PROCEDURE FarHeapAvail(Source: FarHeapRecPtr): CARDINAL;
  48. PROCEDURE FarHeapTotalAvail(Source: FarHeapRecPtr): CARDINAL;
  49. PROCEDURE FarHeapDeallocate(Source: FarHeapRecPtr; VAR A: FarADDRESS; Size: CARDINAL );
  50. PROCEDURE FarHeapChangeAlloc(Source: FarHeapRecPtr; A: FarADDRESS;
  51. OldSize, NewSize : CARDINAL): BOOLEAN;
  52. PROCEDURE FarHeapChangeSize(Source : FarHeapRecPtr; VAR A: FarADDRESS;
  53. OldSize, NewSize : CARDINAL );
  54. PROCEDURE NearMakeHeap(Source: NearADDRESS; Size: CARDINAL): NearHeapRecPtr;
  55. PROCEDURE NearHeapAllocate(Source: NearHeapRecPtr; VAR A: NearADDRESS; Size: CARDINAL);
  56. PROCEDURE NearHeapAvail(Source: NearHeapRecPtr): CARDINAL;
  57. PROCEDURE NearHeapTotalAvail(Source: NearHeapRecPtr): CARDINAL;
  58. PROCEDURE NearHeapDeallocate(Source: NearHeapRecPtr; VAR A: NearADDRESS; Size: CARDINAL );
  59. PROCEDURE NearHeapChangeAlloc(Source: NearHeapRecPtr; A: NearADDRESS;
  60. OldSize, NewSize : CARDINAL): BOOLEAN;
  61. PROCEDURE NearHeapChangeSize(Source : NearHeapRecPtr; VAR A: NearADDRESS;
  62. OldSize, NewSize : CARDINAL );
  63. PROCEDURE SegAllocate(Size: CARDINAL): CARDINAL;
  64. PROCEDURE SegDeallocate(Sel: CARDINAL; Size: CARDINAL);
  65. (*%T _fptr *)
  66. CONST
  67. HeapRecPtr ::= FarHeapRecPtr;
  68. HeapRec ::= FarHeapRec;
  69. ALLOCATE = FarAllocate;
  70. DEALLOCATE = FarDeallocate;
  71. Available = FarAvailable;
  72. MakeHeap = FarMakeHeap;
  73. HeapAllocate = FarHeapAllocate;
  74. HeapAvail = FarHeapAvail;
  75. HeapTotalAvail = FarHeapTotalAvail;
  76. HeapDeallocate = FarHeapDeallocate;
  77. HeapChangeAlloc = FarHeapChangeAlloc;
  78. HeapChangeSize = FarHeapChangeSize;
  79. (*%E *)
  80. (*%F _fptr *)
  81. CONST
  82. HeapRecPtr ::= NearHeapRecPtr;
  83. HeapRec ::= NearHeapRec;
  84. ALLOCATE = NearAllocate;
  85. DEALLOCATE = NearDeallocate;
  86. Available = NearAvailable;
  87. MakeHeap = NearMakeHeap;
  88. HeapAllocate = NearHeapAllocate;
  89. HeapAvail = NearHeapAvail;
  90. HeapTotalAvail = NearHeapTotalAvail;
  91. HeapDeallocate = NearHeapDeallocate;
  92. HeapChangeAlloc = NearHeapChangeAlloc;
  93. HeapChangeSize = NearHeapChangeSize;
  94. (*%E *)
  95. VAR
  96. MainHeap: FarHeapRecPtr;
  97. NearHeap: NearHeapRecPtr;
  98. ClearOnAllocate : BOOLEAN;
  99. Check: BOOLEAN;
  100. END Storage.
  101.