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