home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / win3 / patches / symantec / rtlinc.exe / DOS.H < prev    next >
C/C++ Source or Header  |  1993-09-26  |  19KB  |  643 lines

  1. /*_ dos.h   Modified by: Walter Bright */
  2. /* Copyright (C) 1985-1991 by Walter Bright    */
  3. /* All rights reserved                */
  4. /* Written by Walter Bright            */
  5. /* $Revision:   1.10  $ */
  6.  
  7. /* DOS and IBM PC specific declarations            */
  8.  
  9. #ifndef __DOS_H
  10. #define __DOS_H    1
  11.  
  12. #if __cplusplus
  13. extern "C" {
  14. #endif
  15.  
  16. #ifdef __STDC__
  17. #define __CDECL
  18. #define __STDCALL
  19. #else
  20. #define __CDECL __cdecl
  21. #define __STDCALL __stdcall
  22. #endif
  23.  
  24. #if __OS2__ && __INTSIZE == 4
  25. #define __CLIB    __STDCALL
  26. #else
  27. #define __CLIB    __CDECL
  28. #endif
  29.  
  30. #if !(M_XENIX || M_UNIX)
  31. #pragma pack(1)            /* no alignment for DOS structs    */
  32. #endif
  33.  
  34. typedef unsigned size_t;
  35.  
  36. #if DOS386
  37. /* Valid for both Pharlap and x386. */
  38. extern unsigned short _x386_zero_base_selector;
  39.  
  40. /* The following is actually only for X386, not Pharlap. */
  41. /***************
  42. Absolute address is given.  Selector is returned in dx, offset in eax.  A 
  43. selector is normally allocated so the offset will normally be zero.  If all 
  44. selectors are being used, the offset is returned in eax with
  45. _x386_zero_base_selector in dx.  This should provide working long pointers to 
  46. most applications even if we have insufficient selectors.  Return of zero in 
  47. eax indicates allocation of a selector unless the requested base was zero in 
  48. which case it is ambiguous.  Nonzero indicates all selectors have been 
  49. allocated and _x386_zero_base_selector is in dx, requested absolute address 
  50. is in eax.  In all cases the descriptor has a 4 gbyte limit.
  51. ****************/
  52. extern void __far *(*_x386_mk_protected_ptr)(unsigned long abs_address); 
  53.  
  54. /***************
  55. Pass a far pointer.  Offset portion of pointer is ignored, selector is 
  56. examined to see if it matches pointers previously allocated.  If the selector 
  57. is indeed a user definable selector then it is deactivated and a 0 is 
  58. returned.  Any attempt to use the selector after it has been freed will 
  59. result in a general protection fault.  
  60.  
  61. If the pointer does not contain a selector created through a call to 
  62. mk_protected_ptr then it returns a -1 with no action taken.  This also 
  63. happens if mk_protected_ptr returns nonzero in eax and an attempt is made to 
  64. free the associated selector. 
  65. ****************/
  66. extern int (*_x386_free_protected_ptr)(void __far *);
  67.  
  68. /***************
  69. Function is called with a far pointer.  It  determines the absolute address 
  70. of that pointer and returns the address in eax. 
  71. ****************/
  72. extern unsigned long(*_x386_get_abs_address)(void __far *ptr);
  73.  
  74. /***************
  75. Function returns the largest contiguous block available via calls to malloc
  76. or calloc
  77. ****************/
  78. extern unsigned int (_x386_coreleft)(void);
  79.  
  80. /***************
  81. Function allows access to specific physical addresses in memory.
  82. The mapped region must be completely above or below the 1M
  83. boundary. If there is insufficient memory or the DPMI host
  84. refuses the map, the function returns -1.  The return value is
  85. a near pointer that can be used to access the requested address.
  86. ****************/
  87. extern void* (_x386_map_physical_address)(void* abs_addr, unsigned size);
  88.  
  89. #endif
  90.  
  91. #ifndef __NT__
  92.  
  93. /* Register structure required for functions int86() and intdos()    */
  94.  
  95. #if __INTSIZE == 4
  96.  
  97. #pragma pack(1)
  98. struct _DWORDREGS
  99. {    unsigned eax,ebx,ecx,edx,esi,edi,cflag,flags;
  100. };
  101. #define DWORDREGS _DWORDREGS
  102.  
  103. struct _WORDREGS
  104. {    unsigned short    ax,eaxmsw,bx,ebxmsw,cx,ecxmsw,dx,edxmsw,
  105.             si,esimsw,di,edimsw;
  106.     unsigned cflag,flags;
  107. };
  108. #define WORDREGS _WORDREGS
  109.  
  110. struct _BYTEREGS
  111. {    unsigned char al,ah,ax2,ax3,bl,bh,bx2,bx3,
  112.               cl,ch,cx2,cx3,dl,dh,dx2,dx3;
  113. };
  114. #define BYTEREGS _BYTEREGS
  115.  
  116. union _REGS { struct _DWORDREGS e; struct _WORDREGS x; struct _BYTEREGS h; };
  117. #define REGS _REGS
  118.  
  119. struct _SREGS { unsigned short es,cs,ss,ds,fs,gs; };
  120. #define SREGS _SREGS
  121.  
  122. #pragma pack()
  123. #else
  124.  
  125. #pragma pack(1)
  126. struct WORDREGS { unsigned ax,bx,cx,dx,si,di,cflag,flags; };
  127. struct BYTEREGS {unsigned char al,ah,bl,bh,cl,ch,dl,dh; };
  128. union REGS { struct WORDREGS x; struct BYTEREGS h; };
  129. struct SREGS { unsigned es,cs,ss,ds; };
  130. #pragma pack()
  131. #define _REGS REGS
  132. #define _SREGS SREGS
  133. #define    _WORDREGS WORDREGS
  134. #define _BYTEREGS BYTEREGS
  135.  
  136. #endif
  137.  
  138.  
  139. #define disable()             __emit__((char)(0xFA))
  140. #define _disable()             __emit__((char)(0xFA))
  141. #define enable()            __emit__((char)(0xFB))
  142. #define _enable()            __emit__((char)(0xFB))
  143. #define geninterrupt(intr)    __int__(intr)
  144.  
  145.  
  146. int __cdecl int86(int,union REGS *,union REGS *);
  147. int __cdecl int86x(int,union REGS *,union REGS *,struct SREGS *);
  148. int __cdecl intdos(union REGS *,union REGS *);
  149. int __cdecl intdosx(union REGS *,union REGS *,struct SREGS *);
  150. void __CLIB segread(struct SREGS *);
  151. #define _int86 int86
  152. #define _int86x int86x
  153. #define _intdos intdos
  154. #define _intdosx intdosx
  155. #define _segread segread
  156.  
  157. #if DOS386
  158. int __cdecl int86_real(int,union REGS *,union REGS *);
  159. int __cdecl int86x_real(int,union REGS *,union REGS *,struct SREGS *);
  160. #endif
  161.  
  162. #endif        /* !__NT__ */
  163.  
  164. #if (M_UNIX || M_XENIX)
  165.  
  166. /***************
  167. The _vt_ functions help support the use of virtural terminals.  See SCREEN(HW)
  168. for the basics of the ioctl()'s which are hidden by this set of functions.
  169. Use _vt_add() to add functions to be called at time when requests are made
  170. to switch screens.  Your function will be passed either VT_RELDISP or 
  171. VT_ACTIVATE to identify which action is being taken.  If you do not wish to 
  172. release the screen return VT_FALSE for relsig (VT_TRUE if you are ready to
  173. release it).  The return value for acqsig is ignored. 
  174.  
  175. You may add as many functions to be notified as you wish -- the only memory 
  176. constraints are governed by malloc().  Remove functions with _vt_remove.
  177.  
  178. If you wish to switch to another screen use _vt_activate().  Screen numbers
  179. are normally 1 -> 12.  To find your screen number use _vt_get_num().
  180. ****************/
  181.  
  182. /***************
  183. ioctls supported by the VT
  184. ****************/
  185. #define VTIOC       ('v' << 8)
  186. #define VT_OPENQRY  (VTIOC | 1)
  187. #define VT_SETMODE  (VTIOC | 2)
  188. #define VT_GETMODE  (VTIOC | 3)
  189. #define VT_RELDISP  (VTIOC | 4)
  190. #define VT_ACTIVATE (VTIOC | 5)
  191.  
  192. /***************
  193. Modes of VT_RELDISP
  194. ****************/
  195. #define VT_FALSE    0 /* user will not release display              */
  196. #define VT_TRUE     1 /* user releases display                      */
  197. #define VT_ACKACQ   2 /* user acknowleges the acquire signal        */
  198.  
  199. /***************
  200. Modes of struct vt_mode.mode
  201. ****************/
  202. #define VT_AUTO     0 /* this vt switching is automatic            */
  203. #define VT_PROCESS  1 /* this vt switching controlled by a process */
  204.  
  205. struct vt_mode {char mode, waitv; short relsig, acqsig, frsig;};
  206.  
  207. typedef int (*_vt_sig_func_t)(int);
  208.  
  209. /***************
  210. Return the mode the VT handler is in.
  211. ****************/
  212. void _vt_get_mode(struct vt_mode *p);
  213.  
  214. /***************
  215. Set the new mode to use with this VT.  Return -1 if failure.
  216. ****************/
  217. int _vt_set_mode(struct vt_mode *p);
  218.  
  219. /***************
  220. Get this processes VT screen number.
  221. Return -1 if failure or screen number if successful.
  222. ****************/
  223. int _vt_get_num(void);
  224.  
  225. /***************
  226. Set this VT to be the active one.  Return -1 if failure.
  227. ****************/
  228. int _vt_activate(int vt_num);
  229.  
  230. /***************
  231. Adds a another function to the list to be notified in the event of a 
  232. release/acquire request.  Returns -1 if failed.
  233. ****************/
  234. int _vt_add(_vt_sig_func_t func);
  235.  
  236. /***************
  237. Remove this function from the list of functions to be notified in the event
  238. of a release/acquire request.  Returns -1 if failure to remove it.
  239. ****************/
  240. int _vt_remove(_vt_sig_func_t func);
  241.  
  242.  
  243. #include <sys/stat.h>
  244.  
  245. struct FIND        /* struct used by findfirst() and findnext()    */
  246. {
  247.     struct stat stat;
  248.     unsigned short attribute;/* attribute found (FA_XXXX)        */
  249.     unsigned short time,date;/* file's time and date        */
  250.     unsigned long size;    /* file's size                */
  251.     char name[16];        /* filename followed by 0 byte        */
  252. };
  253.  
  254. /* Directory entry attributes    */
  255. /* Use S_XXXX bit masks in sys/stat.h. */
  256.  
  257. #define FA_NORMAL    0x00
  258. #define FA_DIREC    S_IFDIR
  259.  
  260. #else        /* !M_UNIX */
  261.  
  262. #pragma pack(1)
  263. struct FIND        /* struct used by findfirst() and findnext()    */
  264. {    char reserved[21];    /* reserved by DOS            */
  265.     char attribute;        /* attribute found (FA_XXXX)        */
  266.     unsigned short time,date; /* file's time and date        */
  267.     unsigned long size;    /* file's size                */
  268.     char name[13];        /* filename followed by 0 byte        */
  269. };
  270.  
  271. struct find_t        /* used by _dos_findfirst() and _dos_findnext()    */
  272. {    char reserved[21];    /* reserved by DOS            */
  273.     char attrib;        /* attribute found (FA_XXXX)        */
  274.     unsigned short wr_time,wr_date;    /* file's last write        */
  275.     unsigned long size;    /* file's size                */
  276.     char name[13];        /* filename followed by 0 byte        */
  277. };
  278.  
  279. #define _find_t find_t
  280. #pragma pack()
  281.  
  282. /* Directory entry attributes    */
  283. #define FA_NORMAL    0x00
  284. #define FA_RDONLY    0x01
  285. #define FA_HIDDEN    0x02
  286. #define FA_SYSTEM    0x04
  287. #define FA_LABEL    0x08
  288. #define FA_DIREC    0x10
  289. #define FA_ARCH        0x20
  290.  
  291. #define _A_NORMAL    0x00
  292. #define _A_RDONLY    0x01
  293. #define _A_HIDDEN    0x02
  294. #define _A_SYSTEM    0x04
  295. #define _A_VOLID    0x08
  296. #define _A_SUBDIR    0x10
  297. #define _A_ARCH        0x20
  298.  
  299. #endif
  300.  
  301. struct FIND * __CLIB findfirst(const char *,int),* __CLIB findnext(void);
  302.  
  303. #if MSDOS || _WINDOWS
  304. unsigned     __CLIB _dos_findfirst(char *, unsigned, struct find_t *);
  305. int     __CLIB _dos_findnext(struct find_t *);
  306. #endif
  307.  
  308. #ifndef __NT__
  309. /***************************
  310.  * Define macros to get at the segment and offset of a far pointer.
  311.  */
  312.  
  313. #define _FP_OFF(fp) (*((unsigned __far *)&(fp)))
  314. #define FP_OFF _FP_OFF
  315.  
  316. #if __INTSIZE == 4
  317. extern unsigned __CLIB FP_SEG(void __far *);
  318. #else
  319. #define _FP_SEG(fp)    (*((unsigned __far *)&(fp)+1))
  320. #define FP_SEG _FP_SEG
  321. #endif
  322.  
  323.  
  324. /* Generate a far pointer from a segment and an offset    */
  325. #if __INTSIZE == 4
  326. extern void __far * __CLIB MK_FP(unsigned short,unsigned);
  327. #define MK_FP(seg,offset) MK_FP((seg),(unsigned)(offset))
  328. #else
  329. #define MK_FP(seg,offset) \
  330.     ((void __far *)(((unsigned long)(seg)<<16) | (unsigned)(offset)))
  331. #endif
  332. #endif
  333.  
  334.  
  335. /***********************************
  336.  * Far storage allocation functions
  337.  */
  338.  
  339. #if __INTSIZE == 2
  340. void __far * __cdecl farmalloc(unsigned long size);
  341. void __far * __cdecl farcalloc(unsigned long numelems,unsigned long elemsize);
  342. void __far * __cdecl farrealloc(void __far *oldptr,unsigned long newsize);
  343. int __cdecl farfree(void __far *ptr);
  344. unsigned long __cdecl farcoreleft(void);
  345. #endif
  346.  
  347. /* structure for dos_exterr */
  348.  
  349. #pragma pack(1)
  350. struct DOSERROR
  351. {
  352.     int exterror;    /* extended error code */
  353.     char eclass;        /* error class */
  354.     char action;    /* recommended action */
  355.     char locus;        /* error locus */
  356. };
  357. #define _DOSERROR DOSERROR
  358.  
  359. /* structure for country dependent information */
  360. struct  COUNTRY {
  361.     short    co_date;
  362.     char    co_curr[5];
  363.     char    co_thsep[2];
  364.     char    co_desep[2];
  365.     char    co_dtsep[2];
  366.     char    co_tmsep[2];
  367.     char    co_currstyle;
  368.     char    co_digits;
  369.     char    co_time;
  370.     long    co_case;
  371.     char    co_dasep[2];
  372.     char    co_fill[10];
  373. };
  374.  
  375. /* structure for dos_getdiskfree */
  376. struct diskfree_t {
  377.     unsigned total_clusters;
  378.     unsigned avail_clusters;
  379.     unsigned sectors_per_cluster;
  380.     unsigned bytes_per_sector;
  381. };
  382. #define _diskfree_t diskfree_t
  383.  
  384. /* structure for dos_setdate/dos_getdate */
  385.  
  386. struct dos_date_t
  387. {
  388.     char day;
  389.     char month;
  390.     short    year;
  391.     char dayofweek;
  392. };
  393. #define _dosdate_t dos_date_t
  394.  
  395. /* struct for getfat & getfatd */
  396.  
  397. struct  _fatinfo
  398. {
  399.     char        fi_sclus;
  400.     char        fi_fatid;
  401.     unsigned    fi_nclus;
  402.     int        fi_bysec;
  403. };
  404. #define fatinfo _fatinfo
  405.  
  406.  
  407. /* structures for dos_settime/dos_gettime */
  408.  
  409. struct dos_time_t
  410. {
  411.     char hour;
  412.     char minute;
  413.     char second;
  414.     char hsecond;
  415. };
  416. #define _dostime_t dos_time_t
  417.  
  418. struct time
  419. {
  420.     unsigned char    ti_min;
  421.     unsigned char    ti_hour;
  422.     unsigned char    ti_hund;
  423.     unsigned char    ti_sec;
  424. };
  425.  
  426. struct date
  427. {
  428.     int    da_year;
  429.     char    da_day;
  430.     char    da_mon;    
  431. };
  432.  
  433. struct fcb
  434. {
  435.     char    fcb_drive;
  436.     char    fcb_name[8];
  437.     char    fcb_ext[3];
  438.     short    fcb_curblk;
  439.     short    fcb_filesize;
  440.     short    fcb_date;
  441.     char    fcb_resv[10];
  442.     char    fcb_crrec;
  443.     long    fcb_random;
  444. };    
  445.  
  446. #pragma pack()
  447.  
  448. /* DOS specific functions:    */
  449.  
  450. #ifndef __NT__
  451.  
  452. int    __CLIB dos_creat(char *,int);
  453. int    __CLIB _dos_creat(char *,int, int *);
  454. int     __CLIB _dos_creatnew(char *,int , int *);
  455. void    __CLIB dos_set_verify(int);
  456. void    __CLIB dos_set_ctrl_break(int);
  457. int    __CLIB dos_get_verify(void);
  458. int    __CLIB dos_get_ctrl_break(void);
  459. unsigned    __CLIB _dos_open(const char *, unsigned,int *);
  460. int    __CLIB dos_abs_disk_read(int,unsigned int,int,void *);
  461. int    __CLIB dos_abs_disk_write(int,unsigned int,int,const char *);
  462. #define absread(drive,nsects,lsects,buffer) dos_abs_disk_read(drive,nsects,lsects,buffer)
  463. #define abswrite(drive,nsects,lsects,buffer) dos_abs_disk_write(drive,nsects,lsects,buffer)
  464. void __CLIB ctrlbrk(int (*FarPtr)());
  465. /*static void __CLIB interrupt far CtrlBrkHandler();*/
  466. int __CLIB getcbrk(void);
  467. int __CLIB setcbrk(int value);
  468.  
  469. #endif                                                                                                              
  470.  
  471. int __CLIB getcurdir(int drive,char *dir);
  472. char * __CLIB _getdcwd(int drive,char *Pbuf,int PbufLen);
  473. void __CLIB getfat(unsigned char disk, struct fatinfo *fat);
  474. void __CLIB getfatd(struct fatinfo *fat);
  475. int __CLIB getverify(void);
  476. void __CLIB setverify(int value);
  477. char __far * __CLIB getdta(void);
  478. void __CLIB setdta(char __far *dta);
  479. unsigned __CLIB getpsp(void);
  480. int __CLIB setblock(unsigned segment, unsigned size);
  481. void __CLIB gettime(struct time *timePtr);
  482. void __CLIB getdate(struct date *datePtr);
  483. char * __CLIB parsfnm(const char *cmdline, struct fcb *fcb, int opt);
  484.  
  485.  
  486. int     __CLIB dos_close(int);
  487. unsigned __CLIB _dos_close(int);
  488. unsigned __CLIB _dos_commit(int);
  489. unsigned __CLIB _dos_read(int, void *,unsigned,unsigned *);
  490. unsigned __CLIB _dos_write(int, const void *,unsigned,unsigned *);
  491. int    __CLIB dos_exterr(struct DOSERROR *);
  492. int    __CLIB dosexterr(struct DOSERROR *);
  493. #define _dosexterr(dosstruct) dos_exterr(dosstruct)
  494. #define _dos_close(fd) dos_close(fd)
  495.  
  496. struct COUNTRY __CLIB country( int , struct COUNTRY *);
  497.  
  498. int    __CLIB setdisk(int);
  499. int    __CLIB getdisk(void);
  500. long    __CLIB dos_getdiskfreespace(int);
  501. unsigned __CLIB _dos_getdiskfree(unsigned, struct diskfree_t *);
  502. void    __CLIB dos_setdrive(unsigned, unsigned *);
  503. void    __CLIB dos_getdrive(unsigned *);
  504. unsigned    __CLIB dos_setftime(int, unsigned, unsigned);
  505. unsigned    __CLIB dos_getftime(int, unsigned *, unsigned *);
  506. unsigned    __CLIB dos_setfileattr(const char *, unsigned);
  507. unsigned    __CLIB dos_getfileattr(const char *, unsigned *);
  508. unsigned    __CLIB dos_setdate(const struct dos_date_t *);
  509. void    __CLIB dos_getdate(struct dos_date_t *);
  510. int    __CLIB _dos_sethandlecount(unsigned);
  511. unsigned    __CLIB dos_settime(const struct dos_time_t *);
  512. void    __CLIB dos_gettime(struct dos_time_t *);
  513. #if __INTSIZE == 2
  514. unsigned  _dos_allocmem(unsigned int,unsigned int *);
  515. int       allocmem(unsigned int,unsigned int *);
  516. unsigned  _dos_freemem(unsigned);
  517. int       freemem(unsigned);
  518. #endif
  519.  
  520. #define _dos_getdate dos_getdate
  521. #define _dos_getdrive dos_getdrive
  522. #define _dos_getfileattr dos_getfileattr
  523. #define _dos_getftime dos_getftime
  524. #define _dos_gettime dos_gettime
  525. #define _dos_setdate dos_setdate
  526. #define _dos_setdrive dos_setdrive
  527. #define _dos_setfileattr dos_setfileattr
  528. #define _dos_setftime dos_setftime
  529. #define _dos_settime dos_settime
  530.  
  531. /* For inline code generation for inp(), inpw(), outp() and outpw() functions */
  532. unsigned char    __CLIB _inline_inp(unsigned);
  533. int        __CLIB _inline_inpw(unsigned);
  534. unsigned char    __CLIB _inline_outp(unsigned,char);
  535. int        __CLIB _inline_outpw(unsigned,unsigned);
  536.  
  537. #define inp(x)        _inline_inp(x)
  538. #define inpw(x)        _inline_inpw(x)
  539. #define outp(x,y)    _inline_outp(x,y)
  540. #define outpw(x,y)    _inline_outpw(x,y)
  541. #define _outp(x,y)    _inline_outp(x,y)
  542. #define _outpw(x,y)    _inline_outpw(x,y)
  543. #define _inp(x)    _inline_inp(x)
  544. #define _inpw(x)    _inline_inpw(x)
  545.  
  546. #if __INTSIZE == 4
  547. long        __CLIB inpl(unsigned);
  548. long        __CLIB outpl(unsigned,unsigned long);
  549. #endif
  550.  
  551. size_t __CLIB _chkstack(void);
  552.  
  553. #ifndef __NT__
  554. void __cdecl peekbytes(unsigned,unsigned,void *,size_t);
  555. void __cdecl pokebytes(unsigned,unsigned,const void *,size_t);
  556. #if __cplusplus
  557. void inline __cdecl poke(unsigned segm, unsigned offs, int value)
  558. {
  559.     *((int far *) MK_FP(segm, offs)) = value;
  560. }
  561.  
  562. int inline __cdecl peek(unsigned segm, unsigned offs)
  563. {
  564.     return *((int far *) MK_FP(segm, offs));
  565. }
  566. void inline __cdecl pokeb(unsigned segm, unsigned offs, char value)
  567. {
  568.     *((char far *) MK_FP(segm, offs)) = value;
  569. }
  570.  
  571. char inline __cdecl peekb(unsigned segm, unsigned offs)
  572. {
  573.     return *((char far *) MK_FP(segm, offs));
  574. }
  575.  
  576. #else
  577. #define peek(segm, offs) (*((int far *) MK_FP((segm), (offs))))
  578. #define peekb(segm, offs) (*((char far *) MK_FP((segm), (offs))))
  579. #define poke(segm, offs, value) (*((int far *) MK_FP((segm), (offs))) = (int)(value)) 
  580. #define pokeb(segm, offs, value) (*((char far *) MK_FP((segm), (offs))) = (char)(value)) 
  581. #endif
  582.  
  583.  
  584. int __cdecl bdos(int dosfunc, unsigned int dosdx, unsigned int dosal);
  585. #define _bdos bdos
  586. int __cdecl bdosptr(int, void *, unsigned);
  587. int __cdecl bdosx(char,void *,char);
  588.  
  589. /* From parall.asm    */
  590. unsigned __CLIB dos_alloc(unsigned);
  591. unsigned __CLIB dos_calloc(unsigned);
  592. int __CLIB dos_free(unsigned);
  593. void __CLIB _copy(unsigned,unsigned,unsigned);
  594. unsigned long __CLIB dos_avail(void);
  595. unsigned __CLIB dos_setblock(unsigned,unsigned);
  596. unsigned __CLIB _dos_setblock(unsigned,unsigned,unsigned *);
  597.  
  598.  
  599. #endif
  600.  
  601. /* From response.c    */
  602. int __pascal response_expand(int *,char ***);
  603.  
  604. int __CLIB cputype(void);
  605.  
  606. /* Use this macro if you wish to cause wildcard expansion    */
  607. #if !(M_UNIX || M_XENIX)
  608. #define WILDCARDS    extern int __cdecl __wildcard; int *__wild = &__wildcard;
  609. #else
  610. #define WILDCARDS
  611. #endif
  612.  
  613. /* Executable type    */
  614. #define EXE_DOS        1        /* MSDOS            */
  615. #define EXE_DOS16RM    2        /* Rational 286 DOS Extender    */
  616. #define    EXE_ZPM        4        /* ZPM 286 DOS Extender        */
  617. #define EXE_PHAR386    8        /* Pharlap 386 DOS Extender    */
  618. #define EXE_DOSX    0x10        /* DOSX 386 DOS Extender    */
  619. #define EXE_WINDOWS    0x20        /* Windows 3            */
  620. #define EXE_OS2        0x40        /* OS/2 1.x            */
  621. #define EXE_SCOUNIX    0x80        /* SCO Unix            */
  622. #define EXE_OS2_2        0x100        /* OS/2 2.0            */
  623. #define EXE_WINDOWSNT 0x200        /* Windows NT         */
  624.  
  625. extern unsigned short __cdecl _exe_type;    /* EXE_XXXX            */
  626.  
  627. #if !(M_UNIX || M_XENIX)
  628. #pragma pack()
  629. #endif
  630.  
  631. #ifdef _WINDOWS
  632. extern void __far __pascal DOS3CALL(void);
  633. #define int21h    __asm    call    DOS3CALL
  634. #else
  635. #define int21h    __asm    int    21h
  636. #endif
  637.  
  638. #if __cplusplus
  639. }
  640. #endif
  641.  
  642. #endif /* __DOS_H */
  643.