| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- (* Release 3.10 *)
- (*-------------------------------------------------------------------------*
- * *
- * LIB.DEF - Modula-2 miscellaneous library functions *
- * *
- * COPYRIGHT (C) 1987..1992 Clarion Software Corporation. *
- * All Rights Reserved *
- * *
- *--------------------------------------------------------------------------*)
- (* OS/2 MSDOS Version *)
- (*# call(o_a_copy => off) *)
- (*%F _fdata *)
- (*# call(seg_name => null) *)
- (*# data(seg_name => null) *)
- (*%E *)
- (*# module(implementation=>off) *)
- DEFINITION MODULE Lib;
- IMPORT SYSTEM;
- (* The following function determines whether objects are hierarchically related *)
- TYPE
- (*# save *)
- (*%T _fdata *)
- (*# data(near_ptr => off) *)
- (*%E *)
- (*%F _fdata *)
- (*# data(near_ptr => on) *)
- (*%E *)
- MTablePtr = POINTER TO MHeader;
- (*# restore *)
- MHeader = RECORD
- Size: CARDINAL;
- Parent: MTablePtr;
- END;
- PROCEDURE IsOfClass(Child, Parent: MTablePtr): BOOLEAN;
- VAR
- NilStr : ARRAY [0..0] OF CHAR;
- RunTimeError: PROCEDURE(LONGCARD, CARDINAL, ARRAY OF CHAR);
- TYPE
- CompareProc = PROCEDURE(CARDINAL, CARDINAL) : BOOLEAN;
- SwapProc = PROCEDURE(CARDINAL, CARDINAL);
- PROCEDURE QSort(N: CARDINAL; Less: CompareProc; Swap: SwapProc);
- PROCEDURE HSort(N: CARDINAL; Less: CompareProc; Swap: SwapProc);
- PROCEDURE RANDOM(Range: CARDINAL) : CARDINAL;
- PROCEDURE RAND() : REAL;
- PROCEDURE SEED(v:CARDINAL);
- PROCEDURE RANDOMIZE;
- PROCEDURE Execute (Name : ARRAY OF CHAR; (* full name of program *)
- CommandLine : ARRAY OF CHAR; (* command line for program *)
- StoreAddr : FarADDRESS; (* storage to execute in, MSDOS only *)
- StoreLen : CARDINAL (* length of store paragraphs, MSDOS only *)
- ) : CARDINAL ; (* DOS reply (0=OK) *)
- PROCEDURE OSErrorMessage ( N : CARDINAL ; VAR S : ARRAY OF CHAR );
- PROCEDURE OSFatalError ( S : ARRAY OF CHAR ; N : CARDINAL ) ;
- PROCEDURE Speaker(FreqHz,TimeMs: CARDINAL);
- TYPE
- ExecEnvType = ARRAY [0..31] OF ADDRESS;
- ExecEnvPtr = POINTER TO ExecEnvType;
- VAR
- ExecSearchPath: BOOLEAN;
- TYPE
- (*# save *)
- (*# data(near_ptr => off) *)
- CommandType = POINTER TO ARRAY[0..126] OF CHAR;
- (*# restore *)
- PROCEDURE Environment(N: CARDINAL) : CommandType;
- PROCEDURE EnvironmentFind(name: ARRAY OF CHAR;
- VAR result: ARRAY OF CHAR );
- PROCEDURE ParamStr(VAR S: ARRAY OF CHAR; N: CARDINAL);
- PROCEDURE ParamCount() : CARDINAL;
- PROCEDURE Exec ( command : ARRAY OF CHAR ; Params: ARRAY OF CHAR; Env: ExecEnvPtr): CARDINAL;
- PROCEDURE ExecCmd ( command : ARRAY OF CHAR ): CARDINAL;
- PROCEDURE WrDosError ( ErrorNo : SHORTCARD ) ;
- PROCEDURE SysErrno(): CARDINAL;
- TYPE
- DayType = (Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday) ;
- PROCEDURE GetDate ( VAR Year,Month,Day : CARDINAL ;
- VAR DayOfWeek : DayType ) ;
- PROCEDURE GetTime ( VAR Hrs,Mins,Secs,Hsecs : CARDINAL ) ;
- PROCEDURE SetDate ( Year,Month,Day : CARDINAL): BOOLEAN ;
- PROCEDURE SetTime ( Hrs,Mins,Secs,Hsecs : CARDINAL ): BOOLEAN ;
- PROCEDURE MakeAllPath(VAR Path: ARRAY OF CHAR; Drive, Dir, Name, Ext: ARRAY OF CHAR);
- PROCEDURE SplitAllPath(Path: ARRAY OF CHAR; VAR Drive: ARRAY OF CHAR;
- VAR Dir: ARRAY OF CHAR; VAR Name: ARRAY OF CHAR; VAR Ext: ARRAY OF CHAR);
- (*# save *)
- (*%T _DLL *)
- (*# call(seg_name=>LibDLL) *)
- (*%E *)
- PROCEDURE AddFarAddr(A: FarADDRESS; increment: CARDINAL) : FarADDRESS;
- PROCEDURE SubFarAddr(A: FarADDRESS; decrement: CARDINAL) : FarADDRESS;
- PROCEDURE IncFarAddr(VAR A: FarADDRESS; increment: CARDINAL);
- PROCEDURE DecFarAddr(VAR A: FarADDRESS; decrement: CARDINAL);
- (*# restore *)
- TYPE
- A2 = ARRAY[0..1] OF BYTE;
- A3 = ARRAY[0..2] OF BYTE;
- A4 = ARRAY[0..3] OF BYTE;
- _C8 = ARRAY[0..7] OF BYTE;
- (*%T _fptr *)
- CONST
- AddAddr = AddFarAddr;
- SubAddr = SubFarAddr;
- IncAddr = IncFarAddr;
- DecAddr = DecFarAddr;
- (*%E *)
- (*# save,call(reg_saved=>(dx,si,di,ds,st1,st2))*)
- INLINE PROCEDURE QueryDosVersion():CARDINAL = _C8(0B8H,000H,030H,0CDH,021H,086H,0C4H,SYSTEM.Ret);
- (* Returns the DOS version number as a BCD number. This makes *)
- (* numerical comparisons easy. Example: *)
- (* *)
- (* IF Lib.QueryDosVersion() >= 300H THEN *)
- (* *)
- (* would test whether the program is running under a version of DOS *)
- (* at or above 3.00. *)
- (*# restore *)
- (*# save, call( reg_param=>(ax,bx),
- reg_saved=>(cx,dx,si,di,es,ds,st1,st2), inline=>on ) *)
- INLINE PROCEDURE AddNearAddr(A: NearADDRESS; increment: CARDINAL) : NearADDRESS=A3(03H, 0C3H, SYSTEM.Ret);
- (*# call( reg_param=>(ax,bx),
- reg_saved=>(cx,dx,si,di,es,ds,st1,st2), inline=>on ) *)
- INLINE PROCEDURE SubNearAddr(A: NearADDRESS; decrement: CARDINAL) : NearADDRESS=A3(2BH, 0C3H, SYSTEM.Ret);
- (*%T _fptr *)
- (*# call( reg_param=>(bx,es,ax),
- reg_saved=>(cx,dx,si,di,ds,st1,st2), inline=>on ) *)
- INLINE PROCEDURE IncNearAddr(VAR A: NearADDRESS; increment: CARDINAL)=A4(26H,01H, 07H, SYSTEM.Ret);
- (*# call( reg_param=>(bx,es,ax),
- reg_saved=>(cx,dx,si,di,ds,st1,st2), inline=>on ) *)
- INLINE PROCEDURE DecNearAddr(VAR A: NearADDRESS; decrement: CARDINAL)=A4(26H,29H, 07H, SYSTEM.Ret);
- (*%E *)
- (*%F _fptr *)
- (*# call( reg_param=>(bx,ax),
- reg_saved=>(cx,dx,si,di,ds,es,st1,st2), inline=>on ) *)
- INLINE PROCEDURE IncNearAddr(VAR A: NearADDRESS; increment: CARDINAL)=A3(01H, 07H, SYSTEM.Ret);
- (*# call( reg_param=>(bx,ax),
- reg_saved=>(cx,dx,si,di,ds,es,st1,st2), inline=>on ) *)
- INLINE PROCEDURE DecNearAddr(VAR A: NearADDRESS; decrement: CARDINAL)=A3(29H, 07H, SYSTEM.Ret);
- (*%E *)
- (*# restore *)
- (*%F _fptr *)
- (*# save,
- call( reg_param=>(ax,bx),
- reg_saved=>(cx,dx,si,di,es,ds,st1,st2), inline=>on )
- *)
- INLINE PROCEDURE AddAddr(A: ADDRESS; increment: CARDINAL) : ADDRESS=A3(03H, 0C3H, SYSTEM.Ret);
- (*# call( reg_param=>(ax,bx),
- reg_saved=>(cx,dx,si,di,es,ds,st1,st2), inline=>on ) *)
- INLINE PROCEDURE SubAddr(A: ADDRESS; decrement: CARDINAL) : ADDRESS=A3(2BH, 0C3H, SYSTEM.Ret);
- (*# call( reg_param=>(bx,ax),
- reg_saved=>(cx,dx,si,di,ds,es,st1,st2), inline=>on ) *)
- INLINE PROCEDURE IncAddr(VAR A: ADDRESS; increment: CARDINAL)=A3(01H, 07H, SYSTEM.Ret);
- (*# call( reg_param=>(bx,ax),
- reg_saved=>(cx,dx,si,di,ds,es,st1,st2), inline=>on ) *)
- INLINE PROCEDURE DecAddr(VAR A: ADDRESS; decrement: CARDINAL)=A3(29H, 07H, SYSTEM.Ret);
- (*# restore *)
- (*%E *)
- (*# save *)
- (*%T _fdata *)
- (*# call(seg_name=>SIG) *)
- (*%E *)
- PROCEDURE SetInProgramFlag(State: BOOLEAN);
- PROCEDURE GetInProgramFlag(): BOOLEAN;
- PROCEDURE EnableBreakCheck;
- PROCEDURE DisableBreakCheck;
- PROCEDURE Dos(VAR R: SYSTEM.Registers); (* INT 21H Function Call *)
- (*# restore *)
- PROCEDURE GetVector(Int:SHORTCARD):FarADDRESS;
- (* Returns the 32 bit address of the requested interrupt handler *)
- PROCEDURE SetVector(Int:SHORTCARD;Vector:FarADDRESS);
- (* Sets the interrupt handler for the requested interrupt vector *)
- PROCEDURE FatalError(S: ARRAY OF CHAR);
- (*# save *)
- (*%T _DLL *)
- (*# call(seg_name=>LibDLL) *)
- (*%E *)
- (*%F _fdata *)
- PROCEDURE NearMove (Source,Dest:NearADDRESS;Count:CARDINAL);
- PROCEDURE NearFastMove(Source,Dest:NearADDRESS;Count:CARDINAL);
- PROCEDURE NearWordMove(Source,Dest:NearADDRESS;WordCount:CARDINAL);
- (*%E *)
- PROCEDURE Move (Source,Dest:ADDRESS;Count:CARDINAL);
- PROCEDURE FastMove(Source,Dest:ADDRESS;Count:CARDINAL);
- PROCEDURE WordMove(Source,Dest:ADDRESS;WordCount:CARDINAL);
- PROCEDURE FarMove (Source,Dest:FarADDRESS;Count:CARDINAL);
- PROCEDURE FarFastMove(Source,Dest:FarADDRESS;Count:CARDINAL);
- PROCEDURE FarWordMove(Source,Dest:FarADDRESS;WordCount:CARDINAL);
- PROCEDURE Fill(Dest: ADDRESS; Count: CARDINAL; Value: BYTE);
- PROCEDURE FarFill(Dest: FarADDRESS; Count: CARDINAL; Value: BYTE);
- PROCEDURE WordFill(Dest: ADDRESS; WordCount: CARDINAL; Value: WORD);
- PROCEDURE FarWordFill(Dest: FarADDRESS; WordCount: CARDINAL; Value: WORD);
- PROCEDURE ScanR (Dest: ADDRESS; Count: CARDINAL; Value: BYTE) : CARDINAL;
- PROCEDURE ScanL (Dest: ADDRESS; Count: CARDINAL; Value: BYTE) : CARDINAL;
- PROCEDURE ScanNeR(Dest: ADDRESS; Count: CARDINAL; Value: BYTE) : CARDINAL;
- PROCEDURE ScanNeL(Dest: ADDRESS; Count: CARDINAL; Value: BYTE) : CARDINAL;
- PROCEDURE HashString(S: ARRAY OF CHAR; Range: CARDINAL) : CARDINAL;
- PROCEDURE Compare(Source,Dest: ADDRESS; Len: CARDINAL) : CARDINAL;
- PROCEDURE Terminate(P: PROC; VAR C: PROC);
- PROCEDURE SetReturnCode(code: SHORTCARD);
- TYPE
- CpuKind = (cpu_Unknown,cpu_V20,cpu_V30,cpu_8088,cpu_8086,
- cpu_80188,cpu_80186,
- cpu_80286,cpu_80386);
- FpuKind = (fpu_none,fpu_8087,fpu_80287,fpu_80387);
- CpuRec = RECORD
- cpu : CpuKind;
- fpu : FpuKind;
- END;
- PROCEDURE CpuId ( VAR r : CpuRec );
- (* MSDOS Only *)
- VAR
- PSP : CARDINAL;
- CommandLine : CommandType;
- BreakChecks : BOOLEAN;
- PROCEDURE UserBreak;
- PROCEDURE Sound(FreqHz: CARDINAL);
- PROCEDURE NoSound;
- PROCEDURE Intr(VAR R: SYSTEM.Registers; I: CARDINAL);
- PROCEDURE Delay(Time: CARDINAL);
- TYPE
- TENBYTEREAL = ARRAY [0..9] OF BYTE;
- LongLabelRec = RECORD
- j_sp, j_ss, j_flag, j_cs, j_ip, j_bp, j_di, j_es, j_si, j_ds: CARDINAL;
- st1, st2: TENBYTEREAL;
- END;
- LongLabel = ARRAY [0..0] OF LongLabelRec;
- (*# save *)
- (*# call(reg_saved=>(ds,es,si,di,st1,st2), set_jmp=>on) *)
- PROCEDURE SetJmp (VAR Lbl: LongLabel) : CARDINAL;
- (*# restore *)
- (*# save *)
- (*# call(reg_saved=>(ax,bx,cx,dx,ds,es,si,di,st0,st1,st2,st3,st4,st5,st6)) *)
- PROCEDURE LongJmp(VAR Lbl: LongLabel; result: CARDINAL);
- (*# restore *)
- (* Protected mode features *)
- PROCEDURE AddressOK ( A : ADDRESS ) : BOOLEAN;
- PROCEDURE SelectorLimit ( S : CARDINAL ) : CARDINAL;
- PROCEDURE ProtectedMode () : BOOLEAN;
- (*# restore *)
- END Lib.
|