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