/* dos.h Defines structs, unions, macros, and functions for dealing with MSDOS and the Intel iAPX86 microprocessor family. Copyright (c) Borland International 1987,1988 All Rights Reserved. */ #if __STDC__ #define _Cdecl #else #define _Cdecl cdecl #endif #if !defined(__DOS_DEF_) #define __DOS_DEF_ /* Variables */ extern int _Cdecl _8087; extern int _Cdecl _argc; extern char **_Cdecl _argv; extern char **_Cdecl environ; extern int _Cdecl _doserrno; extern unsigned _Cdecl _heaplen; extern unsigned char _Cdecl _osmajor; extern unsigned char _Cdecl _osminor; extern unsigned _Cdecl _psp; extern unsigned _Cdecl _stklen; extern unsigned _Cdecl _version; #define FA_RDONLY 0x01 /* Read only attribute */ #define FA_HIDDEN 0x02 /* Hidden file */ #define FA_SYSTEM 0x04 /* System file */ #define FA_LABEL 0x08 /* Volume label */ #define FA_DIREC 0x10 /* Directory */ #define FA_ARCH 0x20 /* Archive */ #define NFDS 20 /* Maximum number of fds */ struct fcb { char fcb_drive; /* 0 = default, 1 = A, 2 = B */ char fcb_name[8]; /* File name */ char fcb_ext[3]; /* File extension */ short fcb_curblk; /* Current block number */ short fcb_recsize; /* Logical record size in bytes */ long fcb_filsize; /* File size in bytes */ short fcb_date; /* Date file was last written */ char fcb_resv[10]; /* Reserved for DOS */ char fcb_currec; /* Current record in block */ long fcb_random; /* Random record number */ }; struct xfcb { char xfcb_flag; /* Contains 0xff to indicate xfcb */ char xfcb_resv[5]; /* Reserved for DOS */ char xfcb_attr; /* Search attribute */ struct fcb xfcb_fcb; /* The standard fcb */ }; struct country { int 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 DOSERROR { int exterror; char class; char action; char locus; }; struct dfree { unsigned df_avail; unsigned df_total; unsigned df_bsec; unsigned df_sclus; }; struct fatinfo { char fi_sclus; char fi_fatid; int fi_nclus; int fi_bysec; }; struct devhdr { long dh_next; /* Next device pointer */ short dh_attr; /* Attributes */ unsigned short dh_strat; /* Driver strategy routine */ unsigned short dh_inter; /* Driver interrupt routine */ char dh_name[8]; /* Device name */ }; struct time { unsigned char ti_min; /* Minutes */ unsigned char ti_hour; /* Hours */ unsigned char ti_hund; /* Hundredths of seconds */ unsigned char ti_sec; /* Seconds */ }; struct date { int da_year; /* Year - 1980 */ char da_day; /* Day of the month */ char da_mon; /* Month (1 = Jan) */ }; struct WORDREGS { unsigned int 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 int es; unsigned int cs; unsigned int ss; unsigned int ds; }; struct REGPACK { unsigned r_ax, r_bx, r_cx, r_dx; unsigned r_bp, r_si, r_di, r_ds, r_es, r_flags; }; #define FP_OFF(fp) ((unsigned)(fp)) #define FP_SEG(fp) ((unsigned)((unsigned long)(fp) >> 16)) typedef struct { char drive; /* do not change */ char pattern [13]; /* these fields, */ char reserved [7]; /* Microsoft reserved */ char attrib; short time; short date; long size; char nameZ [13]; /* result of the search, asciiz */ } dosSearchInfo; /* used with DOS functions 4E, 4F */ int _Cdecl absread (int drive, int nsects, int lsect, void *buffer); int _Cdecl abswrite(int drive, int nsects, int lsect, void *buffer); int _Cdecl allocmem(unsigned size, unsigned *segp); int _Cdecl bdos (int dosfun, unsigned dosdx, unsigned dosal); int _Cdecl bdosptr (int dosfun, void *argument, unsigned dosal); struct country *_Cdecl country (int xcode, struct country *cp); void _Cdecl ctrlbrk (int _Cdecl (*handler)(void)); void _Cdecl delay (unsigned milliseconds); void _Cdecl disable (void); int _Cdecl dosexterr (struct DOSERROR *eblkp); long _Cdecl dostounix (struct date *d, struct time *t); void __emit__(); void _Cdecl enable (void); int _Cdecl freemem (unsigned segx); int _Cdecl getcbrk (void); void _Cdecl getdate (struct date *datep); void _Cdecl getdfree(unsigned char drive, struct dfree *dtable); void _Cdecl getfat (unsigned char drive, struct fatinfo *dtable); void _Cdecl getfatd (struct fatinfo *dtable); unsigned _Cdecl getpsp (void); int _Cdecl getswitchar (void); void _Cdecl gettime (struct time *timep); void interrupt (* _Cdecl getvect(int interruptno)) (); int _Cdecl getverify (void); void _Cdecl harderr (int _Cdecl (*handler)()); void _Cdecl hardresume (int axret); void _Cdecl hardretn(int retn); int _Cdecl inport (int portid); unsigned char _Cdecl inportb(int portid); int _Cdecl int86 (int intno, union REGS *inregs, union REGS *outregs); int _Cdecl int86x (int intno, union REGS *inregs, union REGS *outregs, struct SREGS *segregs); int _Cdecl intdos (union REGS *inregs, union REGS *outregs); int _Cdecl intdosx (union REGS *inregs, union REGS *outregs, struct SREGS *segregs); void _Cdecl intr (int intno, struct REGPACK *preg); void _Cdecl keep (unsigned char status, unsigned size); void _Cdecl nosound (void); void _Cdecl outport (int portid, int value); void _Cdecl outportb(int portid, unsigned char value); char *_Cdecl parsfnm (const char *cmdline, struct fcb *fcb, int opt); int _Cdecl peek (unsigned segment, unsigned offset); char _Cdecl peekb (unsigned segment, unsigned offset); void _Cdecl poke (unsigned segment, unsigned offset, int value); void _Cdecl pokeb (unsigned segment, unsigned offset, char value); int _Cdecl randbrd (struct fcb *fcb, int rcnt); int _Cdecl randbwr (struct fcb *fcb, int rcnt); void _Cdecl segread (struct SREGS *segp); int _Cdecl setblock(unsigned segx, unsigned newsize); int _Cdecl setcbrk (int cbrkvalue); void _Cdecl setdate (struct date *datep); void _Cdecl setswitchar (char ch); void _Cdecl settime (struct time *timep); void _Cdecl setvect (int interruptno, void interrupt (*isr) ()); void _Cdecl setverify (int value); void _Cdecl sleep (unsigned seconds); void _Cdecl sound (unsigned frequency); void _Cdecl unixtodos (long time, struct date *d, struct time *t); int _Cdecl unlink (const char *path); /* These are in-line functions. These prototypes just clean up some syntax checks and code generation. */ void _Cdecl __cli__ (void); void _Cdecl __sti__ (void); unsigned char _Cdecl __inportb__(int portid); void _Cdecl __outportb__ (int portid, unsigned char value); void _Cdecl __int__ (int interruptnum); #define disable() __cli__() /* Clear interrupt flag */ #define enable() __sti__() /* Set interrupt flag */ #define inportb(portid) __inportb__(portid) /* Byte IN instruction */ #define outportb(portid, v) __outportb__(portid,v)/* Byte OUT instruction */ #define geninterrupt(i) __int__(i) /* Interrupt instruction */ /* some other compilers use inp, outp for inportb, outportb */ #define inp(portid) inportb(portid) #define outp(portid,v) outportb(portid,v) #if !__STDC__ char far *cdecl getdta(void); void cdecl setdta(char far *dta); #define MK_FP(seg,ofs) ((void far *) \ (((unsigned long)(seg) << 16) | (unsigned)(ofs))) #define poke(a,b,c) (*((int far*)MK_FP((a),(b))) = (int)(c)) #define pokeb(a,b,c) (*((char far*)MK_FP((a),(b))) = (char)(c)) #define peek(a,b) (*((int far*)MK_FP((a),(b)))) #define peekb(a,b) (*((char far*)MK_FP((a),(b)))) #endif #endif