CDOS.DEF 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * CDOS.DEF - Modula-2 interface to DOS.H *
  5. * *
  6. * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. (*# project("#set tsc='on'") *)
  11. (*# call(o_a_size=>off, o_a_copy=>off, c_conv=>on, result_optional=>on) *)
  12. (*# module(implementation=>off, init_code=>off) *)
  13. (*# name(prefix=>c) *)
  14. DEFINITION MODULE cdos;
  15. CONST
  16. FA_NORMAL = 00H; (* normal file *)
  17. FA_RDONLY = 01H; (* Read only attribute *)
  18. FA_HIDDEN = 02H; (* Hidden file *)
  19. FA_SYSTEM = 04H; (* System file *)
  20. FA_LABEL = 08H; (* Volume label *)
  21. FA_DIREC = 10H; (* Directory *)
  22. FA_ARCH = 20H; (* Archive *)
  23. _HARDERR_IGNORE = 0; (* Ignore the error *)
  24. _HARDERR_RETRY = 1; (* Retry the operation *)
  25. _HARDERR_ABORT = 2; (* Abort program issuing Int 23 *)
  26. _HARDERR_FAIL = 3; (* Fail the system call in progres*)
  27. _A_NORMAL = 00H; (* normal file - no r/w restricted*)
  28. _A_RDONLY = 01H; (* Read only attribute *)
  29. _A_HIDDEN = 02H; (* Hidden file *)
  30. _A_SYSTEM = 04H; (* System file *)
  31. _A_VOLID = 08H; (* Volume ID file *)
  32. _A_SUBDIR = 10H; (* subdirectory *)
  33. _A_ARCH = 20H; (* Archive *)
  34. TYPE
  35. WORDREGS = RECORD
  36. ax,bx,cx,dx,si,di,cflag,flags:CARDINAL;
  37. END;
  38. BYTEREGS = RECORD
  39. al,ah,bl,bh,cl,ch,dl,dh:BYTE;
  40. END;
  41. REGS = RECORD
  42. CASE : BOOLEAN OF
  43. TRUE : x : WORDREGS; |
  44. FALSE : h : BYTEREGS; |
  45. END;
  46. END;
  47. SREGS = RECORD
  48. es,cs,ss,ds:CARDINAL;
  49. END;
  50. REGPACK = RECORD
  51. r_ax,r_bx,r_cx,r_dx : CARDINAL;
  52. r_bp,r_si,r_di,r_ds,r_es,r_flags : CARDINAL;
  53. END;
  54. find_t = RECORD
  55. reserved : ARRAY[0..20] OF BYTE;
  56. attrib : BYTE;
  57. wr_ftime : CARDINAL;
  58. wr_fdate : CARDINAL;
  59. size : LONGCARD;
  60. name : ARRAY[0..12] OF CHAR;
  61. END;
  62. country_t = RECORD
  63. co_date : CARDINAL;
  64. co_curr : ARRAY[0..4] OF CHAR;
  65. co_thsep : ARRAY[0..1] OF CHAR;
  66. co_desep : ARRAY[0..1] OF CHAR;
  67. co_dtsep : ARRAY[0..1] OF CHAR;
  68. co_tmsep : ARRAY[0..1] OF CHAR;
  69. co_currstyle:SHORTCARD;
  70. co_digits : SHORTCARD;
  71. co_time : SHORTCARD;
  72. co_case : LONGCARD;
  73. co_dasep : ARRAY[0..1] OF CHAR;
  74. co_fill : ARRAY[0..9] OF CHAR;
  75. END;
  76. dosdate_t = RECORD
  77. day : SHORTCARD; (* 1-31 *)
  78. month : SHORTCARD; (* 1-12 *)
  79. year : CARDINAL; (* 1980-2099 *)
  80. dayofweek : SHORTCARD; (* 0-6, 0=Sun *)
  81. END;
  82. dostime_t = RECORD
  83. hour : SHORTCARD; (* 0 - 23 *)
  84. minute : SHORTCARD; (* 0 - 59 *)
  85. second : SHORTCARD; (* 0 - 59 *)
  86. hsecond : SHORTCARD; (* 0 - 99 *)
  87. END;
  88. diskfree_t = RECORD
  89. total_clusters : CARDINAL;
  90. avail_clusters : CARDINAL;
  91. sectors_per_cluster : CARDINAL;
  92. bytes_per_sector : CARDINAL;
  93. END;
  94. ffblk = RECORD
  95. ff_reserved: ARRAY[0..20] OF BYTE;
  96. ff_attrib : BYTE;
  97. ff_ftime : CARDINAL;
  98. ff_fdate : CARDINAL;
  99. ff_fsize : LONGCARD;
  100. ff_name : ARRAY[0..12] OF CHAR;
  101. END;
  102. doserror = RECORD
  103. exterror : CARDINAL;
  104. class : SHORTCARD;
  105. action : SHORTCARD;
  106. locus : SHORTCARD;
  107. END;
  108. fcb = RECORD
  109. fcb_drive : SHORTCARD; (* 0 = default, 1=A, 2=B *)
  110. fcb_name : ARRAY[0..7] OF CHAR; (* file name *)
  111. fcb_ext : ARRAY[0..2] OF CHAR; (* file extension *)
  112. fcb_curblk : CARDINAL; (* current block number *)
  113. fcb_recsize: CARDINAL; (* logical rec size bytes*)
  114. fcb_filsize: LONGCARD; (* file size in bytes *)
  115. fcb_date : CARDINAL; (* date file last written*)
  116. fcb_resv : ARRAY[0..9] OF CHAR; (* reserved for DOS *)
  117. fcb_currec : SHORTCARD; (* current rec in block *)
  118. fcb_random : LONGCARD; (* random record number *)
  119. END;
  120. xfcb = RECORD
  121. xfcb_flag : SHORTCARD; (* 0FFH to indicate xfcb *)
  122. xfcb_resv : ARRAY[0..4] OF CHAR; (* reserved for DOS *)
  123. xfcb_attr : SHORTCARD; (* search attribute *)
  124. xfcb_fcb : fcb; (* the standard fcb *)
  125. END;
  126. dfree = RECORD
  127. df_avail : CARDINAL;
  128. df_total : CARDINAL;
  129. df_bsec : CARDINAL;
  130. df_sclus : CARDINAL;
  131. END;
  132. fatinfo = RECORD
  133. fi_sclus : SHORTCARD;
  134. fi_fatid : SHORTCARD;
  135. fi_nclus : CARDINAL;
  136. fi_bysec : CARDINAL;
  137. END;
  138. devhdr = RECORD
  139. dh_next : LONGCARD; (* Next device pointer *)
  140. dh_attr : CARDINAL; (* Attributes *)
  141. dh_strat : CARDINAL; (* Driver strategy routine*)
  142. dh_inter : CARDINAL; (* Driver interrupt routine*)
  143. dh_name : ARRAY[0..7] OF CHAR; (* Device name *)
  144. END;
  145. date = RECORD
  146. da_year : CARDINAL;
  147. da_day : SHORTCARD;
  148. da_mon : SHORTCARD;
  149. END;
  150. time = RECORD
  151. ti_hour : SHORTCARD;
  152. ti_min : SHORTCARD;
  153. ti_sec : SHORTCARD;
  154. ti_hund : SHORTCARD;
  155. END;
  156. CtrlBrkHandler = PROCEDURE():CARDINAL;
  157. PROCEDURE bdos(dosfunc,dosdx,dosal:CARDINAL):CARDINAL;
  158. PROCEDURE bdosptr(dosfunc:CARDINAL;dsdx:ADDRESS;dosal:CARDINAL):INTEGER;
  159. PROCEDURE int86(intno:CARDINAL;VAR inregs,outregs:REGS):CARDINAL;
  160. PROCEDURE int86x(intno:CARDINAL;VAR inregs,outregs:REGS;VAR segregs:SREGS):CARDINAL;
  161. PROCEDURE intdos(VAR inregs,outregs:REGS):CARDINAL;
  162. PROCEDURE intdosx(VAR inregs,outregs:REGS;segregs:SREGS):CARDINAL;
  163. PROCEDURE _dos_allocmem(size:CARDINAL;seg:ADDRESS):CARDINAL;
  164. PROCEDURE _dos_close(handle:CARDINAL):CARDINAL;
  165. PROCEDURE _dos_creat(path:ARRAY OF CHAR;attrib,handle:CARDINAL):CARDINAL;
  166. PROCEDURE _dos_creatnew(path:ARRAY OF CHAR;attrib,handle:CARDINAL):CARDINAL;
  167. PROCEDURE _dos_findfirst(path:ARRAY OF CHAR;attrib:CARDINAL;VAR buffer:ffblk):CARDINAL;
  168. PROCEDURE _dos_findnext(VAR buffer:ffblk):CARDINAL;
  169. PROCEDURE _dos_freemem(seg:CARDINAL):CARDINAL;
  170. PROCEDURE _dos_getdate(VAR buffer:dosdate_t);
  171. PROCEDURE _dos_getdrive(VAR drive:CARDINAL);
  172. PROCEDURE _dos_getdiskfree(drive:CARDINAL;VAR buffer:diskfree_t):CARDINAL;
  173. PROCEDURE _dos_getfileattr(path:ARRAY OF CHAR;VAR attr:CARDINAL):CARDINAL;
  174. PROCEDURE _dos_getftime(handle:CARDINAL;VAR date,time:BITSET):CARDINAL;
  175. PROCEDURE _dos_gettime(VAR buffer:dostime_t);
  176. PROCEDURE _dos_keep(retcode,paras:CARDINAL);
  177. PROCEDURE _dos_open(path:ARRAY OF CHAR;mode:CARDINAL;VAR handle:CARDINAL):CARDINAL;
  178. PROCEDURE _dos_setblock(size,seg:CARDINAL;VAR maxsize:CARDINAL):CARDINAL;
  179. PROCEDURE _dos_setdate(VAR buffer:dosdate_t):CARDINAL;
  180. PROCEDURE _dos_setdrive(drive:CARDINAL;VAR maxdrives:CARDINAL);
  181. PROCEDURE _dos_setfileattr(path:ARRAY OF CHAR;attr:CARDINAL):CARDINAL;
  182. PROCEDURE _dos_setftime(handle,date,time:CARDINAL):CARDINAL;
  183. PROCEDURE _dos_settime(VAR buffer:dostime_t):CARDINAL;
  184. PROCEDURE findfirst(path:ARRAY OF CHAR;VAR buffer:ffblk;attrib:CARDINAL):INTEGER;
  185. PROCEDURE findnext(VAR buffer:ffblk):INTEGER;
  186. (* **** These procedures have some fanci-danci call pragma associated with them *)
  187. PROCEDURE _chain_intr(handler:PROC);
  188. PROCEDURE _dos_getvect(intnum:CARDINAL):ADDRESS;
  189. PROCEDURE _dos_setvect(intnum:CARDINAL;handler:PROC);
  190. PROCEDURE _dos_read(handle:CARDINAL;buffer:ADDRESS;num:CARDINAL;VAR numread:CARDINAL):CARDINAL;
  191. PROCEDURE _dos_write(handle:CARDINAL;buffer:ADDRESS;num:CARDINAL;VAR numwrit:CARDINAL):CARDINAL;
  192. PROCEDURE _harderr(handler:PROC);
  193. PROCEDURE _hardresume(code:CARDINAL);
  194. PROCEDURE _hardretn(code:CARDINAL);
  195. PROCEDURE dosexterr(VAR errbuf:doserror):CARDINAL;
  196. PROCEDURE segread(VAR segbuf:SREGS);
  197. PROCEDURE peek(segment,offset:CARDINAL):INTEGER;
  198. PROCEDURE peekb(segment,offset:CARDINAL):BYTE;
  199. PROCEDURE poke(segment,offset:CARDINAL;value:INTEGER);
  200. PROCEDURE pokeb(segment,offset:CARDINAL;value:BYTE);
  201. PROCEDURE inportb(port:CARDINAL):BYTE;
  202. PROCEDURE outportb(port:CARDINAL;value:BYTE);
  203. PROCEDURE inportw(port:CARDINAL):WORD;
  204. PROCEDURE outportw(port:CARDINAL;value:WORD);
  205. PROCEDURE geninterrupt(interruptnum:CARDINAL);
  206. PROCEDURE _disable;
  207. PROCEDURE _enable;
  208. PROCEDURE absread(drive,nsects,lsect:CARDINAL;VAR buffer:ADDRESS):INTEGER;
  209. PROCEDURE abswrite(drive,nsects,lsect:CARDINAL;VAR buffer:ADDRESS):INTEGER;
  210. PROCEDURE allocmem(size:CARDINAL;VAR segp:CARDINAL):INTEGER;
  211. PROCEDURE country(code:CARDINAL;VAR cp:country_t):country_t;
  212. PROCEDURE ctrlbrk(handler:CtrlBrkHandler);
  213. PROCEDURE freemem(segx:CARDINAL):INTEGER;
  214. PROCEDURE getcbrk():INTEGER;
  215. PROCEDURE getdate(VAR dptr:date);
  216. PROCEDURE getdfree(drive:SHORTCARD;VAR dtable:dfree);
  217. PROCEDURE getfat(drive:SHORTCARD;VAR dtable:fatinfo);
  218. PROCEDURE getfatd(VAR dtable:fatinfo);
  219. PROCEDURE getpsp():CARDINAL;
  220. PROCEDURE gettime(VAR tptr:time);
  221. PROCEDURE getverify():INTEGER;
  222. PROCEDURE intr(intno:CARDINAL;VAR preg:REGPACK);
  223. PROCEDURE keep(status:SHORTCARD;size:CARDINAL);
  224. PROCEDURE nosound;
  225. PROCEDURE parsefnm(VAR cmdline:ARRAY OF CHAR;VAR FCB:fcb;opt:CARDINAL):ADDRESS;
  226. PROCEDURE randbrd(VAR FCB:fcb;rcnt:CARDINAL):CARDINAL;
  227. PROCEDURE randbwr(VAR FCB:fcb;rcnt:CARDINAL):CARDINAL;
  228. PROCEDURE setblock(segx,newsize:CARDINAL):INTEGER;
  229. PROCEDURE setcbrk(val:CARDINAL):INTEGER;
  230. PROCEDURE setdate(VAR dptr:date);
  231. PROCEDURE settime(VAR tptr:time);
  232. PROCEDURE setverify(value:INTEGER);
  233. PROCEDURE sleep(secs:CARDINAL);
  234. PROCEDURE sound(freq:CARDINAL);
  235. PROCEDURE getdta():ADDRESS;
  236. PROCEDURE setvect(intnum:CARDINAL;isr:PROC);
  237. PROCEDURE getvect(intnum:CARDINAL):ADDRESS;
  238. END cdos.