0,0 → 1,275 |
/* 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 <pc.h> |
|
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_ */ |