/* Copyright (C) 1999 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ #ifndef __dj_include_dos_h_ #define __dj_include_dos_h_ #ifndef __dj_ENFORCE_ANSI_FREESTANDING #ifndef __STRICT_ANSI__ #ifndef _POSIX_SOURCE #include int _detect_80387(void); struct DWORDREGS { unsigned long edi; unsigned long esi; unsigned long ebp; unsigned long cflag; unsigned long ebx; unsigned long edx; unsigned long ecx; unsigned long eax; unsigned short eflags; }; struct DWORDREGS_W { unsigned long di; unsigned long si; unsigned long bp; unsigned long cflag; unsigned long bx; unsigned long dx; unsigned long cx; unsigned long ax; unsigned short flags; }; struct WORDREGS { unsigned short di, _upper_di; unsigned short si, _upper_si; unsigned short bp, _upper_bp; unsigned short cflag, _upper_cflag; unsigned short bx, _upper_bx; unsigned short dx, _upper_dx; unsigned short cx, _upper_cx; unsigned short ax, _upper_ax; unsigned short flags; }; struct BYTEREGS { unsigned short di, _upper_di; unsigned short si, _upper_si; unsigned short bp, _upper_bp; unsigned long cflag; unsigned char bl; unsigned char bh; unsigned short _upper_bx; unsigned char dl; unsigned char dh; unsigned short _upper_dx; unsigned char cl; unsigned char ch; unsigned short _upper_cx; unsigned char al; unsigned char ah; unsigned short _upper_ax; unsigned short flags; }; union REGS { /* Compatible with DPMI structure, except cflag */ struct DWORDREGS d; #ifdef _NAIVE_DOS_REGS struct WORDREGS x; #else #ifdef _BORLAND_DOS_REGS struct DWORDREGS x; #else struct DWORDREGS_W x; #endif #endif struct WORDREGS w; struct BYTEREGS h; }; struct SREGS { unsigned short es; unsigned short ds; unsigned short fs; unsigned short gs; unsigned short cs; unsigned short ss; }; struct ftime { unsigned ft_tsec:5; /* 0-29, double to get real seconds */ unsigned ft_min:6; /* 0-59 */ unsigned ft_hour:5; /* 0-23 */ unsigned ft_day:5; /* 1-31 */ unsigned ft_month:4; /* 1-12 */ unsigned ft_year:7; /* since 1980 */ }; struct date { short da_year; char da_day; char da_mon; }; struct time { unsigned char ti_min; unsigned char ti_hour; unsigned char ti_hund; unsigned char ti_sec; }; struct dfree { unsigned df_avail; unsigned df_total; unsigned df_bsec; unsigned df_sclus; }; #ifdef __cplusplus extern "C" { #endif extern unsigned short _osmajor, _osminor; extern const char * _os_flavor; extern int _doserrno; unsigned short _get_dos_version(int); int int86(int ivec, union REGS *in, union REGS *out); int int86x(int ivec, union REGS *in, union REGS *out, struct SREGS *seg); int intdos(union REGS *in, union REGS *out); int intdosx(union REGS *in, union REGS *out, struct SREGS *seg); int bdos(int func, unsigned dx, unsigned al); int bdosptr(int func, void *dx, unsigned al); #define bdosptr(a, b, c) bdos(a, (unsigned)(b), c) #define intdos(a, b) int86(0x21, a, b) #define intdosx(a, b, c) int86x(0x21, a, b, c) int getftime(int handle, struct ftime *ftimep); int setftime(int handle, struct ftime *ftimep); int getcbrk(void); int setcbrk(int new_value); void getdate(struct date *); /* void gettime(struct time *); */ void setdate(struct date *); void settime(struct time *); void getdfree(unsigned char drive, struct dfree *ptr); void delay(unsigned msec); /* int _get_default_drive(void); void _fixpath(const char *, char *); */ /* * For compatibility with other DOS C compilers. */ #define _A_NORMAL 0x00 /* Normal file - No read/write restrictions */ #define _A_RDONLY 0x01 /* Read only file */ #define _A_HIDDEN 0x02 /* Hidden file */ #define _A_SYSTEM 0x04 /* System file */ #define _A_VOLID 0x08 /* Volume ID file */ #define _A_SUBDIR 0x10 /* Subdirectory */ #define _A_ARCH 0x20 /* Archive file */ #define _enable enable #define _disable disable struct _dosdate_t { unsigned char day; /* 1-31 */ unsigned char month; /* 1-12 */ unsigned short year; /* 1980-2099 */ unsigned char dayofweek; /* 0-6, 0=Sunday */ }; #define dosdate_t _dosdate_t struct _dostime_t { unsigned char hour; /* 0-23 */ unsigned char minute; /* 0-59 */ unsigned char second; /* 0-59 */ unsigned char hsecond; /* 0-99 */ }; #define dostime_t _dostime_t #pragma pack(push,1) struct _find_t { char reserved[21]; unsigned char attrib; unsigned short wr_time; unsigned short wr_date; unsigned long size; char name[256]; }; #pragma pack(pop) #define find_t _find_t struct _diskfree_t { unsigned short total_clusters; unsigned short avail_clusters; unsigned short sectors_per_cluster; unsigned short bytes_per_sector; }; #define diskfree_t _diskfree_t struct _DOSERROR { int exterror; #ifdef __cplusplus char errclass; #else char class; #endif char action; char locus; }; #define DOSERROR _DOSERROR unsigned int _dos_creat(const char *_filename, unsigned int _attr, int *_handle); unsigned int _dos_creatnew(const char *_filename, unsigned int _attr, int *_handle); unsigned int _dos_open(const char *_filename, unsigned int _mode, int *_handle); unsigned int _dos_write(int _handle, const void *_buffer, unsigned int _count, unsigned int *_result); unsigned int _dos_read(int _handle, void *_buffer, unsigned int _count, unsigned int *_result); unsigned int _dos_close(int _handle); unsigned int _dos_commit(int _handle); unsigned int _dos_findfirst(char *_name, unsigned int _attr, struct _find_t *_result); unsigned int _dos_findnext(struct _find_t *_result); void _dos_getdate(struct _dosdate_t *_date); unsigned int _dos_setdate(struct _dosdate_t *_date); void _dos_gettime(struct _dostime_t *_time); unsigned int _dos_settime(struct _dostime_t *_time); unsigned int _dos_getftime(int _handle, unsigned int *_p_date, unsigned int *_p_time); unsigned int _dos_setftime(int _handle, unsigned int _date, unsigned int _time); unsigned int _dos_getfileattr(const char *_filename, unsigned int *_p_attr); unsigned int _dos_setfileattr(const char *_filename, unsigned int _attr); void _dos_getdrive(unsigned int *_p_drive); void _dos_setdrive(unsigned int _drive, unsigned int *_p_drives); unsigned int _dos_getdiskfree(unsigned int _drive, struct _diskfree_t *_diskspace); int _dosexterr(struct _DOSERROR *_p_error); #define dosexterr(_ep) _dosexterr(_ep) #define int386(_i, _ir, _or) int86(_i, _ir, _or) #define int386x(_i, _ir, _or, _sr) int86x(_i, _ir, _or, _sr) #ifdef __cplusplus } #endif #endif /* !_POSIX_SOURCE */ #endif /* !__STRICT_ANSI__ */ #endif /* !__dj_ENFORCE_ANSI_FREESTANDING */ #ifndef __dj_ENFORCE_FUNCTION_CALLS #endif /* !__dj_ENFORCE_FUNCTION_CALLS */ #ifndef _USE_LFN #define _USE_LFN (1) #endif #endif /* !__dj_include_dos_h_ */