home *** CD-ROM | disk | FTP | other *** search
- /* dos.h - This file defines data structures for DOS access.
- * $Version: 1.2 $
- * Copyright (c) 1988-91 Intel Corporation, ALL RIGHTS RESERVED.
- */
-
- #ifndef _dosh
- #define _dosh
- /*lint -library */
-
- #include <i86.h>
-
- #pragma fixedparams("_dos_allocmem", "_dos_close", "_dos_creat")
- #pragma fixedparams("_dos_creatnew", "_dos_findfirst", "_dos_findnext")
- #pragma fixedparams("_dos_freemem", "_dos_getdate", "_dos_getdiskfree")
- #pragma fixedparams("_dos_getdrive", "_dos_getfileattr", "_dos_getftime")
- #pragma fixedparams("_dos_gettime", "_dos_open", "_dos_read")
- #pragma fixedparams("_dos_setblock", "_dos_setdate", "_dos_setdrive")
- #pragma fixedparams("_dos_setfileattr", "_dos_setftime", "_dos_settime")
- #pragma fixedparams("_dos_write")
- #pragma fixedparams("bdos", "_ctlcint", "dosexterr", "int86")
- #pragma fixedparams("int86x", "intdos", "intdosx", "loadexec")
- #pragma fixedparams("ptrdiff", "_quit", "sysint", "sysint21")
-
- /*
- * File attribute masks:
- */
- #define _A_NORMAL 0x00 /* Normal file access, read/write OK */
- #define _A_RDONLY 0x01 /* File is read-only */
- #define _A_HIDDEN 0x02 /* File is hidden */
- #define _A_SYSTEM 0x04 /* File is a system file */
- #define _A_VOLID 0x08 /* File holds volume ID */
- #define _A_SUBDIR 0x10 /* File is a subdirectory */
- #define _A_ARCH 0x20 /* File needs to be archived */
-
-
- #ifndef _FAR
- #define _FAR far
- #define _NEAR near
- #endif
-
- /* used by functions needing the DS register or seg. and off. of a pointer */
-
- extern unsigned _dataseg;
-
- #define DATASEG() _dataseg
-
- #define FP_OFF(p) (((unsigned *)(&(p)))[0])
- #define FP_SEG(p) (((unsigned *)(&(p)))[1])
- #define _NP_OFF(p) ((unsigned)p)
- #define _NP_SEG(p) _dataseg
-
- #if !_FAR_DATA_ /* near data */
- #define P_SEG(p) _NP_SEG(p)
- #define P_OFF(p) _NP_OFF(p)
- #else /* far or huge data */
- #define P_SEG(p) FP_SEG(p)
- #define P_OFF(p) FP_OFF(p)
- #endif
-
- #define _doserrno ((_thread_ptr()->__doserrno)) /* DOS system error variable */
-
- #pragma align (DOSERROR)
- struct DOSERROR {
- int exterror;
- char class, action, locus;
- };
-
- /*
- * Structure used by loadexec function:
- */
- #pragma align (pblock)
- struct pblock {
- unsigned env; /* segment address of environment */
- char _FAR *com_line; /* program command line */
- char _FAR *fcb1;
- char _FAR *fcb2;
- };
-
- /*
- * Used by sysint() and sysint21():
- */
- #pragma align (regval)
- struct regval {
- unsigned int ax, bx, cx, dx, si, di, ds, es, bp;
- };
-
- #ifndef _regs
- #pragma align (DWORDREGS)
- #pragma align (WORDREGS)
- #pragma align (BYTEREGS)
- union REGS {
- struct DWORDREGS {unsigned eax, ebx, ecx, edx, esi,
- edi, cflag, eflags, ebp;} w;
-
- struct WORDREGS {unsigned ax, bx, cx, dx, si,
- di, cflag, flags, bp;} x;
-
- #if _ARCHITECTURE_ == 386 || _ARCHITECTURE_ == 486
-
- struct BYTEREGS {unsigned al:8, ah:8, :16, bl:8, bh:8, :16,
- cl:8, ch:8, :16, dl:8, dh:8, :16;} h;
- #else
- struct BYTEREGS {unsigned al:8, ah:8, bl:8, bh:8,
- cl:8, ch:8, dl:8, dh:8;} h;
- #endif
-
- };
-
- #pragma align (SREGS)
- struct SREGS {
- unsigned short es, cs, ss, ds, fs, gs;
- };
-
- #define _regs
- #endif /* _regs */
-
- #ifndef _find_t
- /* structure used by _dos_findfirst */
- /*
- * Structure used by _dos_findfirst:
- */
- #pragma noalign (find_t)
- struct find_t {
- char reserved[21]; /* Reserved for DOS */
- char attrib; /* Returned attribute */
- unsigned short wr_time; /* Time file last written */
- unsigned short wr_date; /* Date file last written */
- long size; /* Size of file */
- char name[13]; /* String containing the filename */
- };
- #define _find_t
- #endif
-
- /*
- * Structure used by _dos_getdate and _dos_setdate:
- */
- #pragma align (dosdate_t)
- struct dosdate_t {
- unsigned char day; /* Range: 1-31 */
- unsigned char month; /* Range: 1-12 */
- unsigned short year; /* Range: 1980-2099 */
- unsigned char dayofweek; /* Range: 0-6 (0=Sun, 1=Mon, etc.) */
- };
-
- /*
- * Structure used by _dos_gettime and _dos_settime:
- */
- #pragma align (dostime_t)
- struct dostime_t {
- unsigned char hour; /* Range: 0-23 */
- unsigned char minute; /* Range: 0-59 */
- unsigned char second; /* Range: 0-59 */
- unsigned char hsecond; /* Range: 0-99 */
- };
-
- /*
- * Structure used by _dos_getdiskfree:
- */
- #pragma align (diskfree_t)
- struct diskfree_t {
- unsigned short total_clusters;
- unsigned short avail_clusters;
- unsigned short sectors_per_cluster;
- unsigned short bytes_per_sector;
- };
-
- /*
- * Function prototypes:
- */
- int bdos(int, unsigned int, unsigned int);
- void _FAR _ctlcint(void);
- unsigned _dos_allocmem(unsigned, unsigned *);
- unsigned _dos_close(int);
- unsigned _dos_creat(const char *, unsigned, int *);
- unsigned _dos_creatnew(const char *, unsigned, int *);
- unsigned _dos_findfirst(const char *, unsigned, struct find_t *);
- unsigned _dos_findnext(struct find_t *);
- unsigned _dos_freemem(unsigned);
- void _dos_getdate(struct dosdate_t *);
- unsigned _dos_getdiskfree(unsigned, struct diskfree_t *);
- void _dos_getdrive(unsigned *);
- unsigned _dos_getfileattr(const char *, unsigned *);
- unsigned _dos_getftime(int, unsigned *, unsigned *);
- void _dos_gettime(struct dostime_t *);
- unsigned _dos_open(const char *, unsigned, int *);
- unsigned _dos_read(int, void *, unsigned, unsigned *);
- unsigned _dos_setblock(unsigned, unsigned, unsigned *);
- unsigned _dos_setdate(struct dosdate_t *);
- void _dos_setdrive(unsigned, unsigned *);
- unsigned _dos_setfileattr(const char *, unsigned);
- unsigned _dos_setftime(int, unsigned, unsigned);
- unsigned _dos_settime(struct dostime_t *);
- unsigned _dos_write(int, const void *, unsigned, unsigned *);
- int dosexterr(struct DOSERROR *);
- int int86(int, const union REGS *, union REGS *);
- int int86x(int, const union REGS *, union REGS *, struct SREGS *);
- int intdos(const union REGS *, union REGS *);
- int intdosx(const union REGS *, union REGS *, struct SREGS *);
- int loadexec(char _FAR *, struct pblock _FAR *, int);
- long ptrdiff(void _FAR *, void _FAR *);
- void _quit(int);
- int sysint(unsigned, const struct regval *, struct regval *);
- int sysint21(const struct regval *, struct regval *);
-
-
- /*
- * Non-ANSI function also prototyped in stdlib.h
- */
- #ifndef _stdlib_dos
- #define _stdlib_dos
- #pragma fixedparams("segread")
- void segread(struct SREGS *);
- #endif
-
- #ifndef _dosh_builtin
- #define _dosh_builtin
- /*
- * Processor status flag values:
- */
- #define _FLAG_CARRY 0x0001 /* Carry flag */
- #define _FLAG_PARITY 0x0004 /* Parity flag */
- #define _FLAG_AUXCARRY 0x0010 /* Auxillary carry flag */
- #define _FLAG_ZERO 0x0040 /* Zero flag */
- #define _FLAG_SIGN 0x0080 /* Sign flag */
- #define _FLAG_TRAP 0x0100 /* Trap flag */
- #define _FLAG_INTERRUPT 0x0200 /* Interrupt enable flag */
- #define _FLAG_DIRECTION 0x0400 /* Direction flag */
- #define _FLAG_OVERFLOW 0x0800 /* Overflow flag */
- #define _FLAG_IOPL 0x3000 /* IO privilege level mask */
- #define _FLAG_NESTED 0x4000 /* Nested task flag */
- #define _FLAG_RESUME 0x10000 /* Resume flag */
- #define _FLAG_VM 0x20000 /* Virtual 86 mode */
-
- #endif /* _dosh_builtin */
-
- #endif /* _dosh */
-
-