home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c221 / 1.ddi / INC / DOS.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-19  |  8.2 KB  |  269 lines

  1. /*
  2.  *   dos.h -- extra-ANSI 
  3.  *
  4.  *   DOS-related functions and services.
  5.  *
  6.  *           Copyright (c) 1990-1992, MetaWare Incorporated
  7.  */
  8.  
  9. #ifndef _DOS_H
  10. #define _DOS_H
  11. #pragma push_align_members(64);
  12.  
  13. #ifdef __CPLUSPLUS__
  14. extern "C" {
  15. #endif
  16.  
  17. #define _A_NORMAL     0
  18. #define _A_RDONLY     1
  19. #define _A_HIDDEN     2
  20. #define _A_SYSTEM     4
  21. #define _A_VOLID     8
  22. #define _A_SUBDIR     16
  23. #define _A_ARCH     32
  24.  
  25. #define _FP_SEG(farptr) (*(unsigned short *)((unsigned *)&(farptr) + 1))
  26. #define _FP_OFF(farptr) (*((unsigned *)&(farptr)))
  27.  
  28. extern unsigned int _osversion;
  29.  
  30. extern int _bdos(int __fnumber, unsigned int __dxreg, unsigned int __alreg);
  31. extern void _disable(void );
  32. extern unsigned _dos_allocmem(unsigned __size,unsigned * __segment);
  33. extern unsigned _dos_close(int __handle);
  34. extern unsigned _dos_creat(char * __path,unsigned __attribute,int * __handle);
  35. extern unsigned _dos_creatnew(char * __path,unsigned __attribute,int * __handle);
  36. extern unsigned _dos_freemem(unsigned __segment);
  37. extern void _dos_getdrive(unsigned * __drive);
  38. extern unsigned _dos_getfileattr(char * __path,unsigned * __attributes);
  39. extern unsigned _dos_getftime(int __handle,unsigned * __date,unsigned * __time);
  40. extern void _dos_keep(unsigned __retcode,unsigned __memsize);
  41. extern unsigned _dos_open(char * __path,unsigned __mode,int * __handle);
  42. extern unsigned _dos_setblock(unsigned __size,unsigned __segment,unsigned * __maxsize);
  43. extern void _dos_setdrive(unsigned __newdrive,unsigned * __drives);
  44. extern unsigned _dos_setfileattr(char * __path,unsigned __attributes);
  45. extern unsigned _dos_setftime(int __handle,unsigned __date,unsigned __time);
  46. extern void _enable(void );
  47.  
  48. extern unsigned _dos_read(int __handle,_Far void * __buffer,unsigned __length,unsigned * __bytes);
  49. extern unsigned _dos_write(int __handle,_Far void * __buffer,unsigned __length,unsigned * __bytes);
  50.  
  51. #ifdef _I386
  52. /*  
  53.  * Functions to get and set interrupt handlers under
  54.  * the Phar Lap and Ergo runtime environments.
  55.  * See the Library Reference Manual for details on the use of these functions.
  56.  */
  57.  
  58.     /* Define an interrupt handler type */
  59. #ifndef _INTERRPT
  60. #define _INTERRPT _CC (_INTERRUPT|_CALLING_CONVENTION)
  61. #endif
  62.  
  63.     /* The real mode handler is a 32-bit seg:off address */
  64. typedef long int _real_int_handler_t;
  65.  
  66.     /* Get current protected mode interrupt handler. */
  67.     /* A function that returns a pointer to a function returning void. */
  68. extern _Far _INTERRPT void (* _getpvect (int intno)) ();
  69.  
  70.     /* Get current real mode interrupt handler */
  71. extern  _real_int_handler_t _getrvect (int intno);
  72.  
  73.     /* Set protected-mode interrupt handler */
  74. extern int _setpvect (int intno, _Far _INTERRPT void (*handler) ());
  75.  
  76.     /* Set real-mode interrupt handler */
  77. extern int _setrvect (int intno, _real_int_handler_t rmhandler);
  78.  
  79.     /* Set current real mode and protected mode interrupt handlers. */
  80.     /* Both will point to a protected-mode handler. */
  81. extern int _setrpvectp (int intno, _Far _INTERRPT void (*pmhandler) ());
  82.  
  83. #else
  84. extern _Far void (* _dos_getvect(unsigned __intnumber))();
  85. extern void _dos_setvect(unsigned __intnumber,_Far void (*v)());
  86. #endif
  87.  
  88. #ifndef _REGS_DEFINED
  89. #define _REGS_DEFINED
  90. /*
  91.  * WORDREGS and DWORDREGS have the same size arguments.  The WORDREGS struct 
  92.  * is provided for compatibility with previous source code.
  93.  */
  94. #pragma Off(Align_members)
  95. struct _DWORDREGS {
  96.     unsigned int eax;
  97.     unsigned int ebx;
  98.     unsigned int ecx;
  99.     unsigned int edx;
  100.     unsigned int esi;
  101.     unsigned int edi;
  102.     unsigned int cflag;
  103.     };
  104. #pragma Pop(Align_members)
  105.  
  106. #pragma Off(Align_members)
  107. struct _WORDREGS {
  108.     unsigned int ax;
  109.     unsigned int bx;
  110.     unsigned int cx;
  111.     unsigned int dx;
  112.     unsigned int si;
  113.     unsigned int di;
  114.     unsigned int cflag;
  115.     };
  116. #pragma Pop(Align_members)
  117.  
  118. #pragma Off(Align_members)
  119. struct _BYTEREGS {
  120.     unsigned char al, ah, xax[sizeof(int)-2];
  121.     unsigned char bl, bh, xbx[sizeof(int)-2];
  122.     unsigned char cl, ch, xcx[sizeof(int)-2];
  123.     unsigned char dl, dh, xdx[sizeof(int)-2];
  124.     };
  125. #pragma Pop(Align_members)
  126.  
  127. union _REGS {
  128.     struct _DWORDREGS w;
  129.     struct _WORDREGS  x;
  130.     struct _BYTEREGS  h;
  131.     struct _BYTEREGS  l;
  132.     };
  133.  
  134. #pragma Off(Align_members)
  135. struct _SREGS {
  136.     unsigned short int es;
  137.     unsigned short int cs;
  138.     unsigned short int ss;
  139.     unsigned short int ds;
  140.     };
  141. #pragma Pop(Align_members)
  142.  
  143. #endif /* _REGS_DEFINED */
  144.  
  145. #ifndef _DOSERROR_DEFINED
  146. #define _DOSERROR_DEFINED
  147.  
  148. #pragma Off(Align_members)
  149. struct _DOSERROR {
  150.     short int exterror;
  151. #ifdef __CPLUSPLUS__
  152.     // Can't have a field named "class" in C++
  153.     char Class;
  154. #else
  155.     char class;
  156. #endif
  157.     char action;
  158.     char locus;
  159.     };
  160. #pragma Pop(Align_members)
  161.  
  162. #endif /* _DOSERROR_DEFINED */
  163.  
  164. #ifndef _FIND_T_DEFINED
  165. #define _FIND_T_DEFINED
  166.  
  167. #pragma Off(Align_members)
  168. struct _find_t {
  169.     char reserved[21];
  170.     char attrib;
  171.     unsigned short int wr_time;
  172.     unsigned short int wr_date;
  173.     long int size;
  174.     char name[13];
  175.     };
  176. #pragma Pop(Align_members)
  177.  
  178. #endif /* _FIND_T_DEFINED */
  179.  
  180. #ifndef _DATETIME_T_DEFINED
  181. #define _DATETIME_T_DEFINED
  182.  
  183. #pragma Off(Align_members)
  184. struct _dosdate_t {
  185.     unsigned char day;
  186.     unsigned char month;
  187.     unsigned short int year;
  188.     unsigned char dayofweek;
  189.     };
  190. #pragma Pop(Align_members)
  191.  
  192. #pragma Off(Align_members)
  193. struct _dostime_t {
  194.     unsigned char hour;
  195.     unsigned char minute;
  196.     unsigned char second;
  197.     unsigned char hsecond;
  198.     };
  199. #pragma Pop(Align_members)
  200.  
  201. #endif /* _DATETIME_T_DEFINED */
  202.  
  203. #ifndef _DISKFREE_T_DEFINED
  204. #define _DISKFREE_T_DEFINED
  205.  
  206. #pragma Off(Align_members)
  207. struct _diskfree_t {
  208.     unsigned short total_clusters;
  209.     unsigned short avail_clusters;
  210.     unsigned short sectors_per_cluster;
  211.     unsigned short bytes_per_sector;
  212.     };
  213. #pragma Pop(Align_members)
  214.  
  215. #endif /* _DISKFREE_T_DEFINED */ 
  216.  
  217. extern unsigned _dos_findfirst(char * __path,unsigned __attributes,struct _find_t * __buffer);
  218. extern unsigned _dos_findnext(struct _find_t * __buffer);
  219. extern void _dos_getdate(struct _dosdate_t * __date);
  220. extern unsigned _dos_getdiskfree(unsigned __drive,struct _diskfree_t * __diskinfo);
  221. extern void _dos_gettime(struct _dostime_t * __time);
  222. extern unsigned _dos_setdate(struct _dosdate_t * __date);
  223. extern unsigned _dos_settime(struct _dostime_t * __time);
  224.  
  225. extern int _dosexterr(struct _DOSERROR * __buffer);
  226. extern int _intdos(union _REGS * __before, union _REGS * __after);
  227. extern int _intdosx(union _REGS * __before, union _REGS * __after,struct _SREGS * __segregs);
  228. extern int _int86(int __number,union _REGS * __before, union _REGS * __after);
  229. extern int _int86x(int __number,union _REGS * __before, union _REGS * __after,struct _SREGS * __segregs);
  230. extern void _segread(struct _SREGS * __segregs);
  231.  
  232. #ifdef __HIGHC__
  233.  
  234. #define FP_SEG(farptr) _FP_SEG(farptr)
  235. #define FP_OFF(farptr) _FP_OFF(farptr)
  236. #define dosdate_t _dosdate_t
  237. #define dostime_t _dostime_t
  238. #define diskfree_t _diskfree_t
  239. #define find_t _find_t
  240. #define REGS _REGS
  241. #define SREGS _SREGS
  242. #define DWORDREGS _DWORDREGS
  243. #define WORDREGS _WORDREGS
  244. #define BYTEREGS _BYTEREGS
  245. #define DOSERROR _DOSERROR
  246.  
  247. extern unsigned _dos_findfirst(char * __path,unsigned __attributes,struct find_t * __buffer);
  248. extern unsigned _dos_findnext(struct find_t * __buffer);
  249. extern void _dos_getdate(struct dosdate_t * __date);
  250. extern unsigned _dos_getdiskfree(unsigned __drive,struct diskfree_t * __diskinfo);
  251. extern void _dos_gettime(struct dostime_t * __time);
  252. extern unsigned _dos_setdate(struct dosdate_t * __date);
  253. extern unsigned _dos_settime(struct dostime_t * __time);
  254.  
  255. extern int bdos(int __fnumber, unsigned int __dxreg, unsigned int __alreg);
  256. extern int dosexterr(struct DOSERROR * __buffer);
  257. extern int intdos(union REGS * __before, union REGS * __after);
  258. extern int intdosx(union REGS * __before, union REGS * __after,struct SREGS * __segregs);
  259. extern int int86(int __number,union REGS * __before, union REGS * __after);
  260. extern int int86x(int __number,union REGS * __before, union REGS * __after,struct SREGS * __segregs);
  261. extern void segread(struct SREGS * __segregs);
  262.  
  263. #endif /*__HIGHC__*/
  264. #ifdef __CPLUSPLUS__
  265. }
  266. #endif
  267. #pragma pop_align_members();
  268. #endif /* _DOS_H */
  269.