LIB.LST 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. Listing:
  2. 1 (* Release 3.10 *)
  3. 2 (*-------------------------------------------------------------------------*
  4. 3 * *
  5. 4 * LIB.DEF - Modula-2 miscellaneous library functions *
  6. 5 * *
  7. 6 * COPYRIGHT (C) 1987..1992 Clarion Software Corporation. *
  8. 7 * All Rights Reserved *
  9. 8 * *
  10. 9 *--------------------------------------------------------------------------*)
  11. 10 (* OS/2 MSDOS Version *)
  12. 11 (*# call(o_a_copy => off) *)
  13. 12 (*%F _fdata *)
  14. 13 (*# call(seg_name => null) *)
  15. 14 (*# data(seg_name => null) *)
  16. 15 (*%E *)
  17. 16 (*# module(implementation=>off) *)
  18. 17 DEFINITION MODULE Lib;
  19. 18
  20. 19 IMPORT SYSTEM;
  21. 20
  22. 21 (* The following function determines whether objects are hierarchically related *)
  23. 22 TYPE
  24. 23 (*# save *)
  25. 24 (*%T _fdata *)
  26. 25 (*# data(near_ptr => off) *)
  27. 26 (*%E *)
  28. 27 (*%F _fdata *)
  29. 28 (*# data(near_ptr => on) *)
  30. 29 (*%E *)
  31. 30 MTablePtr = POINTER TO MHeader;
  32. ***** ^ undeclared identifier
  33. 31 (*# restore *)
  34. 32 MHeader = RECORD
  35. 33 Size: CARDINAL;
  36. 34 Parent: MTablePtr;
  37. 35 END;
  38. ***** ^ not supported yet
  39. 36
  40. 37 PROCEDURE IsOfClass(Child, Parent: MTablePtr): BOOLEAN;
  41. 38
  42. 39 VAR
  43. 40 NilStr : ARRAY [0..0] OF CHAR;
  44. ***** ^ not supported yet
  45. ***** ^ not supported yet
  46. 41 RunTimeError: PROCEDURE(LONGCARD, CARDINAL, ARRAY OF CHAR);
  47. ***** ^ not supported yet
  48. ***** ^ undeclared identifier
  49. ***** ^ not supported yet
  50. ***** ^ not supported yet
  51. 42
  52. 43 TYPE
  53. 44 CompareProc = PROCEDURE(CARDINAL, CARDINAL) : BOOLEAN;
  54. ***** ^ not supported yet
  55. ***** ^ not supported yet
  56. ***** ^ not supported yet
  57. ***** ^ not supported yet
  58. 45 SwapProc = PROCEDURE(CARDINAL, CARDINAL);
  59. ***** ^ not supported yet
  60. ***** ^ not supported yet
  61. ***** ^ not supported yet
  62. 46
  63. 47 PROCEDURE QSort(N: CARDINAL; Less: CompareProc; Swap: SwapProc);
  64. 48 PROCEDURE HSort(N: CARDINAL; Less: CompareProc; Swap: SwapProc);
  65. 49
  66. 50 PROCEDURE RANDOM(Range: CARDINAL) : CARDINAL;
  67. 51 PROCEDURE RAND() : REAL;
  68. 52 PROCEDURE SEED(v:CARDINAL);
  69. 53 PROCEDURE RANDOMIZE;
  70. 54
  71. 55 PROCEDURE Execute (Name : ARRAY OF CHAR; (* full name of program *)
  72. ***** ^ not supported yet
  73. 56 CommandLine : ARRAY OF CHAR; (* command line for program *)
  74. ***** ^ not supported yet
  75. 57 StoreAddr : FarADDRESS; (* storage to execute in, MSDOS only *)
  76. ***** ^ undeclared identifier
  77. 58 StoreLen : CARDINAL (* length of store paragraphs, MSDOS only *)
  78. 59 ) : CARDINAL ; (* DOS reply (0=OK) *)
  79. 60
  80. 61 PROCEDURE OSErrorMessage ( N : CARDINAL ; VAR S : ARRAY OF CHAR );
  81. ***** ^ not supported yet
  82. 62 PROCEDURE OSFatalError ( S : ARRAY OF CHAR ; N : CARDINAL ) ;
  83. ***** ^ not supported yet
  84. 63
  85. 64 PROCEDURE Speaker(FreqHz,TimeMs: CARDINAL);
  86. 65
  87. 66 TYPE
  88. 67 ExecEnvType = ARRAY [0..31] OF ADDRESS;
  89. ***** ^ not supported yet
  90. ***** ^ undeclared identifier
  91. 68 ExecEnvPtr = POINTER TO ExecEnvType;
  92. ***** ^ not supported yet
  93. 69 VAR
  94. 70 ExecSearchPath: BOOLEAN;
  95. 71
  96. 72 TYPE
  97. 73 (*# save *)
  98. 74 (*# data(near_ptr => off) *)
  99. 75 CommandType = POINTER TO ARRAY[0..126] OF CHAR;
  100. ***** ^ not supported yet
  101. ***** ^ not supported yet
  102. 76 (*# restore *)
  103. 77
  104. 78 PROCEDURE Environment(N: CARDINAL) : CommandType;
  105. 79 PROCEDURE EnvironmentFind(name: ARRAY OF CHAR;
  106. ***** ^ not supported yet
  107. 80 VAR result: ARRAY OF CHAR );
  108. ***** ^ not supported yet
  109. 81 PROCEDURE ParamStr(VAR S: ARRAY OF CHAR; N: CARDINAL);
  110. ***** ^ not supported yet
  111. 82 PROCEDURE ParamCount() : CARDINAL;
  112. 83
  113. 84 PROCEDURE Exec ( command : ARRAY OF CHAR ; Params: ARRAY OF CHAR; Env: ExecEnvPtr): CARDINAL;
  114. ***** ^ not supported yet
  115. ***** ^ not supported yet
  116. 85 PROCEDURE ExecCmd ( command : ARRAY OF CHAR ): CARDINAL;
  117. ***** ^ not supported yet
  118. 86
  119. 87 PROCEDURE WrDosError ( ErrorNo : SHORTCARD ) ;
  120. 88 PROCEDURE SysErrno(): CARDINAL;
  121. 89
  122. 90 TYPE
  123. 91 DayType = (Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday) ;
  124. 92
  125. 93 PROCEDURE GetDate ( VAR Year,Month,Day : CARDINAL ;
  126. 94 VAR DayOfWeek : DayType ) ;
  127. 95 PROCEDURE GetTime ( VAR Hrs,Mins,Secs,Hsecs : CARDINAL ) ;
  128. 96 PROCEDURE SetDate ( Year,Month,Day : CARDINAL): BOOLEAN ;
  129. 97 PROCEDURE SetTime ( Hrs,Mins,Secs,Hsecs : CARDINAL ): BOOLEAN ;
  130. 98
  131. 99 PROCEDURE MakeAllPath(VAR Path: ARRAY OF CHAR; Drive, Dir, Name, Ext: ARRAY OF CHAR);
  132. ***** ^ not supported yet
  133. ***** ^ not supported yet
  134. 100 PROCEDURE SplitAllPath(Path: ARRAY OF CHAR; VAR Drive: ARRAY OF CHAR;
  135. ***** ^ not supported yet
  136. ***** ^ not supported yet
  137. 101 VAR Dir: ARRAY OF CHAR; VAR Name: ARRAY OF CHAR; VAR Ext: ARRAY OF CHAR);
  138. ***** ^ not supported yet
  139. ***** ^ not supported yet
  140. ***** ^ not supported yet
  141. 102
  142. 103 (*# save *)
  143. 104 (*%T _DLL *)
  144. 105 (*# call(seg_name=>LibDLL) *)
  145. 106 (*%E *)
  146. 107 PROCEDURE AddFarAddr(A: FarADDRESS; increment: CARDINAL) : FarADDRESS;
  147. ***** ^ undeclared identifier
  148. ***** ^ undeclared identifier
  149. 108 PROCEDURE SubFarAddr(A: FarADDRESS; decrement: CARDINAL) : FarADDRESS;
  150. ***** ^ undeclared identifier
  151. ***** ^ undeclared identifier
  152. 109 PROCEDURE IncFarAddr(VAR A: FarADDRESS; increment: CARDINAL);
  153. ***** ^ undeclared identifier
  154. 110 PROCEDURE DecFarAddr(VAR A: FarADDRESS; decrement: CARDINAL);
  155. ***** ^ undeclared identifier
  156. 111 (*# restore *)
  157. 112
  158. 113 TYPE
  159. 114 A2 = ARRAY[0..1] OF BYTE;
  160. ***** ^ not supported yet
  161. ***** ^ undeclared identifier
  162. 115 A3 = ARRAY[0..2] OF BYTE;
  163. ***** ^ not supported yet
  164. ***** ^ undeclared identifier
  165. 116 A4 = ARRAY[0..3] OF BYTE;
  166. ***** ^ not supported yet
  167. ***** ^ undeclared identifier
  168. 117 _C8 = ARRAY[0..7] OF BYTE;
  169. ***** ^ not supported yet
  170. ***** ^ undeclared identifier
  171. 118
  172. 119 (*%T _fptr *)
  173. 120 CONST
  174. 121 AddAddr = AddFarAddr;
  175. ***** ^ not supported yet
  176. 122 SubAddr = SubFarAddr;
  177. ***** ^ not supported yet
  178. 123 IncAddr = IncFarAddr;
  179. ***** ^ not supported yet
  180. 124 DecAddr = DecFarAddr;
  181. ***** ^ not supported yet
  182. 125 (*%E *)
  183. 126
  184. 127 (*# save,call(reg_saved=>(dx,si,di,ds,st1,st2))*)
  185. 128 INLINE PROCEDURE QueryDosVersion():CARDINAL = _C8(0B8H,000H,030H,0CDH,021H,086H,0C4H,SYSTEM.Ret);
  186. 129 (* Returns the DOS version number as a BCD number. This makes *)
  187. 130 (* numerical comparisons easy. Example: *)
  188. 131 (* *)
  189. 132 (* IF Lib.QueryDosVersion() >= 300H THEN *)
  190. 133 (* *)
  191. 134 (* would test whether the program is running under a version of DOS *)
  192. 135 (* at or above 3.00. *)
  193. 136 (*# restore *)
  194. 137
  195. 138 (*# save, call( reg_param=>(ax,bx),
  196. 139 reg_saved=>(cx,dx,si,di,es,ds,st1,st2), inline=>on ) *)
  197. 140 INLINE PROCEDURE AddNearAddr(A: NearADDRESS; increment: CARDINAL) : NearADDRESS=A3(03H, 0C3H, SYSTEM.Ret);
  198. 141
  199. 142 (*# call( reg_param=>(ax,bx),
  200. 143 reg_saved=>(cx,dx,si,di,es,ds,st1,st2), inline=>on ) *)
  201. 144 INLINE PROCEDURE SubNearAddr(A: NearADDRESS; decrement: CARDINAL) : NearADDRESS=A3(2BH, 0C3H, SYSTEM.Ret);
  202. 145
  203. 146 (*%T _fptr *)
  204. 147 (*# call( reg_param=>(bx,es,ax),
  205. 148 reg_saved=>(cx,dx,si,di,ds,st1,st2), inline=>on ) *)
  206. 149 INLINE PROCEDURE IncNearAddr(VAR A: NearADDRESS; increment: CARDINAL)=A4(26H,01H, 07H, SYSTEM.Ret);
  207. 150
  208. 151 (*# call( reg_param=>(bx,es,ax),
  209. 152 reg_saved=>(cx,dx,si,di,ds,st1,st2), inline=>on ) *)
  210. 153 INLINE PROCEDURE DecNearAddr(VAR A: NearADDRESS; decrement: CARDINAL)=A4(26H,29H, 07H, SYSTEM.Ret);
  211. 154 (*%E *)
  212. 155
  213. 156 (*%F _fptr *)
  214. 157 (*# call( reg_param=>(bx,ax),
  215. 158 reg_saved=>(cx,dx,si,di,ds,es,st1,st2), inline=>on ) *)
  216. 159 INLINE PROCEDURE IncNearAddr(VAR A: NearADDRESS; increment: CARDINAL)=A3(01H, 07H, SYSTEM.Ret);
  217. 160
  218. 161 (*# call( reg_param=>(bx,ax),
  219. 162 reg_saved=>(cx,dx,si,di,ds,es,st1,st2), inline=>on ) *)
  220. 163 INLINE PROCEDURE DecNearAddr(VAR A: NearADDRESS; decrement: CARDINAL)=A3(29H, 07H, SYSTEM.Ret);
  221. 164 (*%E *)
  222. 165 (*# restore *)
  223. 166
  224. 167 (*%F _fptr *)
  225. 168 (*# save,
  226. 169 call( reg_param=>(ax,bx),
  227. 170 reg_saved=>(cx,dx,si,di,es,ds,st1,st2), inline=>on )
  228. 171 *)
  229. 172 INLINE PROCEDURE AddAddr(A: ADDRESS; increment: CARDINAL) : ADDRESS=A3(03H, 0C3H, SYSTEM.Ret);
  230. 173
  231. 174 (*# call( reg_param=>(ax,bx),
  232. 175 reg_saved=>(cx,dx,si,di,es,ds,st1,st2), inline=>on ) *)
  233. 176 INLINE PROCEDURE SubAddr(A: ADDRESS; decrement: CARDINAL) : ADDRESS=A3(2BH, 0C3H, SYSTEM.Ret);
  234. 177
  235. 178 (*# call( reg_param=>(bx,ax),
  236. 179 reg_saved=>(cx,dx,si,di,ds,es,st1,st2), inline=>on ) *)
  237. 180 INLINE PROCEDURE IncAddr(VAR A: ADDRESS; increment: CARDINAL)=A3(01H, 07H, SYSTEM.Ret);
  238. 181
  239. 182 (*# call( reg_param=>(bx,ax),
  240. 183 reg_saved=>(cx,dx,si,di,ds,es,st1,st2), inline=>on ) *)
  241. 184 INLINE PROCEDURE DecAddr(VAR A: ADDRESS; decrement: CARDINAL)=A3(29H, 07H, SYSTEM.Ret);
  242. 185 (*# restore *)
  243. 186 (*%E *)
  244. 187
  245. 188 (*# save *)
  246. 189 (*%T _fdata *)
  247. 190 (*# call(seg_name=>SIG) *)
  248. 191 (*%E *)
  249. 192 PROCEDURE SetInProgramFlag(State: BOOLEAN);
  250. 193 PROCEDURE GetInProgramFlag(): BOOLEAN;
  251. 194 PROCEDURE EnableBreakCheck;
  252. 195 PROCEDURE DisableBreakCheck;
  253. 196 PROCEDURE Dos(VAR R: SYSTEM.Registers); (* INT 21H Function Call *)
  254. 197 (*# restore *)
  255. 198
  256. 199 PROCEDURE GetVector(Int:SHORTCARD):FarADDRESS;
  257. 200 (* Returns the 32 bit address of the requested interrupt handler *)
  258. 201
  259. 202 PROCEDURE SetVector(Int:SHORTCARD;Vector:FarADDRESS);
  260. 203 (* Sets the interrupt handler for the requested interrupt vector *)
  261. 204
  262. 205 PROCEDURE FatalError(S: ARRAY OF CHAR);
  263. 206
  264. 207 (*# save *)
  265. 208 (*%T _DLL *)
  266. 209 (*# call(seg_name=>LibDLL) *)
  267. 210 (*%E *)
  268. 211 (*%F _fdata *)
  269. 212 PROCEDURE NearMove (Source,Dest:NearADDRESS;Count:CARDINAL);
  270. 213 PROCEDURE NearFastMove(Source,Dest:NearADDRESS;Count:CARDINAL);
  271. 214 PROCEDURE NearWordMove(Source,Dest:NearADDRESS;WordCount:CARDINAL);
  272. 215 (*%E *)
  273. 216 PROCEDURE Move (Source,Dest:ADDRESS;Count:CARDINAL);
  274. 217 PROCEDURE FastMove(Source,Dest:ADDRESS;Count:CARDINAL);
  275. 218 PROCEDURE WordMove(Source,Dest:ADDRESS;WordCount:CARDINAL);
  276. 219
  277. 220 PROCEDURE FarMove (Source,Dest:FarADDRESS;Count:CARDINAL);
  278. 221 PROCEDURE FarFastMove(Source,Dest:FarADDRESS;Count:CARDINAL);
  279. 222 PROCEDURE FarWordMove(Source,Dest:FarADDRESS;WordCount:CARDINAL);
  280. 223
  281. 224 PROCEDURE Fill(Dest: ADDRESS; Count: CARDINAL; Value: BYTE);
  282. 225 PROCEDURE FarFill(Dest: FarADDRESS; Count: CARDINAL; Value: BYTE);
  283. 226
  284. 227 PROCEDURE WordFill(Dest: ADDRESS; WordCount: CARDINAL; Value: WORD);
  285. 228 PROCEDURE FarWordFill(Dest: FarADDRESS; WordCount: CARDINAL; Value: WORD);
  286. 229
  287. 230 PROCEDURE ScanR (Dest: ADDRESS; Count: CARDINAL; Value: BYTE) : CARDINAL;
  288. 231 PROCEDURE ScanL (Dest: ADDRESS; Count: CARDINAL; Value: BYTE) : CARDINAL;
  289. 232 PROCEDURE ScanNeR(Dest: ADDRESS; Count: CARDINAL; Value: BYTE) : CARDINAL;
  290. 233 PROCEDURE ScanNeL(Dest: ADDRESS; Count: CARDINAL; Value: BYTE) : CARDINAL;
  291. 234
  292. 235 PROCEDURE HashString(S: ARRAY OF CHAR; Range: CARDINAL) : CARDINAL;
  293. 236 PROCEDURE Compare(Source,Dest: ADDRESS; Len: CARDINAL) : CARDINAL;
  294. 237
  295. 238 PROCEDURE Terminate(P: PROC; VAR C: PROC);
  296. 239 PROCEDURE SetReturnCode(code: SHORTCARD);
  297. 240
  298. 241
  299. 242 TYPE
  300. 243 CpuKind = (cpu_Unknown,cpu_V20,cpu_V30,cpu_8088,cpu_8086,
  301. 244 cpu_80188,cpu_80186,
  302. 245 cpu_80286,cpu_80386);
  303. 246
  304. 247 FpuKind = (fpu_none,fpu_8087,fpu_80287,fpu_80387);
  305. 248
  306. 249 CpuRec = RECORD
  307. 250 cpu : CpuKind;
  308. 251 fpu : FpuKind;
  309. 252 END;
  310. 253
  311. 254 PROCEDURE CpuId ( VAR r : CpuRec );
  312. 255
  313. 256 (* MSDOS Only *)
  314. 257 VAR
  315. 258 PSP : CARDINAL;
  316. 259 CommandLine : CommandType;
  317. 260 BreakChecks : BOOLEAN;
  318. 261
  319. 262 PROCEDURE UserBreak;
  320. 263 PROCEDURE Sound(FreqHz: CARDINAL);
  321. 264 PROCEDURE NoSound;
  322. 265 PROCEDURE Intr(VAR R: SYSTEM.Registers; I: CARDINAL);
  323. 266 PROCEDURE Delay(Time: CARDINAL);
  324. 267
  325. 268 TYPE
  326. 269 TENBYTEREAL = ARRAY [0..9] OF BYTE;
  327. 270 LongLabelRec = RECORD
  328. 271 j_sp, j_ss, j_flag, j_cs, j_ip, j_bp, j_di, j_es, j_si, j_ds: CARDINAL;
  329. 272 st1, st2: TENBYTEREAL;
  330. 273 END;
  331. 274 LongLabel = ARRAY [0..0] OF LongLabelRec;
  332. 275
  333. 276 (*# save *)
  334. 277 (*# call(reg_saved=>(ds,es,si,di,st1,st2), set_jmp=>on) *)
  335. 278 PROCEDURE SetJmp (VAR Lbl: LongLabel) : CARDINAL;
  336. 279 (*# restore *)
  337. 280
  338. 281 (*# save *)
  339. 282 (*# call(reg_saved=>(ax,bx,cx,dx,ds,es,si,di,st0,st1,st2,st3,st4,st5,st6)) *)
  340. 283 PROCEDURE LongJmp(VAR Lbl: LongLabel; result: CARDINAL);
  341. 284 (*# restore *)
  342. 285
  343. 286 (* Protected mode features *)
  344. 287 PROCEDURE AddressOK ( A : ADDRESS ) : BOOLEAN;
  345. 288 PROCEDURE SelectorLimit ( S : CARDINAL ) : CARDINAL;
  346. 289 PROCEDURE ProtectedMode () : BOOLEAN;
  347. 290 (*# restore *)
  348. 291 END Lib.
  349. 56 errors