CDOS.LST 15 KB

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