home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (C) 1986-2001 by Digital Mars. $Revision: 1.1.1.2 $ */
- #if __SC__ || __RCC__
- #pragma once
- #endif
-
- #ifndef __DOS_H
- #define __DOS_H 1
-
- #if __cplusplus
- extern "C" {
- #endif
-
- /* Define _CRTAPI1 (for compatibility with the NT SDK) */
- #ifndef _CRTAPI1
- #define _CRTAPI1 __cdecl
- #endif
-
- /* Define _CRTAPI2 (for compatibility with the NT SDK) */
- #ifndef _CRTAPI2
- #define _CRTAPI2 __cdecl
- #endif
-
- /* Define CRTIMP */
- #ifndef _CRTIMP
- #if defined(_WIN32) && defined(_DLL)
- #define _CRTIMP __declspec(dllimport)
- #else
- #define _CRTIMP
- #endif
- #endif
-
- #if __OS2__ && __INTSIZE == 4
- #define __CLIB __stdcall
- #else
- #define __CLIB __cdecl
- #endif
-
- #if !(M_XENIX || M_UNIX)
- #pragma pack(1)
- #endif
-
- #if !defined(_WCHAR_T_DEFINED)
- typedef unsigned short wchar_t;
- #define _WCHAR_T_DEFINED 1
- #endif
-
- typedef unsigned size_t;
- extern unsigned __cdecl _stack;
-
- #if defined(DOS386)
- extern unsigned short _x386_zero_base_selector;
- extern void *_x386_zero_base_ptr;
- extern void __far *(*_x386_mk_protected_ptr)(unsigned long abs_address);
- extern int (*_x386_free_protected_ptr)(void __far *);
- extern unsigned long(*_x386_get_abs_address)(void __far *ptr);
- extern unsigned int (_x386_coreleft)(void);
- extern void* (_x386_map_physical_address)(void* abs_addr, unsigned size);
- extern int (_x386_memlock)(void __far *pointer, unsigned int length);
- extern int (_x386_memunlock)(void __far *pointer, unsigned int length);
- #endif
-
- #ifndef __REGS_DEFINED
- #define __REGS_DEFINED
-
- #if __INTSIZE == 4
-
- #pragma pack(1)
- struct _DWORDREGS {unsigned eax,ebx,ecx,edx,esi,edi,cflag,flags;};
- #define DWORDREGS _DWORDREGS
-
- struct _WORDREGS
- { unsigned short ax,eaxmsw,bx,ebxmsw,cx,ecxmsw,dx,edxmsw,
- si,esimsw,di,edimsw;
- unsigned cflag,flags;
- };
- #define WORDREGS _WORDREGS
-
- struct _BYTEREGS
- { unsigned char al,ah,ax2,ax3,bl,bh,bx2,bx3,
- cl,ch,cx2,cx3,dl,dh,dx2,dx3;
- };
- #define BYTEREGS _BYTEREGS
-
- union _REGS { struct _DWORDREGS e; struct _WORDREGS x; struct _BYTEREGS h; };
- #define REGS _REGS
-
- struct _SREGS { unsigned short es,cs,ss,ds,fs,gs; };
- #define SREGS _SREGS
-
- #pragma pack()
- #else /* __INTSIZE == 4 */
-
- #pragma pack(1)
- struct WORDREGS { unsigned ax,bx,cx,dx,si,di,cflag,flags; };
- struct BYTEREGS {unsigned char al,ah,bl,bh,cl,ch,dl,dh; };
- union REGS { struct WORDREGS x; struct BYTEREGS h; };
- struct SREGS { unsigned es,cs,ss,ds; };
- #pragma pack()
- #define _REGS REGS
- #define _SREGS SREGS
- #define _WORDREGS WORDREGS
- #define _BYTEREGS BYTEREGS
-
- #endif /* __INTSIZE==4 */
- #endif /* __REGS_DEFINED */
-
- #ifndef __NT__
- #define disable() __emit__((char)(0xFA))
- #define _disable() __emit__((char)(0xFA))
- #define enable() __emit__((char)(0xFB))
- #define _enable() __emit__((char)(0xFB))
- #define geninterrupt(intr) __emit__(0xCD,(intr))
-
- int __cdecl int86(int,union REGS *,union REGS *);
- int __cdecl int86x(int,union REGS *,union REGS *,struct SREGS *);
- int __cdecl intdos(union REGS *,union REGS *);
- int __cdecl intdosx(union REGS *,union REGS *,struct SREGS *);
- void __CLIB segread(struct SREGS *);
- #define _int86 int86
- #define _int86x int86x
- #define _intdos intdos
- #define _intdosx intdosx
- #define _segread segread
-
- #if DOS386
- int __cdecl int86_real(int,union REGS *,union REGS *);
- int __cdecl int86x_real(int,union REGS *,union REGS *,struct SREGS *);
- #endif
- #endif
-
- #if (M_UNIX || M_XENIX)
-
- #define VTIOC ('v' << 8)
- #define VT_OPENQRY (VTIOC | 1)
- #define VT_SETMODE (VTIOC | 2)
- #define VT_GETMODE (VTIOC | 3)
- #define VT_RELDISP (VTIOC | 4)
- #define VT_ACTIVATE (VTIOC | 5)
- #define VT_FALSE 0
- #define VT_TRUE 1
- #define VT_ACKACQ 2
- #define VT_AUTO 0
- #define VT_PROCESS 1
- struct vt_mode {char mode, waitv; short relsig, acqsig, frsig;};
- typedef int (*_vt_sig_func_t)(int);
- void _vt_get_mode(struct vt_mode *p);
- int _vt_set_mode(struct vt_mode *p);
- int _vt_get_num(void);
- int _vt_activate(int vt_num);
- int _vt_add(_vt_sig_func_t func);
- int _vt_remove(_vt_sig_func_t func);
-
- #include <sys/stat.h>
-
- #ifdef __NT__
- struct FINDW
- {
- struct stat stat;
- unsigned short attribute;
- unsigned short time,date;
- unsigned long size;
- wchar_t name[16];
- };
- struct FINDA
- #else
- struct FIND
- #endif
- {
- struct stat stat;
- unsigned short attribute;
- unsigned short time,date;
- unsigned long size;
- char name[16];
- };
-
- #define FA_NORMAL 0x00
- #define FA_DIREC S_IFDIR
-
- #else /* !M_UNIX */
-
- #pragma pack(1)
-
- #ifdef __NT__
- struct FINDW /* struct used by wfindfirst() and wfindnext() */
- { char reserved[21]; /* reserved by DOS */
- char attribute; /* attribute found (FA_XXXX) */
- unsigned short time,date; /* file's time and date */
- unsigned long size; /* file's size */
- #if !defined(_WIN32)
- wchar_t name[13]; /* filename followed by 0 byte */
- #else
- wchar_t name[260];
- #endif
- };
- struct FINDA /* struct used by findfirst() and findnext() */
- #else
- struct FIND /* struct used by findfirst() and findnext() */
- #endif
- { char reserved[21]; /* reserved by DOS */
- char attribute; /* attribute found (FA_XXXX) */
- unsigned short time,date; /* file's time and date */
- unsigned long size; /* file's size */
- #if !defined(_WIN32)
- char name[13]; /* filename followed by 0 byte */
- #else
- char name[260];
- #endif
- };
-
- struct find_t /* used by _dos_findfirst() and _dos_findnext() */
- { char reserved[21]; /* reserved by DOS */
- char attrib; /* attribute found (FA_XXXX) */
- unsigned short wr_time,wr_date; /* file's last write */
- unsigned long size; /* file's size */
- #if !defined(_WIN32)
- char name[13]; /* filename followed by 0 byte */
- #else
- char name[260];
- #endif
- };
-
- #define _find_t find_t
- #pragma pack()
-
- #define FA_NORMAL 0x00
- #define FA_RDONLY 0x01
- #define FA_HIDDEN 0x02
- #define FA_SYSTEM 0x04
- #define FA_LABEL 0x08
- #define FA_DIREC 0x10
- #define FA_ARCH 0x20
-
- #define _A_NORMAL 0x00
- #define _A_RDONLY 0x01
- #define _A_HIDDEN 0x02
- #define _A_SYSTEM 0x04
- #define _A_VOLID 0x08
- #define _A_SUBDIR 0x10
- #define _A_ARCH 0x20
-
- #endif
-
- #ifdef __NT__
- #ifdef _UNICODE
- #define FIND FINDW
- #else
- #define FIND FINDA
- #endif
- struct FINDA * __CLIB findfirst(const char *,int);
- struct FINDA * __CLIB findnext(void);
- struct FINDW * __CLIB _wfindfirst (const wchar_t *, int);
- struct FINDW * __CLIB _wfindnext (void);
- #else
- struct FIND * __CLIB findfirst(const char *,int),* __CLIB findnext(void);
- #endif
-
- #if defined(MSDOS) || (defined(_WINDOWS) && !defined(__NT__))
- unsigned __CLIB _dos_findfirst(const char *, unsigned, struct find_t *);
- unsigned __CLIB _dos_findnext(struct find_t *);
- #endif
-
- #if defined(MSDOS)
- void __CLIB _dos_keep(unsigned, unsigned);
- #endif
-
- #ifndef __NT__
- #define _FP_OFF(fp) (*((unsigned __far *)&(fp)))
- #define FP_OFF _FP_OFF
-
- #if __INTSIZE == 4
- extern unsigned __CLIB FP_SEG(void __far *);
- #define _FP_SEG FP_SEG
- #else
- #define _FP_SEG(fp) (*((unsigned __far *)&(fp)+1))
- #define FP_SEG _FP_SEG
- #endif
- #if __INTSIZE == 4
- extern void __far * __CLIB MK_FP(unsigned short,unsigned);
- #define MK_FP(seg,offset) MK_FP((seg),(unsigned)(offset))
- #else
- #define MK_FP(seg,offset) \
- ((void __far *)(((unsigned long)(seg)<<16) | (unsigned)(offset)))
- #endif
- #endif
-
- #define _MK_FP MK_FP
-
- #if __INTSIZE == 2
- void __far * __cdecl farmalloc(unsigned long size);
- void __far * __cdecl farcalloc(unsigned long numelems,unsigned long elemsize);
- void __far * __cdecl farrealloc(void __far *oldptr,unsigned long newsize);
- int __cdecl farfree(void __far *ptr);
- unsigned long __cdecl farcoreleft(void);
- #endif
-
- #pragma pack(1)
- struct DOSERROR
- {
- int exterror; /* extended error code */
- char eclass; /* error class */
- char action; /* recommended action */
- char locus; /* error locus */
- };
- #define _DOSERROR DOSERROR
- #define errclass eclass
-
- struct COUNTRY {
- short co_date;
- char co_curr[5];
- char co_thsep[2];
- char co_desep[2];
- char co_dtsep[2];
- char co_tmsep[2];
- char co_currstyle;
- char co_digits;
- char co_time;
- long co_case;
- char co_dasep[2];
- char co_fill[10];
- };
-
- struct diskfree_t {
- unsigned total_clusters;
- unsigned avail_clusters;
- unsigned sectors_per_cluster;
- unsigned bytes_per_sector;
- };
- #define _diskfree_t diskfree_t
-
- struct dos_date_t
- {
- unsigned char day;
- unsigned char month;
- unsigned short year;
- unsigned char dayofweek;
- };
- #define _dosdate_t dos_date_t
-
- struct _fatinfo
- {
- char fi_sclus;
- char fi_fatid;
- unsigned fi_nclus;
- int fi_bysec;
- };
- #define fatinfo _fatinfo
-
- struct dos_time_t
- {
- unsigned char hour;
- unsigned char minute;
- unsigned char second;
- unsigned char hsecond;
- };
- #define _dostime_t dos_time_t
-
- struct time
- {
- unsigned char ti_min;
- unsigned char ti_hour;
- unsigned char ti_hund;
- unsigned char ti_sec;
- };
-
- struct date
- {
- int da_year;
- char da_day;
- char da_mon;
- };
-
- struct fcb
- {
- char fcb_drive;
- char fcb_name[8];
- char fcb_ext[3];
- short fcb_curblk;
- short fcb_filesize;
- short fcb_date;
- char fcb_resv[10];
- char fcb_crrec;
- long fcb_random;
- };
-
- #pragma pack()
-
- #ifndef __NT__
- struct COUNTRY *__CLIB country( int , struct COUNTRY *);
- extern unsigned int __CLIB _osversion;
- #ifndef DOS386
- int __CLIB getcbrk(void);
- void __CLIB ctrlbrk(int (*FarPtr)());
- int __CLIB setcbrk(int value);
- void __CLIB getfat(unsigned char disk, struct fatinfo *fat);
- void __CLIB getfatd(struct fatinfo *fat);
- int __CLIB getverify(void);
- void __CLIB setverify(int value);
- char __far * __CLIB getdta(void);
- void __CLIB setdta(char __far *dta);
- unsigned __CLIB getpsp(void);
- int __CLIB setblock(unsigned segment, unsigned size);
- char * __CLIB parsfnm(const char *cmdline, struct fcb *fcb, int opt);
- #endif /* DOS386 */
- #endif /* __NT__ */
-
- #ifndef DOS386
- void __CLIB getdate(struct date *datePtr);
- void __CLIB gettime(struct time *timePtr);
- #endif
-
- unsigned __CLIB _dos_lock(int, int, unsigned long, unsigned long);
- unsigned long __CLIB _dos_seek(int, unsigned long, int);
- int __CLIB dos_creat(char *,int);
- int __CLIB _dos_creat(const char *,unsigned, int *);
- int __CLIB _dos_creatnew(const char *,unsigned , int *);
- unsigned __CLIB _dos_open(const char *, unsigned,int *);
- int __CLIB dos_close(int);
- unsigned __CLIB _dos_read(int, void __far *,unsigned,unsigned *);
- unsigned __CLIB _dos_write(int, const void __far *,unsigned,unsigned *);
- int __CLIB dos_get_ctrl_break(void);
- #ifndef DOS386
- int __CLIB dos_abs_disk_read(int,int,long,char *);
- int __CLIB dos_abs_disk_write(int,int,long,const char *);
- #endif
- void __CLIB dos_set_verify(int);
- void __CLIB dos_set_ctrl_break(int);
- int __CLIB dos_get_verify(void);
- int __CLIB getcurdir(int drive,char *dir);
- char * __CLIB _getdcwd(int drive,char *Pbuf,int PbufLen);
- unsigned __CLIB _dos_commit(int);
- int __CLIB dos_exterr(struct DOSERROR *);
- int __CLIB dosexterr(struct DOSERROR *);
- int __CLIB setdisk(int);
- int __CLIB getdisk(void);
- long __CLIB dos_getdiskfreespace(int);
- unsigned __CLIB _dos_getdiskfree(unsigned, struct diskfree_t *);
- void __CLIB dos_setdrive(unsigned, unsigned *);
- void __CLIB dos_getdrive(unsigned *);
- unsigned __CLIB dos_setftime(int, unsigned, unsigned);
- unsigned __CLIB dos_getftime(int, unsigned *, unsigned *);
- unsigned __CLIB dos_setfileattr(const char *, unsigned);
- unsigned __CLIB dos_getfileattr(const char *, unsigned *);
- unsigned __CLIB dos_setdate(struct dos_date_t *);
- void __CLIB dos_getdate(struct dos_date_t *);
- int __CLIB _dos_sethandlecount(unsigned);
- unsigned __CLIB dos_settime(struct dos_time_t *);
- void __CLIB dos_gettime(struct dos_time_t *);
-
- #define absread(drive,nsects,lsects,buffer) dos_abs_disk_read(drive,nsects,lsects,buffer)
- #define abswrite(drive,nsects,lsects,buffer) dos_abs_disk_write(drive,nsects,lsects,buffer)
- #define _dosexterr(dosstruct) dos_exterr(dosstruct)
- #define _dos_close dos_close
-
- #if __INTSIZE == 2
- unsigned _dos_allocmem(unsigned int,unsigned int *);
- int allocmem(unsigned int,unsigned int *);
- unsigned _dos_freemem(unsigned);
- int freemem(unsigned);
- #endif
-
- #define _dos_getdate dos_getdate
- #define _dos_getdrive dos_getdrive
- #define _dos_getfileattr dos_getfileattr
- #define _dos_getftime dos_getftime
- #define _dos_gettime dos_gettime
- #define _dos_setdate dos_setdate
- #define _dos_setdrive dos_setdrive
- #define _dos_setfileattr dos_setfileattr
- #define _dos_setftime dos_setftime
- #define _dos_settime dos_settime
-
- unsigned char __CLIB _inp(unsigned);
- unsigned short __CLIB _inpw(unsigned);
- unsigned long __CLIB _inpl(unsigned);
-
- unsigned char __CLIB _outp(unsigned,unsigned char);
- unsigned short __CLIB _outpw(unsigned,unsigned short);
- unsigned long __CLIB _outpl(unsigned,unsigned long);
-
- unsigned char __CLIB _inline_inp(unsigned);
- unsigned short __CLIB _inline_inpw(unsigned);
- unsigned long __CLIB _inline_inpl(unsigned);
-
- unsigned char __CLIB _inline_outp(unsigned,unsigned char);
- unsigned short __CLIB _inline_outpw(unsigned,unsigned short);
- unsigned long __CLIB _inline_outpl(unsigned,unsigned long);
-
- #define _inp(x) _inline_inp(x)
- #define _inpw(x) _inline_inpw(x)
- #define _outp(x,y) _inline_outp(x,y)
- #define _outpw(x,y) _inline_outpw(x,y)
-
- #if __INTSIZE == 4
- #define _inpl(x) _inline_inpl(x)
- #define _outpl(x,y) _inline_outpl(x,y)
- #endif
-
- // Obsolete, use the _ prefixed versions
- #define inp(x) _inline_inp(x)
- #define inpw(x) _inline_inpw(x)
- #define outp(x,y) _inline_outp(x,y)
- #define outpw(x,y) _inline_outpw(x,y)
-
- #if !(defined (_WINDOWS) || defined (__NT__))
-
- #define _HARDERR_IGNORE 0
- #define _HARDERR_RETRY 1
- #define _HARDERR_ABORT 2
- #define _HARDERR_FAIL 3
-
- void __cdecl _harderr (void (__far __cdecl *) (unsigned, unsigned, unsigned __far *));
- void __cdecl _hardresume (int);
- void __cdecl _hardretn (int);
-
- #endif /*!(defined (_WINDOWS) || defined (__NT__))*/
-
- size_t __CLIB _chkstack(void);
-
- #ifndef __NT__
-
- #define interrupt __interrupt
-
- void __cdecl peekbytes(unsigned,unsigned,void *,size_t);
- void __cdecl pokebytes(unsigned,unsigned,const void *,size_t);
- #if __cplusplus
- void inline poke(unsigned segm, unsigned offs, int value)
- {
- *((int __far *) MK_FP(segm, offs)) = value;
- }
-
- int inline peek(unsigned segm, unsigned offs)
- {
- return *((int __far *) MK_FP(segm, offs));
- }
- void inline pokeb(unsigned segm, unsigned offs, char value)
- {
- *((char __far *) MK_FP(segm, offs)) = value;
- }
-
- char inline peekb(unsigned segm, unsigned offs)
- {
- return *((char __far *) MK_FP(segm, offs));
- }
- #else
- #define peek(segm, offs) (*((int __far *) MK_FP((segm), (offs))))
- #define peekb(segm, offs) (*((char __far *) MK_FP((segm), (offs))))
- #define poke(segm, offs, value) (*((int __far *) MK_FP((segm), (offs))) = (int)(value))
- #define pokeb(segm, offs, value) (*((char __far *) MK_FP((segm), (offs))) = (char)(value))
- #endif
-
- #ifndef _WINDOWS
- #ifndef DOS386
- void __CLIB _chain_intr (void (__interrupt __far * funcptr)());
- void (__interrupt __far * __CLIB _dos_getvect(unsigned vector))();
- void __CLIB _dos_setvect (unsigned vector,
- void (__interrupt __far * funcptr)());
- #if __cplusplus
- void inline (__interrupt __far * getvect(int vector))()
- {
- return _dos_getvect (vector);
- }
- void inline setvect(int vector, void (__interrupt __far * funcptr)())
- {
- _dos_setvect(vector, funcptr);
- }
- #else
- #define getvect _dos_getvect
- #define setvect _dos_setvect
- #endif
- #endif /* DOS386 */
- #endif
-
- int __cdecl bdos(int dosfunc, unsigned int dosdx, unsigned int dosal);
- #define _bdos bdos
- int __cdecl bdosptr(int, void *, unsigned);
- int __cdecl bdosx(char,void *,char);
-
- #ifndef DOS386
- unsigned __CLIB dos_alloc(unsigned);
- unsigned __CLIB dos_calloc(unsigned);
- int __CLIB dos_free(unsigned);
- #endif /* DOS386 */
- void __CLIB _copy(unsigned,unsigned,unsigned);
- unsigned long __CLIB dos_avail(void);
- #ifndef DOS386
- unsigned __CLIB dos_setblock(unsigned,unsigned);
- unsigned __CLIB _dos_setblock(unsigned,unsigned,unsigned *);
- #endif /* DOS386 */
-
- #endif
-
- int __pascal response_expand(int *,char ***);
-
- int __CLIB cputype(void);
-
- #ifndef _WIN32
- # if defined(ZTC_COMPAT)
- # if !(M_UNIX || M_XENIX)
- # if !__cplusplus
- #define WILDCARDS extern int __cdecl __wildcard; int *__wild = &__wildcard;
- # else
- #define WILDCARDS extern "C" { extern int __cdecl __wildcard; int *__wild = &__wildcard; }
- # endif
- # else
- #define WILDCARDS
- # endif
- # else
- # if !(M_UNIX || M_XENIX)
- # if !__cplusplus
- #define EXPAND_WILDCARDS extern int __cdecl __wildcard; int *__wild = &__wildcard;
- # else
- #define EXPAND_WILDCARDS extern "C" { extern int __cdecl __wildcard; int *__wild = &__wildcard; }
- # endif
- # else
- #define EXPAND_WILDCARDS
- # endif
- # endif
- #else
- # if !(M_UNIX || M_XENIX)
- # if !__cplusplus
- #define WILDCARDS int __cdecl __wildcard = 1;
- #define EXPAND_WILDCARDS int __cdecl __wildcard = 1;
- # else
- #define WILDCARDS extern "C" { int __cdecl __wildcard = 1; }
- #define EXPAND_WILDCARDS extern "C" { int __cdecl __wildcard=1; }
- # endif
- # else
- #define WILDCARDS
- #define EXPAND_WILDCARDS
- # endif
- #endif
-
- #define EXE_DOS 1
- #define EXE_DOS16RM 2
- #define EXE_ZPM 4
- #define EXE_PHAR386 8
- #define EXE_DOSX 0x10
- #define EXE_WINDOWS 0x20
- #define EXE_OS2 0x40
- #define EXE_SCOUNIX 0x80
- #define EXE_OS2_2 0x100
- #define EXE_WINDOWSNT 0x200
-
- extern unsigned short __cdecl _exe_type;
-
- #if !(M_UNIX || M_XENIX)
- #pragma pack()
- #endif
-
- #ifdef _WINDOWS
- extern void __far __pascal DOS3CALL(void);
- #define int21h __asm call DOS3CALL
- #else
- #define int21h __asm int 21h
- #endif
-
- #if __cplusplus
- inline unsigned _getdiskfree(unsigned driveno, struct _diskfree_t *diskspace)
- {
- return _dos_getdiskfree(driveno, diskspace); /*needed for MSVCNT compatibility*/
- }
- #else
- #define _getdiskfree _dos_getdiskfree /*needed for MSVCNT compatibility*/
- #endif
-
- #if __cplusplus
- }
- #endif
-
- #endif
-