home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_122 / 1.ddi / INCLUDE.ZIP / DOS.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  18.2 KB  |  520 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.     Copyright (c) 1987, 1992 by Borland International
  7.     All Rights Reserved.
  8. */
  9. #ifndef __DOS_H
  10. #define __DOS_H
  11.  
  12. #if !defined(___DEFS_H)
  13. #include <_defs.h>
  14. #endif
  15.  
  16. #if !defined(_RTLDLL)
  17. extern  int _Cdecl  errno;
  18. extern  int _Cdecl  _doserrno;
  19. #else
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. int far * far _Cdecl __getErrno(void);
  25. int far * far _Cdecl __getDOSErrno(void);
  26. #ifdef __cplusplus
  27. }
  28. #endif
  29.  
  30. #define errno (*__getErrno())
  31. #define _doserrno (*__getDOSErrno())
  32. #endif
  33.  
  34. #ifndef __DLL__
  35.  
  36. /* Variables */
  37. extern  int const _Cdecl _8087;
  38. extern  int       _Cdecl _argc;
  39. extern  char    **_Cdecl _argv;
  40. extern  char    **_Cdecl  environ;
  41.  
  42. extern  unsigned      _Cdecl _psp;
  43. extern  unsigned      _Cdecl _heaplen;
  44. extern  unsigned char _Cdecl _osmajor;
  45. extern  unsigned char _Cdecl _osminor;
  46. extern  unsigned      _Cdecl _stklen;
  47. extern  unsigned      _Cdecl _fpstklen;
  48. extern  unsigned      _Cdecl _version;
  49. extern  unsigned      _Cdecl _osversion;      /* MSC name for _version */
  50.  
  51. #endif  /* __DLL__*/
  52.  
  53.  
  54. #define FA_NORMAL   0x00        /* Normal file, no attributes */
  55. #define FA_RDONLY   0x01        /* Read only attribute */
  56. #define FA_HIDDEN   0x02        /* Hidden file */
  57. #define FA_SYSTEM   0x04        /* System file */
  58. #define FA_LABEL    0x08        /* Volume label */
  59. #define FA_DIREC    0x10        /* Directory */
  60. #define FA_ARCH     0x20        /* Archive */
  61.  
  62. /* MSC names for file attributes */
  63.  
  64. #define _A_NORMAL   0x00        /* Normal file, no attributes */
  65. #define _A_RDONLY   0x01        /* Read only attribute */
  66. #define _A_HIDDEN   0x02        /* Hidden file */
  67. #define _A_SYSTEM   0x04        /* System file */
  68. #define _A_VOLID    0x08        /* Volume label */
  69. #define _A_SUBDIR   0x10        /* Directory */
  70. #define _A_ARCH     0x20        /* Archive */
  71.  
  72. #define NFDS    20          /* Maximum number of fds */
  73.  
  74. struct  fcb {
  75.     char    fcb_drive;      /* 0 = default, 1 = A, 2 = B */
  76.     char    fcb_name[8];    /* File name */
  77.     char    fcb_ext[3];     /* File extension */
  78.     short   fcb_curblk;     /* Current block number */
  79.     short   fcb_recsize;    /* Logical record size in bytes */
  80.     long    fcb_filsize;    /* File size in bytes */
  81.     short   fcb_date;       /* Date file was last written */
  82.     char    fcb_resv[10];   /* Reserved for DOS */
  83.     char    fcb_currec;     /* Current record in block */
  84.     long    fcb_random;     /* Random record number */
  85. };
  86.  
  87. struct  xfcb    {
  88.     char        xfcb_flag;  /* Contains 0xff to indicate xfcb */
  89.     char        xfcb_resv[5];/* Reserved for DOS */
  90.     char        xfcb_attr;  /* Search attribute */
  91.     struct  fcb xfcb_fcb;   /* The standard fcb */
  92. };
  93.  
  94. struct  COUNTRY {
  95.     int co_date;
  96.     char    co_curr[5];
  97.     char    co_thsep[2];
  98.     char    co_desep[2];
  99.     char    co_dtsep[2];
  100.     char    co_tmsep[2];
  101.     char    co_currstyle;
  102.     char    co_digits;
  103.     char    co_time;
  104.     long    co_case;
  105.     char    co_dasep[2];
  106.     char    co_fill[10];
  107. };
  108.  
  109. #if defined(__MSC) && !defined(__cplusplus)
  110. struct  DOSERROR {
  111.         int     exterror;
  112.         char    class;
  113.         char    action;
  114.         char    locus;
  115. };
  116. #else
  117. struct  DOSERROR {
  118.         int     de_exterror;
  119.         char    de_class;
  120.         char    de_action;
  121.         char    de_locus;
  122. };
  123. #endif  /* __MSC and not C++ */
  124.  
  125. struct  dfree   {
  126.     unsigned df_avail;
  127.     unsigned df_total;
  128.     unsigned df_bsec;
  129.     unsigned df_sclus;
  130. };
  131.  
  132. struct diskfree_t {
  133.     unsigned total_clusters;
  134.     unsigned avail_clusters;
  135.     unsigned sectors_per_cluster;
  136.     unsigned bytes_per_sector;
  137. };
  138.  
  139. struct  fatinfo {
  140.     char     fi_sclus;
  141.     char     fi_fatid;
  142.     unsigned fi_nclus;
  143.     int      fi_bysec;
  144. };
  145.  
  146. struct  devhdr  {
  147.     long        dh_next;        /* Next device pointer */
  148.     short       dh_attr;        /* Attributes */
  149.     unsigned short  dh_strat;   /* Driver strategy routine */
  150.     unsigned short  dh_inter;   /* Driver interrupt routine */
  151.     char        dh_name[8];     /* Device name */
  152. };
  153.  
  154. struct  time    {
  155.     unsigned char   ti_min;     /* Minutes */
  156.     unsigned char   ti_hour;    /* Hours */
  157.     unsigned char   ti_hund;    /* Hundredths of seconds */
  158.     unsigned char   ti_sec;     /* Seconds */
  159. };
  160.  
  161. struct dostime_t {
  162.     unsigned char hour;         /* Hours */
  163.     unsigned char minute;       /* Minutes */
  164.     unsigned char second;       /* Seconds */
  165.     unsigned char hsecond;      /* Hundredths of seconds */
  166. };
  167.  
  168. struct  date    {
  169.     int     da_year;        /* Year - 1980 */
  170.     char        da_day;     /* Day of the month */
  171.     char        da_mon;     /* Month (1 = Jan) */
  172. };
  173.  
  174. struct dosdate_t {
  175.     unsigned char day;      /* 1-31 */
  176.     unsigned char month;    /* 1-12 */
  177.     unsigned int  year;     /* 1980 - 2099 */
  178.     unsigned char dayofweek;/* 0 - 6 (0=Sunday) */
  179. };
  180.  
  181. #ifndef _REG_DEFS
  182. #define _REG_DEFS
  183.  
  184. struct WORDREGS {
  185.     unsigned int    ax, bx, cx, dx, si, di, cflag, flags;
  186. };
  187.  
  188. struct BYTEREGS {
  189.     unsigned char   al, ah, bl, bh, cl, ch, dl, dh;
  190. };
  191.  
  192. union   REGS    {
  193.     struct  WORDREGS x;
  194.     struct  BYTEREGS h;
  195. };
  196.  
  197. struct  SREGS   {
  198.     unsigned int    es;
  199.     unsigned int    cs;
  200.     unsigned int    ss;
  201.     unsigned int    ds;
  202. };
  203.  
  204. struct  REGPACK {
  205.     unsigned    r_ax, r_bx, r_cx, r_dx;
  206.     unsigned    r_bp, r_si, r_di, r_ds, r_es, r_flags;
  207. };
  208.  
  209. #endif  /* _REG_DEFS */
  210.  
  211. typedef struct {
  212.     char    ds_drive;          /* do not change    */
  213.     char    ds_pattern [13];   /*  these fields,       */
  214.     char    ds_reserved [7];   /*   Microsoft reserved */
  215.     char    ds_attrib;
  216.     short   ds_time;
  217.     short   ds_date;
  218.     long    ds_size;
  219.     char    ds_nameZ [13];     /* result of the search, asciiz */
  220. }   dosSearchInfo;  /* used with DOS functions 4E, 4F   */
  221.  
  222.  
  223. #ifndef _FFBLK_DEF
  224. #define _FFBLK_DEF
  225. struct  ffblk   {
  226.     char        ff_reserved[21];
  227.     char        ff_attrib;
  228.     unsigned    ff_ftime;
  229.     unsigned    ff_fdate;
  230.     long        ff_fsize;
  231.     char        ff_name[13];
  232. };
  233. #endif  /* _FFBLK_DEF */
  234.  
  235. /* The MSC find_t structure corresponds exactly to the ffblk structure */
  236. struct find_t {
  237.     char     reserved[21];      /* Microsoft reserved - do not change */
  238.     char     attrib;            /* attribute byte for matched file */
  239.     unsigned wr_time;           /* time of last write to file */
  240.     unsigned wr_date;           /* date of last write to file */
  241.     long     size;              /* size of file */
  242.     char     name[13];          /* asciiz name of matched file */
  243. };
  244.  
  245. #ifdef __MSC
  246. #define _find_t find_t
  247. #endif
  248.  
  249. /* axret values for _hardresume() */
  250.  
  251. #define _HARDERR_IGNORE 0   /* ignore error */
  252. #define _HARDERR_RETRY  1   /* retry the operation */
  253. #define _HARDERR_ABORT  2   /* abort program */
  254. #define _HARDERR_FAIL   3   /* fail the operation */
  255.  
  256. #define SEEK_CUR    1
  257. #define SEEK_END    2
  258. #define SEEK_SET    0
  259.  
  260. #ifdef __cplusplus
  261. extern "C" {
  262. #endif
  263.  
  264. #if !defined( _Windows )
  265. int         _Cdecl absread( int __drive, int __nsects, long __lsect,
  266.                             void _FAR *__buffer );
  267. int         _Cdecl abswrite( int __drive, int __nsects, long __lsect,
  268.                              void _FAR *__buffer );
  269. int         _Cdecl allocmem( unsigned __size, unsigned _FAR *__segp );
  270. #endif
  271.  
  272. int         _CType _FARFUNC bdos( int __dosfun, unsigned __dosdx, unsigned __dosal );
  273. int         _CType bdosptr( int __dosfun, void _FAR *__argument,
  274.                 unsigned __dosal );
  275. struct COUNTRY _FAR *_Cdecl country( int __xcode, struct COUNTRY _FAR *__cp);
  276. void        _Cdecl ctrlbrk( int _Cdecl( *handler )( void ));
  277.  
  278. #if !defined( _Windows )
  279. void        _CType delay( unsigned __milliseconds );
  280. #endif
  281.  
  282. void        _Cdecl _FARFUNC disable( void );
  283. int         _Cdecl _FARFUNC dosexterr( struct DOSERROR _FAR *__eblkp );
  284. long        _Cdecl _FARFUNC dostounix( struct date _FAR *__d, struct time _FAR *__t );
  285.  
  286. unsigned    _Cdecl _dos_allocmem( unsigned __size, unsigned _FAR *__segp );
  287. unsigned    _Cdecl _dos_close ( int __fd );
  288. unsigned    _Cdecl _dos_commit( int __fd );
  289. unsigned    _Cdecl _dos_creat( const char _FAR *__pathP, unsigned __attr,
  290.                 int _FAR *__fd );
  291. unsigned    _Cdecl _dos_creatnew( const char _FAR *__pathP, unsigned __attr,
  292.                    int _FAR *__fd );
  293. unsigned    _Cdecl _dos_findfirst( const char _FAR *__path,
  294.                   unsigned __attrib,
  295.                   struct find_t _FAR *__finfo );
  296. unsigned    _Cdecl _dos_findnext( struct find_t _FAR *__finfo );
  297. unsigned    _Cdecl _dos_freemem( unsigned __segx );
  298. void        _Cdecl _dos_getdate( struct dosdate_t _FAR *__datep );
  299. unsigned    _Cdecl _dos_getdiskfree( unsigned __drive,
  300.                       struct diskfree_t _FAR *__dtable);
  301. void        _Cdecl _dos_getdrive( unsigned _FAR *__drive );
  302. unsigned    _Cdecl _dos_getfileattr( const char _FAR *__filename,
  303.                       unsigned _FAR *__attrib );
  304. unsigned    _Cdecl _dos_getftime( int __fd, unsigned _FAR *__date,
  305.                    unsigned _FAR *__time );
  306. void        _Cdecl _dos_gettime( struct dostime_t _FAR *__timep );
  307. void        _Cdecl _dos_keep(unsigned char __status, unsigned __size);
  308. unsigned    _Cdecl _dos_open( const char _FAR *__pathP, unsigned __oflag,
  309.                    int _FAR *__fd );
  310. unsigned    _Cdecl _dos_read( int __fd, void far *__buf, unsigned __len,
  311.                    unsigned _FAR *__nread );
  312. unsigned    _Cdecl _dos_setblock( unsigned __size, unsigned __segx,
  313.                    unsigned _FAR *__maxp );
  314. unsigned    _Cdecl _dos_setdate( struct dosdate_t _FAR *__datep );
  315. void        _Cdecl _dos_setdrive( unsigned __drive, unsigned _FAR *__ndrives );
  316. unsigned    _Cdecl _dos_setfileattr( const char _FAR *__filename,
  317.                       unsigned _FAR __attrib);
  318. unsigned    _Cdecl _dos_setftime( int __fd, unsigned __date, unsigned __time );
  319. unsigned    _Cdecl _dos_settime( struct dostime_t _FAR *__timep );
  320. unsigned    _Cdecl _dos_write( int __fd, const void far *__buf, unsigned __len,
  321.                 unsigned _FAR *__nread );
  322.  
  323. void        __emit__( unsigned char __byte, ...);
  324. void        _Cdecl _FARFUNC enable( void );
  325.  
  326. #if !defined( _Windows )
  327. int         _Cdecl freemem( unsigned __segx );
  328. #endif
  329.  
  330. int         _Cdecl getcbrk( void );
  331. void        _CType getdate( struct date _FAR *__datep );
  332. void        _Cdecl getdfree( unsigned char __drive,
  333.                  struct dfree _FAR *__dtable );
  334. int         _Cdecl _getdrive( void );
  335. void        _Cdecl getfat( unsigned char __drive,
  336.                struct fatinfo _FAR *__dtable );
  337. void        _Cdecl getfatd( struct fatinfo _FAR *__dtable );
  338. unsigned    _Cdecl getpsp( void );
  339. int         _Cdecl getswitchar( void );
  340. void        _CType gettime( struct time _FAR *__timep );
  341. int         _Cdecl getverify( void );
  342.  
  343. #if !defined( _Windows )
  344. #ifdef __cplusplus
  345. void        _Cdecl _harderr( void _Cdecl (far *__fptr)( unsigned __deverr,
  346.                              unsigned __doserr, unsigned far *__hdr) );
  347. #else
  348. void        _Cdecl _harderr( void _Cdecl (far *__fptr)( ) );
  349. #endif
  350. void        _Cdecl _hardresume( int __axret );
  351. void        _Cdecl _hardretn( int __retn );
  352.  
  353. #ifdef __cplusplus
  354. void        _CType harderr( int _Cdecl( *__handler )( int __errval, int __ax,
  355.                             int __bp, int __si) );
  356. #else
  357. void        _CType harderr( int _Cdecl( *__handler )( ) );
  358. #endif
  359. void        _CType hardresume( int __axret );
  360. void        _CType hardretn( int __retn );
  361. #endif
  362.  
  363. #ifndef _PORT_DEFS
  364. unsigned        _Cdecl inport ( unsigned __portid );
  365. unsigned char   _Cdecl inportb( unsigned __portid );
  366. unsigned        _Cdecl inpw   ( unsigned __portid );
  367. int             _Cdecl inp    ( unsigned __portid );
  368. #endif
  369.  
  370. int         _Cdecl int86( int __intno,
  371.                           union REGS _FAR *__inregs,
  372.                           union REGS _FAR *__outregs );
  373. int         _Cdecl int86x( int __intno,
  374.                            union REGS _FAR *__inregs,
  375.                            union REGS _FAR *__outregs,
  376.                            struct SREGS _FAR *__segregs );
  377. int         _Cdecl intdos( union REGS _FAR *__inregs,
  378.                            union REGS _FAR *__outregs );
  379. int         _Cdecl intdosx( union REGS _FAR *__inregs,
  380.                                      union REGS _FAR *__outregs,
  381.                                      struct SREGS _FAR *__segregs );
  382. void        _Cdecl intr( int __intno, struct REGPACK _FAR *__preg );
  383.  
  384. #if !defined( _Windows )
  385. void        _Cdecl keep( unsigned char __status, unsigned __size );
  386. void        _Cdecl nosound( void );
  387. #endif
  388.  
  389. #ifndef _PORT_DEFS
  390. void        _Cdecl outport ( unsigned __portid, unsigned __value );
  391. void        _Cdecl outportb( unsigned __portid, unsigned char __value );
  392. unsigned    _Cdecl outpw   ( unsigned __portid, unsigned __value );
  393. int         _Cdecl outp    ( unsigned __portid, int __value );
  394. #endif
  395.  
  396. char _FAR * _Cdecl parsfnm( const char _FAR *__cmdline,
  397.                        struct fcb _FAR *__fcb, int __opt );
  398. int         _Cdecl peek( unsigned __segment, unsigned __offset );
  399. char        _Cdecl peekb( unsigned __segment, unsigned __offset );
  400. void        _Cdecl poke( unsigned __segment, unsigned __offset, int __value);
  401. void        _Cdecl pokeb( unsigned __segment,
  402.                           unsigned __offset, char __value );
  403.  
  404. #if !defined( _Windows )
  405. int         _Cdecl randbrd( struct fcb _FAR *__fcb, int __rcnt );
  406. int         _Cdecl randbwr( struct fcb _FAR *__fcb, int __rcnt );
  407. #endif
  408.  
  409. void        _Cdecl segread( struct SREGS _FAR *__segp );
  410.  
  411. #if !defined( _Windows )
  412. int         _Cdecl setblock( unsigned __segx, unsigned __newsize );
  413. #endif
  414.  
  415. int         _Cdecl setcbrk( int __cbrkvalue );
  416. void        _Cdecl setdate( struct date _FAR *__datep );
  417. void        _Cdecl setswitchar( char __ch );
  418. void        _Cdecl settime( struct time _FAR *__timep );
  419. void        _Cdecl setverify( int __value );
  420.  
  421. #if !defined( _Windows )
  422. void        _Cdecl sleep( unsigned __seconds );
  423. void        _Cdecl sound( unsigned __frequency );
  424. #endif
  425.  
  426. void        _Cdecl _FARFUNC unixtodos( long __time, struct date _FAR *__d,
  427.                               struct time _FAR *__t );
  428. int         _CType unlink( const char _FAR *__path );
  429.  
  430.     /* These are in-line functions.  These prototypes just clean up
  431.        some syntax checks and code generation.
  432.      */
  433.  
  434. void        _Cdecl          __cli__( void );
  435. void        _Cdecl          __sti__( void );
  436. void        _Cdecl          __int__( int __interruptnum );
  437.  
  438. #define disable( ) __emit__( (char )( 0xfa ) )
  439. #define _disable( ) __emit__( (char )( 0xfa ) ) /* MSC name */
  440. #define enable( )  __emit__( (char )( 0xfb ) )
  441. #define _enable( )  __emit__( (char )( 0xfb ) ) /* MSC name */
  442.  
  443. #define geninterrupt( i ) __int__( i )      /* Interrupt instruction */
  444.  
  445. #ifndef _PORT_DEFS
  446. #define _PORT_DEFS
  447.  
  448. unsigned char   _Cdecl    __inportb__ ( unsigned __portid );
  449. unsigned        _Cdecl    __inportw__ ( unsigned __portid );
  450. unsigned char   _Cdecl    __outportb__( unsigned __portid, unsigned char __value );
  451. unsigned        _Cdecl    __outportw__( unsigned __portid, unsigned __value );
  452.  
  453. #define inportb(__portid)           __inportb__(__portid)
  454. #define outportb(__portid, __value) ((void) __outportb__(__portid, __value))
  455. #define inport(__portid)            __inportw__(__portid)
  456. #define outport(__portid, __value)  ((void) __outportw__(__portid, __value))
  457.  
  458. /* MSC-compatible macros for port I/O */
  459. #define inp(__portid)               __inportb__ (__portid)
  460. #define outp(__portid, __value)     __outportb__(__portid, (unsigned char)__value)
  461. #define inpw(__portid)              __inportw__ (__portid)
  462. #define outpw(__portid, __value)    __outportw__(__portid, __value)
  463.  
  464. #endif  /* _PORT_DEFS */
  465.  
  466. #if !__STDC__
  467.  
  468. extern  unsigned    _Cdecl  _ovrbuffer;
  469. int cdecl far _OvrInitEms( unsigned __emsHandle, unsigned __emsFirst,
  470.                            unsigned __emsPages );
  471. int cdecl far _OvrInitExt( unsigned long __extStart,
  472.                            unsigned long __extLength );
  473.  
  474. char far *cdecl getdta( void );
  475. void      cdecl setdta( char far *__dta );
  476.  
  477. #define MK_FP( seg,ofs )( (void _seg * )( seg ) +( void near * )( ofs ))
  478. #define FP_SEG( fp )( (unsigned )( void _seg * )( void far * )( fp ))
  479. #define FP_OFF( fp )( (unsigned )( fp ))
  480.  
  481. #ifdef __cplusplus
  482. void        _Cdecl _chain_intr ( void interrupt (far *__target)( ... ));
  483. void interrupt( far * _Cdecl _dos_getvect( unsigned __interruptno ))( ... );
  484. void interrupt( far * _CType getvect( int __interruptno ))( ... );
  485. void        _Cdecl _dos_setvect( unsigned __interruptno,
  486.                                  void interrupt( far *__isr )( ... ));
  487. void        _CType setvect( int __interruptno,
  488.                             void interrupt( far *__isr )( ... ));
  489. int  inline _Cdecl peek( unsigned __segment, unsigned __offset )
  490.                   { return( *( (int  far* )MK_FP( __segment, __offset )) ); }
  491. char inline _Cdecl peekb( unsigned __segment, unsigned __offset )
  492.                   { return( *( (char far* )MK_FP( __segment, __offset )) ); }
  493. void inline _Cdecl poke( unsigned __segment, unsigned __offset, int __value )
  494.                {( *( (int  far* )MK_FP( __segment, __offset )) = __value ); }
  495. void inline _Cdecl pokeb( unsigned __segment, unsigned __offset, char __value )
  496.                {( *( (char far* )MK_FP( __segment, __offset )) = __value ); }
  497. #else
  498. void        _Cdecl _chain_intr ( void interrupt (far *__target)( ));
  499. void interrupt( far * _Cdecl _dos_getvect( unsigned __interruptno ))( );
  500. void interrupt( far * _CType getvect( int __interruptno ))( );
  501. void        _Cdecl _dos_setvect( unsigned __interruptno,
  502.                 void interrupt( far *__isr )( ));
  503. void        _CType setvect( int __interruptno,
  504.                 void interrupt( far *__isr )( ) );
  505. #define peek( a,b )( *( (int  far* )MK_FP( (a ),( b )) ))
  506. #define peekb( a,b )( *( (char far* )MK_FP( (a ),( b )) ))
  507. #define poke( a,b,c )( *( (int  far* )MK_FP( (a ),( b )) ) =( int )( c ))
  508. #define pokeb( a,b,c )( *( (char far* )MK_FP( (a ),( b )) ) =( char )( c ))
  509. #endif  /* __cplusplus */
  510.  
  511. #endif  /* !__STDC__ */
  512.  
  513.  
  514. #ifdef __cplusplus
  515. }
  516. #endif
  517.  
  518. #endif  /* __DOS_H */
  519.  
  520.