OVERLAY.DEF 5.7 KB

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