LOADER.DEF 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * LOADER.DEF - Modula-2 Overlay Loader Source *
  5. * *
  6. * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. DEFINITION MODULE Loader;
  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. (*# call(seg_name=>null) *)
  15. (*******************)
  16. (* program loading *)
  17. (*******************)
  18. PROCEDURE LoadModule (name:ARRAY OF CHAR):CARDINAL;
  19. PROCEDURE UnLoadModule (modnum:CARDINAL);
  20. PROCEDURE GetProcAddr (modnum:CARDINAL;entry: ARRAY OF CHAR):ADDRESS;
  21. PROCEDURE 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 FlushAll;
  33. PROCEDURE TotalAvail():CARDINAL;
  34. PROCEDURE Avail():CARDINAL;
  35. (*****************************)
  36. (* Virtual memory segments *)
  37. (*****************************)
  38. PROCEDURE VAlloc(VAR addr : ADDRESS; size : CARDINAL);
  39. (* Allocates Virtual memory block of specified size.
  40. returns result in addr.
  41. Block is initially fixed so VUnfix must be called before
  42. it can be swapped out.
  43. Address of addr is used as handle so only one variable must be used
  44. to hold pointer.
  45. *)
  46. PROCEDURE VUnfix(VAR addr : ADDRESS);
  47. (*
  48. Unfixes memory allowing it to be moved or swapped to EMS or disk if
  49. memory runs low. The address should not be used to reference memory
  50. when unfixed.
  51. *)
  52. PROCEDURE VFix(VAR addr : ADDRESS);
  53. (*
  54. Swaps block back into memory if necessary and
  55. fixes the address so it can be used.
  56. Calls to FixVSeg and UnfixVSeg may be nested.
  57. *)
  58. PROCEDURE VFree(VAR addr : FarADDRESS);
  59. (* frees virtual memory block
  60. can be called only when segment fixed
  61. addr is reset to NIL on exit
  62. *)
  63. PROCEDURE VUnfixAll();
  64. (*
  65. Unfixes all virtual memory blocks. Use with care!
  66. *)
  67. (*****************************)
  68. (* ems control *)
  69. (*****************************)
  70. PROCEDURE SetEms(on:BOOLEAN):BOOLEAN;
  71. (*******************)
  72. (* setjmp handling *)
  73. (*******************)
  74. (*# save, call(reg_return=>(ax,bx)) *)
  75. (*# call(reg_saved=>(cx,dx,si,di,ds,es,st1,st2)) *) (*N.B. es must be saved*)
  76. PROCEDURE RetGate(off,seg:CARDINAL):ADDRESS;
  77. (*# restore *)
  78. (***********************)
  79. (* C memory management *)
  80. (***********************)
  81. TYPE
  82. HeapInfo = RECORD
  83. pentry : FarADDRESS;
  84. size : CARDINAL;
  85. useflag : BOOLEAN;
  86. END; (*HeapInfo*)
  87. PROCEDURE AllocMem(size:CARDINAL):FarADDRESS;
  88. PROCEDURE FreeMem(ofs,seg:CARDINAL);
  89. PROCEDURE ClearAllocMem(num,size:CARDINAL):FarADDRESS;
  90. PROCEDURE HugeAllocMem(size:LONGCARD):FarADDRESS;
  91. PROCEDURE ExpandMem(Buffer:FarADDRESS;Size:CARDINAL):FarADDRESS;
  92. PROCEDURE HugeExpandMem(Buffer:FarADDRESS;Size:LONGCARD):FarADDRESS;
  93. PROCEDURE HeapWalk(VAR Entry:HeapInfo):INTEGER;
  94. PROCEDURE HeapCheck(Val:CARDINAL;DoFill:BOOLEAN):INTEGER;
  95. (*******************)
  96. (* User Procedures *)
  97. (*******************)
  98. TYPE
  99. SegReturn = (SUCCESS,FAIL,RESIDENT,UNLOADED,INVALID_SEG,INVALID_MOD);
  100. (*#save,call(result_optional=>on)*)
  101. PROCEDURE ShrinkHeap():CARDINAL;
  102. (*# restore *)
  103. PROCEDURE GrowHeap;
  104. PROCEDURE UserFlush;
  105. PROCEDURE SetExitHandler(p:ExitHandler);
  106. PROCEDURE SetMemHandler(p:MemHandler);
  107. PROCEDURE LoadSeg(segno:CARDINAL;ModName:ARRAY OF CHAR):SegReturn;
  108. PROCEDURE UnloadSeg(segno:CARDINAL;ModName:ARRAY OF CHAR):SegReturn;
  109. PROCEDURE Getseg(seg:CARDINAL):CARDINAL;
  110. (*******************)
  111. (* rest is private *)
  112. (*******************)
  113. PROCEDURE InvalidProc;
  114. PROCEDURE Main(psp:CARDINAL);
  115. PROCEDURE Terminate;
  116. (*# call(reg_saved=>(cx,dx,si,di,ds,es,st1,st2)) *) (*N.B. es must be saved*)
  117. PROCEDURE CallTrap(sd:CARDINAL;gd:CARDINAL):CARDINAL;
  118. PROCEDURE ReturnTrap(sd:CARDINAL):CARDINAL;
  119. (*# restore *)
  120. END Loader.
  121.