(* Release 3.10 *) (*-------------------------------------------------------------------------* * * * PASLIB.DEF - Modula-2 interface to PASLIB.ITF * * * * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. * * All Rights Reserved * * * *--------------------------------------------------------------------------*) (*# project("#set tspas='on'") *) (*# call(o_a_copy => off, o_a_size=>off) *) (*# module(implementation=>off) *) (*%F _fdata *) (*# call(seg_name => null) *) (*# data(seg_name => null) *) (*%E *) DEFINITION MODULE PasLib; TYPE String80 = ARRAY [0..80] OF CHAR; (* Byte 0 contains length *) maxstring = ARRAY [0..256] OF CHAR; (* Byte 0 contains length *) convstring = String80; (* Byte 0 contains length *) namestring = String80; (* Byte 0 contains length *) cmpres = [-1..1]; ifilemode = (rm,wm); States = (Initialized, TextFile, TempFile, EOLinBuffer, Device, Assigned, ACrt, App); filetype = RECORD bufferptr: ADDRESS; (* must be first field of RECORD *) objectsize:CARDINAL; (* must be second field of RECORD *) state: SET OF States; (* must be third 3 field of RECORD, zero *) (* length name indicates a temporary file *) mode: ifilemode; handle: CARDINAL; name: String80; stream: ADDRESS; END; VAR _input: filetype; _output: filetype; winio: BOOLEAN; ClearOnAllocate :BOOLEAN; IOCheck : BOOLEAN; IsoFormatting: BOOLEAN; HeapError : PROCEDURE(CARDINAL): INTEGER; RandSeed : LONGINT; IOBufferSize : CARDINAL; FileMode : CARDINAL; CONST DefaultBufferSize = 512; PROCEDURE _allocate(VAR p:ADDRESS; s:CARDINAL); PROCEDURE _deallocate(p:ADDRESS; s:CARDINAL); PROCEDURE HALT; PROCEDURE _wrint(i:LONGINT;w:INTEGER); PROCEDURE _wrbool(b:BOOLEAN;w:INTEGER); PROCEDURE _wrchar(c:CHAR;w:INTEGER); PROCEDURE _wrastr(size, low, high: CARDINAL; s: ARRAY OF CHAR;w:INTEGER); PROCEDURE _wrreal(r:LONGREAL;w:INTEGER;d:INTEGER); PROCEDURE _wrcstr(l:INTEGER; s: ADDRESS; w:INTEGER); PROCEDURE _wrln; PROCEDURE _page; PROCEDURE _eoln():BOOLEAN; PROCEDURE _eof():BOOLEAN; PROCEDURE _f_wrint(VAR f:filetype;i:LONGINT;w:INTEGER); PROCEDURE _f_wrbool(VAR f:filetype;b:BOOLEAN;w:INTEGER); PROCEDURE _f_wrchar(VAR f:filetype;c:CHAR;w:INTEGER); PROCEDURE _f_wrastr(VAR f:filetype;size, low, high: CARDINAL; s: ARRAY OF CHAR;w:INTEGER); PROCEDURE _f_wrcstr(VAR f:filetype;l:INTEGER;s: ADDRESS;w:INTEGER); PROCEDURE _f_wrbin(VAR f:filetype;v: ADDRESS); PROCEDURE _f_wrreal(VAR f:filetype;r:LONGREAL;w:INTEGER;d:INTEGER); PROCEDURE _f_wrln(VAR f:filetype); PROCEDURE _f_page(VAR f:filetype); PROCEDURE _f_eoln(VAR f:filetype):BOOLEAN; PROCEDURE _f_eof(VAR f:filetype):BOOLEAN; PROCEDURE _rdint(VAR i:LONGINT); PROCEDURE _rdchar(VAR c:CHAR); PROCEDURE _rdbool(VAR b:BOOLEAN); PROCEDURE _rdstr(size: BYTE; VAR s:maxstring;len:INTEGER); PROCEDURE _rdreal(VAR r:LONGREAL); PROCEDURE _rdln; PROCEDURE _f_rdint(VAR f:filetype;VAR i:LONGINT); PROCEDURE _f_rdchar(VAR f:filetype;VAR c:CHAR); PROCEDURE _f_rdbool(VAR f:filetype;VAR b:BOOLEAN;w:INTEGER); PROCEDURE _f_rdstr(VAR f:filetype;size: BYTE; VAR s:maxstring;len: INTEGER); PROCEDURE _f_rdbin(VAR f:filetype;v: ADDRESS); PROCEDURE _f_rdreal(VAR f:filetype;VAR r:LONGREAL); PROCEDURE _f_rdln(VAR f:filetype); PROCEDURE _rewrite(VAR f:filetype;rs:CARDINAL; IsText: BOOLEAN); PROCEDURE _append(VAR f:filetype;rs:CARDINAL; IsText: BOOLEAN); PROCEDURE _reset(VAR f:filetype;rs:CARDINAL; IsText: BOOLEAN); PROCEDURE assign(VAR f:filetype; size: BYTE; name: namestring); PROCEDURE put(VAR f:filetype); PROCEDURE get(VAR f:filetype); PROCEDURE close(VAR f:filetype); (* I/O extensions *) PROCEDURE FilePos(VAR f: filetype): LONGINT; PROCEDURE FileSize(VAR f: filetype): LONGINT; PROCEDURE Seek(VAR f: filetype; pos: LONGINT); PROCEDURE Flush(VAR f: filetype); PROCEDURE IOresult(): CARDINAL; PROCEDURE Rename(VAR f: filetype; size: BYTE; newname: ARRAY OF CHAR ); PROCEDURE Truncate(VAR f: filetype); PROCEDURE Exists(VAR f: filetype): BOOLEAN; PROCEDURE Erase(VAR f: filetype); TYPE DateTime = RECORD Year, Month, Day, Hour, Min, Sec: CARDINAL; END; PROCEDURE PackTime(VAR DT: DateTime; VAR Time: LONGINT); PROCEDURE UnpackTime(Time: LONGINT; VAR DT: DateTime); PROCEDURE GetFTime(f: ADDRESS; VAR Time: LONGINT); PROCEDURE SetFTime(f: ADDRESS; Time: LONGINT); PROCEDURE GetFAttr(f: ADDRESS; VAR Attr: CARDINAL); PROCEDURE SetFAttr(f: ADDRESS; Attr: CARDINAL); PROCEDURE SetIOR(code: CARDINAL); (******************) PROCEDURE _strcompare(s1,s2: ADDRESS):cmpres; PROCEDURE _bindfile(VAR f:filetype;n:CARDINAL); (*# save *) (*# call(seg_name=>null) *) PROCEDURE sin(r:LONGREAL):LONGREAL; PROCEDURE cos(r:LONGREAL):LONGREAL; PROCEDURE exp(r:LONGREAL):LONGREAL; PROCEDURE log10(r:LONGREAL):LONGREAL; PROCEDURE pow(x, y:LONGREAL):LONGREAL; PROCEDURE ln(r:LONGREAL):LONGREAL; PROCEDURE sqrt(r:LONGREAL):LONGREAL; PROCEDURE arctan(r:LONGREAL):LONGREAL; PROCEDURE frac(r:LONGREAL):LONGREAL; PROCEDURE sqr(r:LONGREAL):LONGREAL; (* Math Extensions *) PROCEDURE arccos(x: LONGREAL): LONGREAL; PROCEDURE arcsin(x: LONGREAL): LONGREAL; PROCEDURE arctan2(x: LONGREAL; y: LONGREAL): LONGREAL; PROCEDURE cosh(x: LONGREAL): LONGREAL; PROCEDURE sinh(x: LONGREAL): LONGREAL; PROCEDURE tanh(x: LONGREAL): LONGREAL; PROCEDURE tan(x: LONGREAL): LONGREAL; PROCEDURE frexp(x: LONGREAL; VAR expo: INTEGER): LONGREAL; PROCEDURE hypot(x, y: LONGREAL): LONGREAL; (*# restore *) PROCEDURE randomize; PROCEDURE random(range: CARDINAL): CARDINAL; PROCEDURE FreeMem(VAR p: ADDRESS; size: CARDINAL); PROCEDURE GetMem(VAR p: ADDRESS; size: CARDINAL); PROCEDURE MaxAvail(): LONGINT; PROCEDURE MemAvail(): LONGINT; PROCEDURE FillChar(x: ADDRESS; count: CARDINAL; ch: BYTE); PROCEDURE Move(source, dest: ADDRESS; count: CARDINAL); PROCEDURE Compare(Source: ADDRESS; Dest: ADDRESS; Len: CARDINAL) : CARDINAL; PROCEDURE ScanR(Dest: ADDRESS; Count: CARDINAL; Value: SHORTCARD) : CARDINAL; PROCEDURE ScanL(Dest: ADDRESS; Count: CARDINAL; Value: SHORTCARD) : CARDINAL; PROCEDURE ScanNeR(Dest: ADDRESS; Count: CARDINAL; Value: SHORTCARD) : CARDINAL; PROCEDURE ScanNeL(Dest: ADDRESS; Count: CARDINAL; Value: SHORTCARD) : CARDINAL; CONST (*%T _fptr *) Ret = 0CBH; (*%E *) (*%F _fptr *) Ret = 0C3H; (*%E *) TYPE A7 = ARRAY [0..6] OF SHORTCARD; A5 = ARRAY [0..4] OF SHORTCARD; (*# save *) (*%F _fptr *) (*# call(reg_param=>(si,di,cx),reg_saved=>(ds,st1,st2), inline=>on) *) INLINE PROCEDURE FastMove(source, dest: ADDRESS; num: CARDINAL)=A5(1EH,07H,0F3H,0A4H,Ret); (*%E *) (*%T _fptr *) (*# call(reg_param=>(si,dx,es,di,cx),reg_saved=>(ds,st1,st2), inline=>on) *) INLINE PROCEDURE FastMove(source, dest: ADDRESS; num: CARDINAL)=A7(1EH,8EH,0DAH,0F3H,0A4H,1FH,Ret); (*%E *) (*# restore *) PROCEDURE IntToStr(V: LONGINT; size: BYTE; VAR S: convstring; Base: CARDINAL; VAR OK: BOOLEAN); PROCEDURE StrToInt(size: BYTE; VAR S: ARRAY OF CHAR; Base: CARDINAL; VAR OK: BOOLEAN) : LONGINT; PROCEDURE StrToReal(size: BYTE; VAR S: ARRAY OF CHAR; VAR OK: BOOLEAN) : LONGREAL; PROCEDURE RealToStr(RN: LONGREAL; Digits: INTEGER; VAR Width: INTEGER; size: BYTE; VAR S: ARRAY OF CHAR; VAR OK: BOOLEAN); PROCEDURE Caps(size: BYTE; VAR s1: ARRAY OF CHAR); PROCEDURE CharPos(size: BYTE; Source: ARRAY OF CHAR; c: CHAR) : CARDINAL; PROCEDURE Delete(size: BYTE; VAR s: ARRAY OF CHAR; index: CARDINAL; count: CARDINAL); PROCEDURE Insert(size: BYTE; source: ARRAY OF CHAR; size: BYTE; VAR s: ARRAY OF CHAR; index: CARDINAL); PROCEDURE Lows(size: BYTE; VAR s1: ARRAY OF CHAR); PROCEDURE Match(size: BYTE; Source: ARRAY OF CHAR; Psize: BYTE; Pattern: ARRAY OF CHAR) : BOOLEAN; PROCEDURE NextPos(size: BYTE; substr: ARRAY OF CHAR; size: BYTE; s: ARRAY OF CHAR; place: SHORTCARD): SHORTCARD; PROCEDURE Pos(size: BYTE; substr: ARRAY OF CHAR; size: BYTE; s: ARRAY OF CHAR): SHORTCARD; PROCEDURE RCharPos(size: BYTE; Source: ARRAY OF CHAR; c: CHAR) : CARDINAL; END PasLib.