| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- (* 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.
|