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