OVERLAY.LST 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. Listing:
  2. 1 (* Release 3.10 *)
  3. 2 (*-------------------------------------------------------------------------*
  4. 3 * *
  5. 4 * OVERLAY.DEF - Modula-2 interface to TopSpeed Overlay System *
  6. 5 * *
  7. 6 * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
  8. 7 * All Rights Reserved *
  9. 8 * *
  10. 9 *--------------------------------------------------------------------------*)
  11. 10
  12. 11 DEFINITION MODULE Overlay;
  13. 12
  14. 13 (*# call(o_a_copy=>off,o_a_size=>off,near_call=>off,same_ds=>off) *)
  15. 14 (*# call(ds_entry=>null) *)
  16. 15 (*# module(init_code=>off,implementation=>off)*)
  17. 16 (*# name(prefix=>none) *)
  18. 17
  19. 18 (*******************)
  20. 19 (* program loading *)
  21. 20 (*******************)
  22. 21 PROCEDURE Loader$LoadModule (name:ARRAY OF CHAR):CARDINAL;
  23. ***** ^ ';' expected
  24. 22 PROCEDURE Loader$UnLoadModule (modnum:CARDINAL);
  25. 23 PROCEDURE Loader$GetProcAddr (modnum:CARDINAL;entry: ARRAY OF CHAR):ADDRESS;
  26. 24 PROCEDURE Loader$GetOrdProcAddr(modnum:CARDINAL;entry:CARDINAL):ADDRESS;
  27. 25 (******************)
  28. 26 (* error handling *)
  29. 27 (******************)
  30. 28 TYPE
  31. 29 ExitHandler = PROCEDURE(ARRAY OF CHAR,CARDINAL);
  32. 30 MemHandler = PROCEDURE(CARDINAL):BOOLEAN;
  33. 31 str65 = ARRAY[0..64] OF CHAR;
  34. 32 (*********************)
  35. 33 (* memory management *)
  36. 34 (*********************)
  37. 35 PROCEDURE Loader$TotalAvail():CARDINAL;
  38. 36 PROCEDURE Loader$Avail():CARDINAL;
  39. 37 (*****************************)
  40. 38 (* Virtual memory segments *)
  41. 39 (*****************************)
  42. 40 PROCEDURE Loader$VAlloc(VAR addr : ADDRESS; size : CARDINAL);
  43. 41 (* Allocates Virtual memory block of specified size.
  44. 42 returns result in addr.
  45. 43 Block is initially fixed so VUnfix must be called before
  46. 44 it can be swapped out.
  47. 45 Address of addr is used as handle so only one variable must be used
  48. 46 to hold pointer.
  49. 47 *)
  50. 48 PROCEDURE Loader$VUnfix(VAR addr : ADDRESS);
  51. 49 (*
  52. 50 Unfixes memory allowing it to be moved or swapped to EMS or disk if
  53. 51 memory runs low. The address should not be used to reference memory
  54. 52 when unfixed.
  55. 53 *)
  56. 54 PROCEDURE Loader$VFix(VAR addr : ADDRESS);
  57. 55 (*
  58. 56 Swaps block back into memory if necessary and
  59. 57 fixes the address so it can be used.
  60. 58 Calls to VFix and VUnfix may be nested.
  61. 59 *)
  62. 60 PROCEDURE Loader$VFree(VAR addr : FarADDRESS);
  63. 61 (* frees virtual memory block
  64. 62 can be called only when segment fixed
  65. 63 addr is reset to NIL on exit
  66. 64 *)
  67. 65 PROCEDURE Loader$VUnfixAll();
  68. 66 (*
  69. 67 Unfixes all virtual memory blocks. Use with care!
  70. 68 *)
  71. 69 (*****************************)
  72. 70 (* ems control *)
  73. 71 (*****************************)
  74. 72 PROCEDURE Loader$SetEms(on:BOOLEAN):BOOLEAN;
  75. 73 (*******************)
  76. 74 (* setjmp handling *)
  77. 75 (*******************)
  78. 76 (*# save, call(reg_return=>(ax,bx)) *)
  79. 77 (*# call(reg_saved=>(cx,dx,si,di,ds,es,st1,st2)) *) (*N.B. es must be saved*)
  80. 78 PROCEDURE Loader$RetGate(off,seg:CARDINAL):ADDRESS;
  81. 79 (*# restore *)
  82. 80 (***********************)
  83. 81 (* C memory management *)
  84. 82 (***********************)
  85. 83 TYPE
  86. 84 HeapInfo = RECORD
  87. 85 pentry : FarADDRESS;
  88. 86 size : CARDINAL;
  89. 87 useflag : BOOLEAN;
  90. 88 END; (*HeapInfo*)
  91. 89
  92. 90 PROCEDURE Loader$AllocMem(size:CARDINAL):FarADDRESS;
  93. 91 PROCEDURE Loader$FreeMem(ofs,seg:CARDINAL);
  94. 92 PROCEDURE Loader$ClearAllocMem(num,size:CARDINAL):FarADDRESS;
  95. 93 PROCEDURE Loader$HugeAllocMem(size:LONGCARD):FarADDRESS;
  96. 94 PROCEDURE Loader$ExpandMem(Buffer:FarADDRESS;Size:CARDINAL):FarADDRESS;
  97. 95 PROCEDURE Loader$HugeExpandMem(Buffer:FarADDRESS;Size:LONGCARD):FarADDRESS;
  98. 96 PROCEDURE Loader$HeapWalk(VAR Entry:HeapInfo):INTEGER;
  99. 97 PROCEDURE Loader$HeapCheck(Val:CARDINAL;DoFill:BOOLEAN):INTEGER;
  100. 98 (*******************)
  101. 99 (* User Procedures *)
  102. 100 (*******************)
  103. 101 TYPE
  104. 102 SegReturn = (SUCCESS,FAIL,RESIDENT,UNLOADED,INVALID_SEG,INVALID_MOD);
  105. 103 (*#save,call(result_optional=>on)*)
  106. 104 PROCEDURE Loader$ShrinkHeap():CARDINAL;
  107. 105 (*# restore *)
  108. 106 PROCEDURE Loader$GrowHeap;
  109. 107 PROCEDURE Loader$UserFlush;
  110. 108 PROCEDURE Loader$SetExitHandler(p:ExitHandler);
  111. 109 PROCEDURE Loader$SetMemHandler(p:MemHandler);
  112. 110 PROCEDURE Loader$LoadSeg(segno:CARDINAL;ModName:ARRAY OF CHAR):SegReturn;
  113. 111 PROCEDURE Loader$UnloadSeg(segno:CARDINAL;ModName:ARRAY OF CHAR):SegReturn;
  114. 112 PROCEDURE Loader$Getseg(seg:CARDINAL):CARDINAL;
  115. 113
  116. 114 CONST
  117. 115 LoadModule ::= Loader$LoadModule ;
  118. 116 UnLoadModule ::= Loader$UnLoadModule ;
  119. 117 GetProcAddr ::= Loader$GetProcAddr ;
  120. 118 GetOrdProcAddr ::= Loader$GetOrdProcAddr ;
  121. 119 FlushAll ::= Loader$UserFlush ;
  122. 120 TotalAvail ::= Loader$TotalAvail ;
  123. 121 Avail ::= Loader$Avail ;
  124. 122 VAlloc ::= Loader$VAlloc ;
  125. 123 VUnfix ::= Loader$VUnfix ;
  126. 124 VFix ::= Loader$VFix ;
  127. 125 VFree ::= Loader$VFree ;
  128. 126 VUnfixAll ::= Loader$VUnfixAll ;
  129. 127 SetEms ::= Loader$SetEms ;
  130. 128 RetGate ::= Loader$RetGate ;
  131. 129 AllocMem ::= Loader$AllocMem ;
  132. 130 FreeMem ::= Loader$FreeMem ;
  133. 131 ClearAllocMem ::= Loader$ClearAllocMem ;
  134. 132 HugeAllocMem ::= Loader$HugeAllocMem ;
  135. 133 ExpandMem ::= Loader$ExpandMem ;
  136. 134 HugeExpandMem ::= Loader$HugeExpandMem ;
  137. 135 HeapWalk ::= Loader$HeapWalk ;
  138. 136 HeapCheck ::= Loader$HeapCheck ;
  139. 137 ShrinkHeap ::= Loader$ShrinkHeap ;
  140. 138 GrowHeap ::= Loader$GrowHeap ;
  141. 139 UserFlush ::= Loader$UserFlush ;
  142. 140 SetExitHandler ::= Loader$SetExitHandler ;
  143. 141 SetMemHandler ::= Loader$SetMemHandler ;
  144. 142 LoadSeg ::= Loader$LoadSeg ;
  145. 143 UnloadSeg ::= Loader$UnloadSeg ;
  146. 144 Getseg ::= Loader$Getseg ;
  147. 145
  148. 146 END Overlay.
  149. 147
  150. 1 error