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