home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 9 / CDACTUAL9.iso / progs / CB / DATA.Z / DOS.H < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-27  |  26.2 KB  |  793 lines

  1. /*  dos.h
  2.  
  3.     Defines structs, unions, macros, and functions for dealing
  4.     with MSDOS and the Intel iAPX86 microprocessor family.
  5.  
  6. */
  7. /* $Copyright: 1987$ */
  8. /* $Revision:   8.3  $ */
  9.  
  10. #ifndef __DOS_H
  11. #define __DOS_H
  12.  
  13. #if !defined(___DEFS_H)
  14. #include <_defs.h>
  15. #endif
  16.  
  17.  
  18. #ifndef __cplusplus
  19. #if !defined(_WCHAR_T) && !defined(_WCHAR_T_DEFINED)
  20. #define _WCHAR_T
  21. #define _WCHAR_T_DEFINED  /* For WINDOWS.H */
  22. typedef unsigned short wchar_t;
  23. #endif
  24. #endif
  25.  
  26. #if !defined(RC_INVOKED)
  27.  
  28. #if defined(__STDC__)
  29. #pragma warn -nak
  30. #endif
  31.  
  32. #pragma pack(push, 1)
  33.  
  34. #endif  /* !RC_INVOKED */
  35.  
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41.  
  42. #define FA_NORMAL   0x00        /* Normal file, no attributes */
  43. #define FA_RDONLY   0x01        /* Read only attribute */
  44. #define FA_HIDDEN   0x02        /* Hidden file */
  45. #define FA_SYSTEM   0x04        /* System file */
  46. #define FA_LABEL    0x08        /* Volume label */
  47. #define FA_DIREC    0x10        /* Directory */
  48. #define FA_ARCH     0x20        /* Archive */
  49.  
  50. /* MSC names for file attributes */
  51. #define _A_NORMAL   0x00        /* Normal file, no attributes */
  52. #define _A_RDONLY   0x01        /* Read only attribute */
  53. #define _A_HIDDEN   0x02        /* Hidden file */
  54. #define _A_SYSTEM   0x04        /* System file */
  55. #define _A_VOLID    0x08        /* Volume label */
  56. #define _A_SUBDIR   0x10        /* Directory */
  57. #define _A_ARCH     0x20        /* Archive */
  58.  
  59. #define SEEK_CUR    1
  60. #define SEEK_END    2
  61. #define SEEK_SET    0
  62.  
  63.  
  64. #if !defined(__STDC__)
  65. #define environ  _environ
  66. #endif
  67.  
  68.  
  69. struct  dfree
  70. {
  71.     unsigned df_avail;
  72.     unsigned df_total;
  73.     unsigned df_bsec;
  74.     unsigned df_sclus;
  75. };
  76.  
  77. struct diskfree_t
  78. {
  79.     unsigned total_clusters;
  80.     unsigned avail_clusters;
  81.     unsigned sectors_per_cluster;
  82.     unsigned bytes_per_sector;
  83. };
  84.  
  85. struct time
  86. {
  87.     unsigned char   ti_min;     /* Minutes */
  88.     unsigned char   ti_hour;    /* Hours */
  89.     unsigned char   ti_hund;    /* Hundredths of seconds */
  90.     unsigned char   ti_sec;     /* Seconds */
  91. };
  92.  
  93. struct dostime_t
  94. {
  95.     unsigned char hour;         /* Hours */
  96.     unsigned char minute;       /* Minutes */
  97.     unsigned char second;       /* Seconds */
  98.     unsigned char hsecond;      /* Hundredths of seconds */
  99. };
  100.  
  101. struct date
  102. {
  103.     int     da_year;        /* Year - 1980 */
  104.     char    da_day;     /* Day of the month */
  105.     char    da_mon;     /* Month (1 = Jan) */
  106. };
  107.  
  108. struct dosdate_t
  109. {
  110.     unsigned char day;      /* 1-31 */
  111.     unsigned char month;    /* 1-12 */
  112.     unsigned int  year;     /* 1980 - 2099 */
  113.     unsigned char dayofweek;/* 0 - 6 (0=Sunday) */
  114. };
  115.  
  116. #if defined(__FLAT__)
  117.  
  118. #ifndef _FFBLK_DEF
  119. #define _FFBLK_DEF
  120. struct  ffblk   {
  121.     long            ff_reserved;
  122.     long            ff_fsize;
  123.     unsigned long   ff_attrib;
  124.     unsigned short  ff_ftime;
  125.     unsigned short  ff_fdate;
  126.     char            ff_name[256];
  127. };
  128. struct  _wffblk {
  129.     long            ff_reserved;
  130.     long            ff_fsize;
  131.     unsigned long   ff_attrib;
  132.     unsigned short  ff_ftime;
  133.     unsigned short  ff_fdate;
  134.     wchar_t         ff_name[256];
  135. };
  136.  
  137. #endif  /* __FFBLK_DEF */
  138.  
  139. struct find_t
  140. {
  141.     long            reserved;
  142.     long            size;              /* size of file */
  143.     unsigned long   attrib;            /* attribute byte for matched file */
  144.     unsigned short  wr_time;           /* time of last write to file */
  145.     unsigned short  wr_date;           /* date of last write to file */
  146.     char            name[256];         /* asciiz name of matched file */
  147. };
  148. #else  /* __FLAT__ */
  149.  
  150. #ifndef _FFBLK_DEF
  151. #define _FFBLK_DEF
  152. struct ffblk
  153. {
  154.     char        ff_reserved[21];
  155.     char        ff_attrib;
  156.     unsigned    ff_ftime;
  157.     unsigned    ff_fdate;
  158.     long        ff_fsize;
  159.     char        ff_name[13];
  160. };
  161. #endif  /* _FFBLK_DEF */
  162.  
  163. /* The MSC find_t structure corresponds exactly to the ffblk structure */
  164. struct find_t
  165. {
  166.     char     reserved[21];      /* Microsoft reserved - do not change */
  167.     char     attrib;            /* attribute byte for matched file */
  168.     unsigned wr_time;           /* time of last write to file */
  169.     unsigned wr_date;           /* date of last write to file */
  170.     long     size;              /* size of file */
  171.     char     name[13];          /* asciiz name of matched file */
  172. };
  173. #ifdef __MSC
  174. #define _find_t find_t
  175. #endif
  176.  
  177. #endif  /* !__FLAT__ */
  178.  
  179.  
  180. void                           __emit__(unsigned char __byte, ...);
  181. void     _RTLENTRY             __int__(int __interruptnum);
  182. unsigned _RTLENTRY  _EXPFUNC32 _dos_close(int __fd);
  183. unsigned _RTLENTRY  _EXPFUNC32 _dos_creat(const char _FAR *__pathP, unsigned __attr,
  184.                                           int _FAR *__fd);
  185. unsigned _RTLENTRY  _EXPFUNC32 _dos_creatnew(const char _FAR *__pathP, unsigned __attr,
  186.                                              int _FAR *__fd);
  187. unsigned _RTLENTRY  _EXPFUNC32 _dos_findfirst(const char _FAR *__path,
  188.                                               unsigned __attrib,
  189.                                               struct find_t _FAR *__finfo);
  190. unsigned _RTLENTRY  _EXPFUNC32 _dos_findnext(struct find_t _FAR *__finfo);
  191. void     _RTLENTRY  _EXPFUNC32 _dos_getdate(struct dosdate_t _FAR *__datep);
  192. unsigned _RTLENTRY  _EXPFUNC32 _dos_getdiskfree(unsigned __drive,
  193.                                                 struct diskfree_t _FAR *__dtable);
  194. void     _RTLENTRY  _EXPFUNC32 _dos_getdrive(unsigned _FAR *__drive);
  195. unsigned _RTLENTRY  _EXPFUNC32 _dos_getfileattr(const char _FAR *__filename,
  196.                                                 unsigned _FAR *__attrib);
  197. unsigned _RTLENTRY  _EXPFUNC32 _dos_getftime(int __fd, unsigned _FAR *__date,
  198.                                              unsigned _FAR *__time);
  199. void     _RTLENTRY  _EXPFUNC32 _dos_gettime(struct dostime_t _FAR *__timep);
  200. unsigned _RTLENTRY  _EXPFUNC32 _dos_open(const char _FAR *__pathP, unsigned __oflag,
  201.                                          int _FAR *__fd);
  202. unsigned _RTLENTRY  _EXPFUNC32 _dos_setdate(struct dosdate_t _FAR *__datep);
  203. void     _RTLENTRY  _EXPFUNC32 _dos_setdrive(unsigned __drive, unsigned _FAR *__ndrives);
  204. unsigned _RTLENTRY  _EXPFUNC32 _dos_setfileattr(const char _FAR *__filename,
  205.                                                 unsigned _FAR __attrib);
  206. unsigned _RTLENTRY  _EXPFUNC32 _dos_setftime(int __fd, unsigned __date, unsigned __time);
  207. unsigned _RTLENTRY  _EXPFUNC32 _dos_settime(struct dostime_t _FAR *__timep);
  208. void     _RTLENTRY  _EXPFUNC   disable(void);
  209. long     _RTLENTRY  _EXPFUNC   dostounix(struct date _FAR *__d, struct time _FAR *__t);
  210. void     _RTLENTRY  _EXPFUNC   enable(void);
  211. void     _RTLENTRYF _EXPFUNC32 getdate(struct date _FAR *__datep);
  212. void     _RTLENTRY  _EXPFUNC32 getdfree(unsigned char __drive,
  213.                                         struct dfree _FAR *__dtable);
  214. int      _RTLENTRY  _EXPFUNC32 _getdrive(void);
  215. void     _RTLENTRYF _EXPFUNC32 gettime(struct time _FAR *__timep);
  216. void     _RTLENTRY  _EXPFUNC32 setdate(struct date _FAR *__datep);
  217. void     _RTLENTRY  _EXPFUNC32 settime( struct time _FAR *__timep);
  218. void     _RTLENTRY  _EXPFUNC   unixtodos(long __time, struct date _FAR *__d,
  219.                                          struct time _FAR *__t);
  220. int      _RTLENTRYF _EXPFUNC32 unlink(const char _FAR *__path);
  221.  
  222.  
  223. #if defined(__FLAT__)
  224. unsigned _RTLENTRY  _EXPFUNC   _dos_read(int __fd, void *__buf, unsigned __len,
  225.                                          unsigned *__nread);
  226. unsigned _RTLENTRY  _EXPFUNC   _dos_write(int __fd, const void *__buf, unsigned __len,
  227.                                           unsigned *__nread );
  228. #else
  229. unsigned _RTLENTRY             _dos_read(int __fd, void __far *__buf, unsigned __len,
  230.                                          unsigned _FAR *__nread);
  231. unsigned _RTLENTRY             _dos_write(int __fd, const void __far *__buf, unsigned __len,
  232.                                           unsigned _FAR *__nread );
  233. #endif
  234.  
  235. #define _disable()      __emit__((unsigned char)(0xfa)) /* MSC name */
  236. #define disable()       __emit__((unsigned char)(0xfa)) /* MSC name */
  237. #define _enable()       __emit__((unsigned char)(0xfb)) /* MSC name */
  238. #define enable()        __emit__((unsigned char)(0xfb)) /* MSC name */
  239. #define geninterrupt(i) __int__(i)      /* Interrupt instruction */
  240.  
  241.  
  242. #if !defined(__FLAT__) || defined(__DPMI32__)
  243.  
  244. struct  fcb
  245. {
  246.     char    fcb_drive;      /* 0 = default, 1 = A, 2 = B */
  247.     char    fcb_name[8];    /* File name */
  248.     char    fcb_ext[3];     /* File extension */
  249.     short   fcb_curblk;     /* Current block number */
  250.     short   fcb_recsize;    /* Logical record size in bytes */
  251.     long    fcb_filsize;    /* File size in bytes */
  252.     short   fcb_date;       /* Date file was last written */
  253.     char    fcb_resv[10];   /* Reserved for DOS */
  254.     char    fcb_currec;     /* Current record in block */
  255.     long    fcb_random;     /* Random record number */
  256. };
  257.  
  258. struct  xfcb
  259. {
  260.     char       xfcb_flag;    /* Contains 0xff to indicate xfcb */
  261.     char       xfcb_resv[5]; /* Reserved for DOS */
  262.     char       xfcb_attr;    /* Search attribute */
  263.     struct fcb xfcb_fcb;     /* The standard fcb */
  264. };
  265.  
  266. #if defined(__MSC) && !defined(__cplusplus)
  267. struct  DOSERROR
  268. {
  269.         int     exterror;
  270.         char    class;
  271.         char    action;
  272.         char    locus;
  273. };
  274. #else
  275. struct  DOSERROR
  276. {
  277.         int     de_exterror;
  278.         char    de_class;
  279.         char    de_action;
  280.         char    de_locus;
  281. };
  282. #endif  /* __MSC and not C++ */
  283.  
  284. struct fatinfo
  285. {
  286.     char     fi_sclus;
  287.     char     fi_fatid;
  288.     unsigned fi_nclus;
  289.     int      fi_bysec;
  290. };
  291.  
  292. #ifndef _REG_DEFS
  293. #define _REG_DEFS
  294.  
  295. #if defined(__DPMI32__)
  296. struct DWORDREGS
  297. {
  298.     unsigned int eax;
  299.     unsigned int ebx;
  300.     unsigned int ecx;
  301.     unsigned int edx;
  302.     unsigned int esi;
  303.     unsigned int edi;
  304.     unsigned int cflag;
  305.     unsigned int flags;
  306. };
  307. #endif
  308.  
  309. /* __PADDING allows overlaying of the DWORDREGS, WORDREGS,and BYTEREGS
  310.  * structs.  For example: r.h.ah == LOBYTE(r.w.ax) == LOWORD(r.x.eax) */
  311. #if defined(__DPMI32__)
  312. #define __PADDING unsigned short : 16;
  313. #else
  314. #define __PADDING
  315. #endif
  316.  
  317. struct WORDREGS
  318. {
  319.     unsigned short ax; __PADDING
  320.     unsigned short bx; __PADDING
  321.     unsigned short cx; __PADDING
  322.     unsigned short dx; __PADDING
  323.     unsigned short si; __PADDING
  324.     unsigned short di; __PADDING
  325.     unsigned short cflag;
  326.     unsigned short flags;
  327. };
  328.  
  329. struct BYTEREGS
  330. {
  331.     unsigned char al;
  332.     unsigned char ah; __PADDING
  333.     unsigned char bl;
  334.     unsigned char bh; __PADDING
  335.     unsigned char cl;
  336.     unsigned char ch; __PADDING
  337.     unsigned char dl;
  338.     unsigned char dh; __PADDING
  339. };
  340.  
  341. union REGS
  342. {
  343. #if defined(__DPMI32__)
  344.     struct  DWORDREGS x;
  345. #else
  346.     struct  WORDREGS  x;
  347. #endif
  348.     struct  WORDREGS  w;
  349.     struct  BYTEREGS  h;
  350. };
  351.  
  352. struct SREGS
  353. {
  354.     unsigned short es;
  355.     unsigned short cs;
  356.     unsigned short ss;
  357.     unsigned short ds;
  358.  
  359. #if defined(__DPMI32__)
  360.     unsigned short fs;
  361.     unsigned short gs;
  362. #endif
  363. };
  364.  
  365. #if !defined(__DPMI32__)
  366. struct REGPACK
  367. {
  368.     unsigned    r_ax, r_bx, r_cx, r_dx;
  369.     unsigned    r_bp, r_si, r_di, r_ds, r_es, r_flags;
  370. };
  371. #endif
  372.  
  373. #endif  /* _REG_DEFS */
  374.  
  375.  
  376. int           _RTLENTRYF _EXPFUNC   bdos(int __dosfun, unsigned __dosdx, unsigned __dosal);
  377. int           _RTLENTRYF            bdosptr(int __dosfun, void _FAR *__argument,
  378.                                             unsigned __dosal);
  379. void          _RTLENTRY             ctrlbrk(int _USERENTRY (*handler)(void));
  380. unsigned      _RTLENTRY             _dos_commit(int __fd);
  381. int           _RTLENTRY  _EXPFUNC16 dosexterr( struct DOSERROR _FAR *__eblkp );
  382. int           _RTLENTRY             getcbrk(void);
  383. void          _RTLENTRY             getfat(unsigned char __drive,
  384.                                            struct fatinfo _FAR *__dtable);
  385. void          _RTLENTRY             getfatd(struct fatinfo _FAR *__dtable);
  386. unsigned      _RTLENTRY             getpsp(void);
  387. char _FAR *   _RTLENTRY             parsfnm(const char _FAR *__cmdline,
  388.                                             struct fcb _FAR *__fcb, int __opt);
  389. int           _RTLENTRY             peek(unsigned __segment, unsigned __offset);
  390. char          _RTLENTRY             peekb(unsigned __segment, unsigned __offset);
  391. void          _RTLENTRY             poke(unsigned __segment, unsigned __offset, int __value);
  392. void          _RTLENTRY             pokeb(unsigned __segment, unsigned __offset, char __value);
  393. void          _RTLENTRY             segread(struct SREGS _FAR *__segp);
  394. int           _RTLENTRY             setcbrk(int __cbrkvalue);
  395.  
  396. #if defined(__DPMI32__)
  397. char *        _RTLENTRY             getdta(void);
  398. int           _RTLENTRY             int386(int __intno, union REGS *__inregs,
  399.                                            union REGS *__outregs);
  400. int           _RTLENTRY             int386x(int __intno, union REGS *__inregs,
  401.                                             union REGS *__outregs,
  402.                                             struct SREGS *__segregs );
  403. void          _RTLENTRY             setdta(char *__dta);
  404. #else
  405. char __far *  _RTLENTRY             getdta(void);
  406. int           _RTLENTRY             int86(int __intno, union REGS _FAR *__inregs,
  407.                                           union REGS _FAR *__outregs);
  408. int           _RTLENTRY             int86x(int __intno, union REGS _FAR *__inregs,
  409.                                            union REGS _FAR *__outregs,
  410.                                            struct SREGS _FAR *__segregs );
  411. int           _RTLENTRY             intdos(union REGS _FAR *__inregs,
  412.                                            union REGS _FAR *__outregs );
  413. int           _RTLENTRY             intdosx(union REGS _FAR *__inregs,
  414.                                             union REGS _FAR *__outregs,
  415.                                             struct SREGS _FAR *__segregs );
  416. void          _RTLENTRY             intr(int __intno, struct REGPACK _FAR *__preg);
  417. void          _RTLENTRY             setdta(char __far *__dta);
  418. #endif
  419.  
  420. #ifndef _PORT_DEFS
  421. #define _PORT_DEFS
  422. unsigned char _RTLENTRY             __inportb__(unsigned __portid);
  423. unsigned      _RTLENTRY             __inportw__(unsigned __portid);
  424. unsigned char _RTLENTRY             __outportb__(unsigned __portid, unsigned char __value);
  425. unsigned      _RTLENTRY             __outportw__(unsigned __portid, unsigned __value);
  426. unsigned      _RTLENTRY             inport(unsigned __portid);
  427. unsigned char _RTLENTRY             inportb(unsigned __portid);
  428. unsigned      _RTLENTRY             inpw(unsigned __portid);
  429. int           _RTLENTRY             inp(unsigned __portid);
  430. void          _RTLENTRY             outport(unsigned __portid, unsigned __value);
  431. void          _RTLENTRY             outportb(unsigned __portid, unsigned char __value);
  432. unsigned      _RTLENTRY             outpw(unsigned __portid, unsigned __value);
  433. int           _RTLENTRY             outp(unsigned __portid, int __value);
  434.  
  435. #if defined(_USE_PORT_INTRINSICS)
  436. #define inport(__portid)            __inportw__(__portid)
  437. #define inportb(__portid)           __inportb__(__portid)
  438. #define outport(__portid, __value)  ((void) __outportw__(__portid, __value))
  439. #define outportb(__portid, __value) ((void) __outportb__(__portid, __value))
  440. #endif /* _USE_PORT_INTRINSICS */
  441.  
  442. /* MSC-compatible macros for port I/O */
  443. #define inp(__portid)               __inportb__ (__portid)
  444. #define inpw(__portid)              __inportw__ (__portid)
  445. #define outp(__portid, __value)     __outportb__(__portid, (unsigned char)(__value))
  446. #define outpw(__portid, __value)    __outportw__(__portid, __value)
  447. #endif  /* _PORT_DEFS */
  448.  
  449.  
  450. #endif  /* !__FLAT__ || DPMI32 */
  451.  
  452.  
  453. #if !defined(__WIN32__) || defined(__DPMI32__)
  454.  
  455. struct  COUNTRY
  456. {
  457.     short   co_date;
  458.     char    co_curr[5];
  459.     char    co_thsep[2];
  460.     char    co_desep[2];
  461.     char    co_dtsep[2];
  462.     char    co_tmsep[2];
  463.     char    co_currstyle;
  464.     char    co_digits;
  465.     char    co_time;
  466.     long    co_case;
  467.     char    co_dasep[2];
  468.     char    co_fill[10];
  469. };
  470.  
  471. struct COUNTRY _FAR * _RTLENTRY _EXPFUNC32 country(int __xcode,
  472.                                                    struct COUNTRY _FAR *__cp);
  473. int                   _RTLENTRY _EXPFUNC32 getverify(void);
  474. void                  _RTLENTRY _EXPFUNC32 setverify(int __value);
  475.  
  476. #endif  /* !__WIN32__ || __DPMI32__ */
  477.  
  478.  
  479. #if !defined(_Windows) || defined(__DPMI16__) || defined(__DPMI32__)
  480. void _RTLENTRYF delay(unsigned __milliseconds);
  481. void _RTLENTRY  nosound(void);
  482. void _RTLENTRY  sound(unsigned __frequency);
  483. #endif  /* !_Windows || __DPMI16__ || __DPMI32__ */
  484.  
  485.  
  486. #if !defined(__FLAT__)
  487.  
  488. struct  devhdr
  489. {
  490.     long        dh_next;        /* Next device pointer */
  491.     short       dh_attr;        /* Attributes */
  492.     unsigned short  dh_strat;   /* Driver strategy routine */
  493.     unsigned short  dh_inter;   /* Driver interrupt routine */
  494.     char        dh_name[8];     /* Device name */
  495. };
  496.  
  497. typedef struct
  498. {
  499.     char    ds_drive;          /* do not change    */
  500.     char    ds_pattern [13];   /*  these fields,       */
  501.     char    ds_reserved [7];   /*   Microsoft reserved */
  502.     char    ds_attrib;
  503.     short   ds_time;
  504.     short   ds_date;
  505.     long    ds_size;
  506.     char    ds_nameZ [13];     /* result of the search, asciiz */
  507. }   dosSearchInfo;  /* used with DOS functions 4E, 4F   */
  508.  
  509.  
  510. #if defined(_Windows)
  511.   extern unsigned _RTLENTRY _0000H;
  512.   extern unsigned _RTLENTRY _0040H;
  513.   extern unsigned _RTLENTRY _A000H;
  514.   extern unsigned _RTLENTRY _B000H;
  515.   extern unsigned _RTLENTRY _B800H;
  516.   extern unsigned _RTLENTRY _C000H;
  517.   extern unsigned _RTLENTRY _D000H;
  518.   extern unsigned _RTLENTRY _E000H;
  519.   extern unsigned _RTLENTRY _F000H;
  520.   extern unsigned _RTLENTRY _AHINCR;
  521.  
  522.   #define __Seg0000 ((unsigned)&_0000H)
  523.   #define __Seg0040 ((unsigned)&_0040H)
  524.   #define __SegA000 ((unsigned)&_A000H)
  525.   #define __SegB000 ((unsigned)&_B000H)
  526.   #define __SegB800 ((unsigned)&_B800H)
  527.   #define __SegC000 ((unsigned)&_C000H)
  528.   #define __SegD000 ((unsigned)&_D000H)
  529.   #define __SegE000 ((unsigned)&_E000H)
  530.   #define __SegF000 ((unsigned)&_F000H)
  531.   #define __SegIncr ((unsigned)&_AHINCR)
  532. #else
  533.   #define __Seg0000 0x0000
  534.   #define __Seg0040 0x0040
  535.   #define __SegA000 0xA000
  536.   #define __SegB000 0xB000
  537.   #define __SegB800 0xB800
  538.   #define __SegC000 0xC000
  539.   #define __SegD000 0xD000
  540.   #define __SegE000 0xE000
  541.   #define __SegF000 0xF000
  542.   #define __SegIncr 0x0100
  543. #endif
  544.  
  545. #if !defined(_RTLDLL)
  546.   extern  int _RTLENTRY  errno;
  547.   extern  int _RTLENTRY  _doserrno;
  548. #else
  549.   int __far * __far _RTLENTRY __getErrno(void);
  550.   int __far * __far _RTLENTRY __getDOSErrno(void);
  551.   #define errno (*__getErrno())
  552.   #define _doserrno (*__getDOSErrno())
  553. #endif  /* !_RTLDLL */
  554.  
  555.  
  556. /* Variables */
  557.  
  558. #if !defined(__DLL__)
  559. extern  int           _RTLENTRY _argc;
  560. extern  char        **_RTLENTRY _argv;
  561. extern  unsigned      _RTLENTRY _psp;
  562. #endif
  563.  
  564. extern  int const     _RTLENTRY _8087;
  565. extern  char        **_RTLENTRY _environ;
  566. extern  wchar_t     **_RTLENTRY _wenviron;
  567. extern  unsigned      _RTLENTRY _heaplen;
  568. extern  unsigned char _RTLENTRY _osmajor;
  569. extern  unsigned char _RTLENTRY _osminor;
  570. extern  unsigned      _RTLENTRY _stklen;
  571. extern  unsigned      _RTLENTRY _fpstklen;
  572. extern  unsigned      _RTLENTRY _version;
  573. extern  unsigned      _RTLENTRY _osversion;      /* MSC name for _version */
  574.  
  575. #define NFDS    20          /* Maximum number of fds */
  576.  
  577. /* axret values for _hardresume() */
  578. #define _HARDERR_IGNORE 0   /* ignore error */
  579. #define _HARDERR_RETRY  1   /* retry the operation */
  580. #define _HARDERR_ABORT  2   /* abort program */
  581. #define _HARDERR_FAIL   3   /* fail the operation */
  582.  
  583. #if !defined(_Windows) || defined(__DPMI16__)
  584. void     _RTLENTRY  sleep(unsigned __seconds);
  585. #endif
  586.  
  587. #if !defined(_Windows)
  588. int      _RTLENTRY  absread(int __drive, int __nsects, long __lsect,
  589.                            void _FAR *__buffer);
  590. int      _RTLENTRY  abswrite(int __drive, int __nsects, long __lsect,
  591.                              void _FAR *__buffer);
  592. int      _RTLENTRY  allocmem(unsigned __size, unsigned _FAR *__segp);
  593. unsigned _RTLENTRY  _dos_allocmem(unsigned __size, unsigned _FAR *__segp);
  594. unsigned _RTLENTRY  _dos_freemem(unsigned __segx);
  595. void     _RTLENTRY  _dos_keep(unsigned char __status, unsigned __size);
  596. unsigned _RTLENTRY  _dos_setblock(unsigned __size, unsigned __segx,
  597.                                  unsigned _FAR *__maxp);
  598. int      _RTLENTRY  freemem(unsigned __segx);
  599. void     _RTLENTRY  keep(unsigned char __status, unsigned __size);
  600. int      _RTLENTRY  randbrd(struct fcb _FAR *__fcb, int __rcnt);
  601. int      _RTLENTRY  randbwr(struct fcb _FAR *__fcb, int __rcnt);
  602. int      _RTLENTRY  setblock(unsigned __segx, unsigned __newsize);
  603.  
  604. #if defined(__cplusplus)
  605. void     _RTLENTRY  _harderr(void _USERENTRY (__far *__fptr)(unsigned __deverr,
  606.                             unsigned __doserr, unsigned __far *__hdr));
  607. #else
  608. void     _RTLENTRY  _harderr(void _USERENTRY (__far *__fptr)());
  609. #endif
  610.  
  611. void     _RTLENTRY  _hardresume(int __axret);
  612. void     _RTLENTRY  _hardretn(int __retn);
  613.  
  614. #if defined(__cplusplus)
  615. void     _RTLENTRYF harderr(int _USERENTRY (*__handler)(int __errval, int __ax,
  616.                             int __bp, int __si));
  617. #else
  618. void     _RTLENTRYF harderr(int _USERENTRY (*__handler)());
  619. #endif
  620.  
  621. void     _RTLENTRYF hardresume(int __axret);
  622. void     _RTLENTRYF hardretn(int __retn);
  623.  
  624. #if !defined(__STDC__)
  625. extern  unsigned    _RTLENTRY  _ovrbuffer;
  626.  
  627. int      __cdecl __far _OvrInitEms(unsigned __emsHandle, unsigned __emsFirst,
  628.                                    unsigned __emsPages);
  629. int      __cdecl __far _OvrInitExt(unsigned long __extStart,
  630.                                    unsigned long __extLength);
  631. #endif
  632.  
  633. #endif  /* !_Windows */
  634.  
  635. #if !defined(__STDC__)
  636. #define MK_FP(seg,ofs) ((void __seg *)(seg) + (void __near *)(ofs))
  637. #define FP_SEG(fp)     ((unsigned)(void __seg *)(void __far *)(fp))
  638. #define FP_OFF(fp)     ((unsigned)(fp))
  639.  
  640. void _RTLENTRY __cli__(void);
  641. void _RTLENTRY __sti__(void);
  642.  
  643. #ifdef __cplusplus
  644. void        _RTLENTRY _chain_intr(void interrupt (__far *__target)(...));
  645. void interrupt (__far * _RTLENTRY  _dos_getvect(unsigned __interruptno))(...);
  646. void        _RTLENTRY _dos_setvect(unsigned __interruptno,
  647.                                    void interrupt(__far *__isr)(...));
  648. void interrupt (__far * _RTLENTRYF getvect(int __interruptno))(...);
  649. void        _RTLENTRYF setvect(int __interruptno,
  650.                                void interrupt (__far *__isr)(...));
  651.  
  652. int  inline _RTLENTRY  peek(unsigned __segment, unsigned __offset)
  653. {
  654.     return (*((int __far *)MK_FP(__segment, __offset)));
  655. }
  656.  
  657. char inline _RTLENTRY  peekb(unsigned __segment, unsigned __offset)
  658. {
  659.     return (*((char __far *)MK_FP(__segment, __offset)));
  660. }
  661.  
  662. void inline _RTLENTRY  poke(unsigned __segment, unsigned __offset, int __value)
  663. {
  664.     (*((int __far *)MK_FP(__segment, __offset)) = __value);
  665. }
  666.  
  667. void inline _RTLENTRY  pokeb(unsigned __segment, unsigned __offset, char __value)
  668. {
  669.     (*((char __far *)MK_FP(__segment, __offset )) = __value);
  670. }
  671.  
  672. #else  /* __cplusplus */
  673.  
  674. void        _RTLENTRY  _chain_intr(void interrupt(__far *__target)());
  675. void interrupt (__far * _RTLENTRY  _dos_getvect(unsigned __interruptno))();
  676. void        _RTLENTRY  _dos_setvect(unsigned __interruptno,
  677.                                     void interrupt (__far *__isr)());
  678. void interrupt (__far * _RTLENTRYF getvect(int __interruptno))();
  679. void        _RTLENTRYF setvect(int __interruptno,
  680.                                void interrupt(__far *__isr)());
  681.  
  682. #define peek(a,b)    (*((int  __far * )MK_FP((a),(b))))
  683. #define peekb(a,b)   (*((char __far * )MK_FP((a),(b))))
  684. #define poke(a,b,c)  (*((int  __far * )MK_FP((a),(b))) = (int)(c))
  685. #define pokeb(a,b,c) (*((char __far * )MK_FP((a),(b))) = (char)(c))
  686.  
  687. #endif  /* !__cplusplus */
  688.  
  689. #endif  /* !__STDC__ */
  690.  
  691.  
  692. #if defined(__DPMI16__)
  693. typedef enum
  694. {
  695.     RTM_OK             = 0x00,
  696.     RTM_NO_MEMORY      = 0x01,  /* out of memory */
  697.     RTM_FILE_IO_ERROR  = 0x22   /* error during file IO */
  698. } RTMstatus_t;     /* returns from RTM API calls */
  699.  
  700. RTMstatus_t __far __pascal MEMinitSwapFile(char __far *fileName, unsigned long fileSize);
  701. RTMstatus_t __far __pascal MEMcloseSwapFile(int del);
  702. unsigned short    __pascal RTMgetVersion(void);
  703. #endif
  704.  
  705.  
  706. #else  /* defined __FLAT__ */
  707.  
  708.  
  709. #if defined(__MT__)
  710.   extern  int * _RTLENTRY _EXPFUNC __errno(void);
  711.   extern  int * _RTLENTRY _EXPFUNC __doserrno(void);
  712.   #define errno (*__errno())
  713.   #define _doserrno (*__doserrno())
  714. #else  /* __MT__ */
  715.   extern  int _RTLENTRY _EXPDATA errno;
  716.   extern  int _RTLENTRY _EXPDATA _doserrno;
  717. #endif  /* !__MT__ */
  718.  
  719.  
  720. /* Variables */
  721. #if defined(_RTLDLL)
  722.     extern int           _RTLENTRY __dll_argc;
  723.     extern char **       _RTLENTRY __dll_argv;
  724.     #define _argc __dll_argc
  725.     #define _argv __dll_argv
  726. #else
  727.     extern int           _RTLENTRY _EXPDATA _argc;
  728.     extern char **       _RTLENTRY _EXPDATA _argv;
  729. #endif
  730.  
  731. extern int const     _RTLENTRY _EXPDATA _8087;
  732. extern char **       _RTLENTRY _EXPDATA _environ;
  733.  
  734. extern unsigned char _RTLENTRY _EXPDATA _osmajor;
  735. extern unsigned char _RTLENTRY _EXPDATA _osminor;
  736. extern unsigned      _RTLENTRY _EXPDATA _osversion;
  737. extern unsigned      _RTLENTRY _EXPDATA _version;
  738.  
  739. void _RTLENTRY _EXPFUNC _sleep(unsigned __seconds);
  740.  
  741. #define sleep(unsigned) _sleep(unsigned)
  742.  
  743.  
  744. #if defined(__DPMI32__)
  745. unsigned short __stdcall GetLoaderVersion(void);
  746. #endif
  747.  
  748.  
  749. #if !defined(__DPMI32__) && !defined(RC_INVOKED)
  750. #pragma obsolete _dos_close
  751. #pragma obsolete _dos_creat
  752. #pragma obsolete _dos_creatnew
  753. #pragma obsolete _dos_findfirst
  754. #pragma obsolete _dos_findnext
  755. #pragma obsolete _dos_getdate
  756. #pragma obsolete _dos_getdiskfree
  757. #pragma obsolete _dos_getdrive
  758. #pragma obsolete _dos_getfileattr
  759. #pragma obsolete _dos_getftime
  760. #pragma obsolete _dos_gettime
  761. #pragma obsolete _dos_open
  762. #pragma obsolete _dos_read
  763. #pragma obsolete _dos_setdate
  764. #pragma obsolete _dos_setdrive
  765. #pragma obsolete _dos_setfileattr
  766. #pragma obsolete _dos_setftime
  767. #pragma obsolete _dos_settime
  768. #pragma obsolete _dos_write
  769. #endif
  770.  
  771.  
  772. #endif  /* __FLAT__ */
  773.  
  774.  
  775. #ifdef __cplusplus
  776. }
  777. #endif
  778.  
  779.  
  780. #if !defined(RC_INVOKED)
  781.  
  782. /* restore default packing */
  783. #pragma pack(pop)
  784.  
  785. #if defined(__STDC__)
  786. #pragma warn .nak
  787. #endif
  788.  
  789. #endif  /* !RC_INVOKED */
  790.  
  791.  
  792. #endif  /* __DOS_H */
  793.