www.pudn.com > linuxcici1.rar > DOS.H


/*	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