(* Release 3.10 *) (*-------------------------------------------------------------------------* * * * CDOS.DEF - Modula-2 interface to DOS.H * * * * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. * * All Rights Reserved * * * *--------------------------------------------------------------------------*) (*# project("#set tsc='on'") *) (*# call(o_a_size=>off, o_a_copy=>off, c_conv=>on, result_optional=>on) *) (*# module(implementation=>off, init_code=>off) *) (*# name(prefix=>c) *) DEFINITION MODULE cdos; CONST FA_NORMAL = 00H; (* normal file *) FA_RDONLY = 01H; (* Read only attribute *) FA_HIDDEN = 02H; (* Hidden file *) FA_SYSTEM = 04H; (* System file *) FA_LABEL = 08H; (* Volume label *) FA_DIREC = 10H; (* Directory *) FA_ARCH = 20H; (* Archive *) _HARDERR_IGNORE = 0; (* Ignore the error *) _HARDERR_RETRY = 1; (* Retry the operation *) _HARDERR_ABORT = 2; (* Abort program issuing Int 23 *) _HARDERR_FAIL = 3; (* Fail the system call in progres*) _A_NORMAL = 00H; (* normal file - no r/w restricted*) _A_RDONLY = 01H; (* Read only attribute *) _A_HIDDEN = 02H; (* Hidden file *) _A_SYSTEM = 04H; (* System file *) _A_VOLID = 08H; (* Volume ID file *) _A_SUBDIR = 10H; (* subdirectory *) _A_ARCH = 20H; (* Archive *) TYPE WORDREGS = RECORD ax,bx,cx,dx,si,di,cflag,flags:CARDINAL; END; BYTEREGS = RECORD al,ah,bl,bh,cl,ch,dl,dh:BYTE; END; REGS = RECORD CASE : BOOLEAN OF TRUE : x : WORDREGS; | FALSE : h : BYTEREGS; | END; END; SREGS = RECORD es,cs,ss,ds:CARDINAL; END; REGPACK = RECORD r_ax,r_bx,r_cx,r_dx : CARDINAL; r_bp,r_si,r_di,r_ds,r_es,r_flags : CARDINAL; END; find_t = RECORD reserved : ARRAY[0..20] OF BYTE; attrib : BYTE; wr_ftime : CARDINAL; wr_fdate : CARDINAL; size : LONGCARD; name : ARRAY[0..12] OF CHAR; END; country_t = RECORD co_date : CARDINAL; co_curr : ARRAY[0..4] OF CHAR; co_thsep : ARRAY[0..1] OF CHAR; co_desep : ARRAY[0..1] OF CHAR; co_dtsep : ARRAY[0..1] OF CHAR; co_tmsep : ARRAY[0..1] OF CHAR; co_currstyle:SHORTCARD; co_digits : SHORTCARD; co_time : SHORTCARD; co_case : LONGCARD; co_dasep : ARRAY[0..1] OF CHAR; co_fill : ARRAY[0..9] OF CHAR; END; dosdate_t = RECORD day : SHORTCARD; (* 1-31 *) month : SHORTCARD; (* 1-12 *) year : CARDINAL; (* 1980-2099 *) dayofweek : SHORTCARD; (* 0-6, 0=Sun *) END; dostime_t = RECORD hour : SHORTCARD; (* 0 - 23 *) minute : SHORTCARD; (* 0 - 59 *) second : SHORTCARD; (* 0 - 59 *) hsecond : SHORTCARD; (* 0 - 99 *) END; diskfree_t = RECORD total_clusters : CARDINAL; avail_clusters : CARDINAL; sectors_per_cluster : CARDINAL; bytes_per_sector : CARDINAL; END; ffblk = RECORD ff_reserved: ARRAY[0..20] OF BYTE; ff_attrib : BYTE; ff_ftime : CARDINAL; ff_fdate : CARDINAL; ff_fsize : LONGCARD; ff_name : ARRAY[0..12] OF CHAR; END; doserror = RECORD exterror : CARDINAL; class : SHORTCARD; action : SHORTCARD; locus : SHORTCARD; END; fcb = RECORD fcb_drive : SHORTCARD; (* 0 = default, 1=A, 2=B *) fcb_name : ARRAY[0..7] OF CHAR; (* file name *) fcb_ext : ARRAY[0..2] OF CHAR; (* file extension *) fcb_curblk : CARDINAL; (* current block number *) fcb_recsize: CARDINAL; (* logical rec size bytes*) fcb_filsize: LONGCARD; (* file size in bytes *) fcb_date : CARDINAL; (* date file last written*) fcb_resv : ARRAY[0..9] OF CHAR; (* reserved for DOS *) fcb_currec : SHORTCARD; (* current rec in block *) fcb_random : LONGCARD; (* random record number *) END; xfcb = RECORD xfcb_flag : SHORTCARD; (* 0FFH to indicate xfcb *) xfcb_resv : ARRAY[0..4] OF CHAR; (* reserved for DOS *) xfcb_attr : SHORTCARD; (* search attribute *) xfcb_fcb : fcb; (* the standard fcb *) END; dfree = RECORD df_avail : CARDINAL; df_total : CARDINAL; df_bsec : CARDINAL; df_sclus : CARDINAL; END; fatinfo = RECORD fi_sclus : SHORTCARD; fi_fatid : SHORTCARD; fi_nclus : CARDINAL; fi_bysec : CARDINAL; END; devhdr = RECORD dh_next : LONGCARD; (* Next device pointer *) dh_attr : CARDINAL; (* Attributes *) dh_strat : CARDINAL; (* Driver strategy routine*) dh_inter : CARDINAL; (* Driver interrupt routine*) dh_name : ARRAY[0..7] OF CHAR; (* Device name *) END; date = RECORD da_year : CARDINAL; da_day : SHORTCARD; da_mon : SHORTCARD; END; time = RECORD ti_hour : SHORTCARD; ti_min : SHORTCARD; ti_sec : SHORTCARD; ti_hund : SHORTCARD; END; CtrlBrkHandler = PROCEDURE():CARDINAL; PROCEDURE bdos(dosfunc,dosdx,dosal:CARDINAL):CARDINAL; PROCEDURE bdosptr(dosfunc:CARDINAL;dsdx:ADDRESS;dosal:CARDINAL):INTEGER; PROCEDURE int86(intno:CARDINAL;VAR inregs,outregs:REGS):CARDINAL; PROCEDURE int86x(intno:CARDINAL;VAR inregs,outregs:REGS;VAR segregs:SREGS):CARDINAL; PROCEDURE intdos(VAR inregs,outregs:REGS):CARDINAL; PROCEDURE intdosx(VAR inregs,outregs:REGS;segregs:SREGS):CARDINAL; PROCEDURE _dos_allocmem(size:CARDINAL;seg:ADDRESS):CARDINAL; PROCEDURE _dos_close(handle:CARDINAL):CARDINAL; PROCEDURE _dos_creat(path:ARRAY OF CHAR;attrib,handle:CARDINAL):CARDINAL; PROCEDURE _dos_creatnew(path:ARRAY OF CHAR;attrib,handle:CARDINAL):CARDINAL; PROCEDURE _dos_findfirst(path:ARRAY OF CHAR;attrib:CARDINAL;VAR buffer:ffblk):CARDINAL; PROCEDURE _dos_findnext(VAR buffer:ffblk):CARDINAL; PROCEDURE _dos_freemem(seg:CARDINAL):CARDINAL; PROCEDURE _dos_getdate(VAR buffer:dosdate_t); PROCEDURE _dos_getdrive(VAR drive:CARDINAL); PROCEDURE _dos_getdiskfree(drive:CARDINAL;VAR buffer:diskfree_t):CARDINAL; PROCEDURE _dos_getfileattr(path:ARRAY OF CHAR;VAR attr:CARDINAL):CARDINAL; PROCEDURE _dos_getftime(handle:CARDINAL;VAR date,time:BITSET):CARDINAL; PROCEDURE _dos_gettime(VAR buffer:dostime_t); PROCEDURE _dos_keep(retcode,paras:CARDINAL); PROCEDURE _dos_open(path:ARRAY OF CHAR;mode:CARDINAL;VAR handle:CARDINAL):CARDINAL; PROCEDURE _dos_setblock(size,seg:CARDINAL;VAR maxsize:CARDINAL):CARDINAL; PROCEDURE _dos_setdate(VAR buffer:dosdate_t):CARDINAL; PROCEDURE _dos_setdrive(drive:CARDINAL;VAR maxdrives:CARDINAL); PROCEDURE _dos_setfileattr(path:ARRAY OF CHAR;attr:CARDINAL):CARDINAL; PROCEDURE _dos_setftime(handle,date,time:CARDINAL):CARDINAL; PROCEDURE _dos_settime(VAR buffer:dostime_t):CARDINAL; PROCEDURE findfirst(path:ARRAY OF CHAR;VAR buffer:ffblk;attrib:CARDINAL):INTEGER; PROCEDURE findnext(VAR buffer:ffblk):INTEGER; (* **** These procedures have some fanci-danci call pragma associated with them *) PROCEDURE _chain_intr(handler:PROC); PROCEDURE _dos_getvect(intnum:CARDINAL):ADDRESS; PROCEDURE _dos_setvect(intnum:CARDINAL;handler:PROC); PROCEDURE _dos_read(handle:CARDINAL;buffer:ADDRESS;num:CARDINAL;VAR numread:CARDINAL):CARDINAL; PROCEDURE _dos_write(handle:CARDINAL;buffer:ADDRESS;num:CARDINAL;VAR numwrit:CARDINAL):CARDINAL; PROCEDURE _harderr(handler:PROC); PROCEDURE _hardresume(code:CARDINAL); PROCEDURE _hardretn(code:CARDINAL); PROCEDURE dosexterr(VAR errbuf:doserror):CARDINAL; PROCEDURE segread(VAR segbuf:SREGS); PROCEDURE peek(segment,offset:CARDINAL):INTEGER; PROCEDURE peekb(segment,offset:CARDINAL):BYTE; PROCEDURE poke(segment,offset:CARDINAL;value:INTEGER); PROCEDURE pokeb(segment,offset:CARDINAL;value:BYTE); PROCEDURE inportb(port:CARDINAL):BYTE; PROCEDURE outportb(port:CARDINAL;value:BYTE); PROCEDURE inportw(port:CARDINAL):WORD; PROCEDURE outportw(port:CARDINAL;value:WORD); PROCEDURE geninterrupt(interruptnum:CARDINAL); PROCEDURE _disable; PROCEDURE _enable; PROCEDURE absread(drive,nsects,lsect:CARDINAL;VAR buffer:ADDRESS):INTEGER; PROCEDURE abswrite(drive,nsects,lsect:CARDINAL;VAR buffer:ADDRESS):INTEGER; PROCEDURE allocmem(size:CARDINAL;VAR segp:CARDINAL):INTEGER; PROCEDURE country(code:CARDINAL;VAR cp:country_t):country_t; PROCEDURE ctrlbrk(handler:CtrlBrkHandler); PROCEDURE freemem(segx:CARDINAL):INTEGER; PROCEDURE getcbrk():INTEGER; PROCEDURE getdate(VAR dptr:date); PROCEDURE getdfree(drive:SHORTCARD;VAR dtable:dfree); PROCEDURE getfat(drive:SHORTCARD;VAR dtable:fatinfo); PROCEDURE getfatd(VAR dtable:fatinfo); PROCEDURE getpsp():CARDINAL; PROCEDURE gettime(VAR tptr:time); PROCEDURE getverify():INTEGER; PROCEDURE intr(intno:CARDINAL;VAR preg:REGPACK); PROCEDURE keep(status:SHORTCARD;size:CARDINAL); PROCEDURE nosound; PROCEDURE parsefnm(VAR cmdline:ARRAY OF CHAR;VAR FCB:fcb;opt:CARDINAL):ADDRESS; PROCEDURE randbrd(VAR FCB:fcb;rcnt:CARDINAL):CARDINAL; PROCEDURE randbwr(VAR FCB:fcb;rcnt:CARDINAL):CARDINAL; PROCEDURE setblock(segx,newsize:CARDINAL):INTEGER; PROCEDURE setcbrk(val:CARDINAL):INTEGER; PROCEDURE setdate(VAR dptr:date); PROCEDURE settime(VAR tptr:time); PROCEDURE setverify(value:INTEGER); PROCEDURE sleep(secs:CARDINAL); PROCEDURE sound(freq:CARDINAL); PROCEDURE getdta():ADDRESS; PROCEDURE setvect(intnum:CARDINAL;isr:PROC); PROCEDURE getvect(intnum:CARDINAL):ADDRESS; END cdos.