home *** CD-ROM | disk | FTP | other *** search
- /* 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