home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c221 / 5.ddi / MWHC.005 / U0 < prev    next >
Encoding:
Text File  |  1992-04-16  |  7.0 KB  |  229 lines

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