This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/dm/include/dos.h

676 lines
18 KiB
C

/* Copyright (C) 1986-2001 by Digital Mars. $Revision: 1.1.1.2 $ */
#if __SC__ || __RCC__
#pragma once
#endif
#ifndef __DOS_H
#define __DOS_H 1
#if __cplusplus
extern "C" {
#endif
/* Define _CRTAPI1 (for compatibility with the NT SDK) */
#ifndef _CRTAPI1
#define _CRTAPI1 __cdecl
#endif
/* Define _CRTAPI2 (for compatibility with the NT SDK) */
#ifndef _CRTAPI2
#define _CRTAPI2 __cdecl
#endif
/* Define CRTIMP */
#ifndef _CRTIMP
#if defined(_WIN32) && defined(_DLL)
#define _CRTIMP __declspec(dllimport)
#else
#define _CRTIMP
#endif
#endif
#if __OS2__ && __INTSIZE == 4
#define __CLIB __stdcall
#else
#define __CLIB __cdecl
#endif
#if !(M_XENIX || M_UNIX)
#pragma pack(1)
#endif
#if !defined(_WCHAR_T_DEFINED)
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED 1
#endif
#if _M_AMD64
typedef unsigned long long size_t;
#else
typedef unsigned size_t;
#endif
extern unsigned __cdecl _stack;
#if defined(DOS386)
extern unsigned short _x386_zero_base_selector;
extern void *_x386_zero_base_ptr;
extern void __far *(*_x386_mk_protected_ptr)(unsigned long abs_address);
extern int (*_x386_free_protected_ptr)(void __far *);
extern unsigned long(*_x386_get_abs_address)(void __far *ptr);
extern unsigned int (_x386_coreleft)(void);
extern void* (_x386_map_physical_address)(void* abs_addr, unsigned size);
extern int (_x386_memlock)(void __far *pointer, unsigned int length);
extern int (_x386_memunlock)(void __far *pointer, unsigned int length);
#endif
#ifndef __REGS_DEFINED
#define __REGS_DEFINED
#if __INTSIZE == 4
#pragma pack(1)
struct _DWORDREGS {unsigned eax,ebx,ecx,edx,esi,edi,cflag,flags;};
#define DWORDREGS _DWORDREGS
struct _WORDREGS
{ unsigned short ax,eaxmsw,bx,ebxmsw,cx,ecxmsw,dx,edxmsw,
si,esimsw,di,edimsw;
unsigned cflag,flags;
};
#define WORDREGS _WORDREGS
struct _BYTEREGS
{ unsigned char al,ah,ax2,ax3,bl,bh,bx2,bx3,
cl,ch,cx2,cx3,dl,dh,dx2,dx3;
};
#define BYTEREGS _BYTEREGS
union _REGS { struct _DWORDREGS e; struct _WORDREGS x; struct _BYTEREGS h; };
#define REGS _REGS
struct _SREGS { unsigned short es,cs,ss,ds,fs,gs; };
#define SREGS _SREGS
#pragma pack()
#else /* __INTSIZE == 4 */
#pragma pack(1)
struct WORDREGS { unsigned 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 es,cs,ss,ds; };
#pragma pack()
#define _REGS REGS
#define _SREGS SREGS
#define _WORDREGS WORDREGS
#define _BYTEREGS BYTEREGS
#endif /* __INTSIZE==4 */
#endif /* __REGS_DEFINED */
#ifndef __NT__
#define disable() __emit__((char)(0xFA))
#define _disable() __emit__((char)(0xFA))
#define enable() __emit__((char)(0xFB))
#define _enable() __emit__((char)(0xFB))
#define geninterrupt(intr) __emit__(0xCD,(intr))
int __cdecl int86(int,union REGS *,union REGS *);
int __cdecl int86x(int,union REGS *,union REGS *,struct SREGS *);
int __cdecl intdos(union REGS *,union REGS *);
int __cdecl intdosx(union REGS *,union REGS *,struct SREGS *);
void __CLIB segread(struct SREGS *);
#define _int86 int86
#define _int86x int86x
#define _intdos intdos
#define _intdosx intdosx
#define _segread segread
#if DOS386
int __cdecl int86_real(int,union REGS *,union REGS *);
int __cdecl int86x_real(int,union REGS *,union REGS *,struct SREGS *);
#endif
#endif
#if (M_UNIX || M_XENIX)
#define VTIOC ('v' << 8)
#define VT_OPENQRY (VTIOC | 1)
#define VT_SETMODE (VTIOC | 2)
#define VT_GETMODE (VTIOC | 3)
#define VT_RELDISP (VTIOC | 4)
#define VT_ACTIVATE (VTIOC | 5)
#define VT_FALSE 0
#define VT_TRUE 1
#define VT_ACKACQ 2
#define VT_AUTO 0
#define VT_PROCESS 1
struct vt_mode {char mode, waitv; short relsig, acqsig, frsig;};
typedef int (*_vt_sig_func_t)(int);
void _vt_get_mode(struct vt_mode *p);
int _vt_set_mode(struct vt_mode *p);
int _vt_get_num(void);
int _vt_activate(int vt_num);
int _vt_add(_vt_sig_func_t func);
int _vt_remove(_vt_sig_func_t func);
#include <sys/stat.h>
#ifdef __NT__
struct FINDW
{
struct stat stat;
unsigned short attribute;
unsigned short time,date;
unsigned long size;
wchar_t name[16];
};
struct FINDA
#else
struct FIND
#endif
{
struct stat stat;
unsigned short attribute;
unsigned short time,date;
unsigned long size;
char name[16];
};
#define FA_NORMAL 0x00
#define FA_DIREC S_IFDIR
#else /* !M_UNIX */
#pragma pack(1)
#ifdef __NT__
struct FINDW /* struct used by wfindfirst() and wfindnext() */
{ char reserved[21]; /* reserved by DOS */
char attribute; /* attribute found (FA_XXXX) */
unsigned short time,date; /* file's time and date */
unsigned long size; /* file's size */
#if !defined(_WIN32)
wchar_t name[13]; /* filename followed by 0 byte */
#else
wchar_t name[260];
#endif
};
struct FINDA /* struct used by findfirst() and findnext() */
#else
struct FIND /* struct used by findfirst() and findnext() */
#endif
{ char reserved[21]; /* reserved by DOS */
char attribute; /* attribute found (FA_XXXX) */
unsigned short time,date; /* file's time and date */
unsigned long size; /* file's size */
#if !defined(_WIN32)
char name[13]; /* filename followed by 0 byte */
#else
char name[260];
#endif
};
struct find_t /* used by _dos_findfirst() and _dos_findnext() */
{ char reserved[21]; /* reserved by DOS */
char attrib; /* attribute found (FA_XXXX) */
unsigned short wr_time,wr_date; /* file's last write */
unsigned long size; /* file's size */
#if !defined(_WIN32)
char name[13]; /* filename followed by 0 byte */
#else
char name[260];
#endif
};
#define _find_t find_t
#pragma pack()
#define FA_NORMAL 0x00
#define FA_RDONLY 0x01
#define FA_HIDDEN 0x02
#define FA_SYSTEM 0x04
#define FA_LABEL 0x08
#define FA_DIREC 0x10
#define FA_ARCH 0x20
#define _A_NORMAL 0x00
#define _A_RDONLY 0x01
#define _A_HIDDEN 0x02
#define _A_SYSTEM 0x04
#define _A_VOLID 0x08
#define _A_SUBDIR 0x10
#define _A_ARCH 0x20
#endif
#ifdef __NT__
#ifdef _UNICODE
#define FIND FINDW
#else
#define FIND FINDA
#endif
struct FINDA * __CLIB findfirst(const char *,int);
struct FINDA * __CLIB findnext(void);
struct FINDW * __CLIB _wfindfirst (const wchar_t *, int);
struct FINDW * __CLIB _wfindnext (void);
#else
struct FIND * __CLIB findfirst(const char *,int),* __CLIB findnext(void);
#endif
#if defined(MSDOS) || (defined(_WINDOWS) && !defined(__NT__))
unsigned __CLIB _dos_findfirst(const char *, unsigned, struct find_t *);
unsigned __CLIB _dos_findnext(struct find_t *);
#endif
#if defined(MSDOS)
void __CLIB _dos_keep(unsigned, unsigned);
#endif
#ifndef __NT__
#define _FP_OFF(fp) (*((unsigned __far *)&(fp)))
#define FP_OFF _FP_OFF
#if __INTSIZE == 4
extern unsigned __CLIB FP_SEG(void __far *);
#define _FP_SEG FP_SEG
#else
#define _FP_SEG(fp) (*((unsigned __far *)&(fp)+1))
#define FP_SEG _FP_SEG
#endif
#if __INTSIZE == 4
extern void __far * __CLIB MK_FP(unsigned short,unsigned);
#define MK_FP(seg,offset) MK_FP((seg),(unsigned)(offset))
#else
#define MK_FP(seg,offset) \
((void __far *)(((unsigned long)(seg)<<16) | (unsigned)(offset)))
#endif
#endif
#define _MK_FP MK_FP
#if __INTSIZE == 2
void __far * __cdecl farmalloc(unsigned long size);
void __far * __cdecl farcalloc(unsigned long numelems,unsigned long elemsize);
void __far * __cdecl farrealloc(void __far *oldptr,unsigned long newsize);
int __cdecl farfree(void __far *ptr);
unsigned long __cdecl farcoreleft(void);
#endif
#pragma pack(1)
struct DOSERROR
{
int exterror; /* extended error code */
char eclass; /* error class */
char action; /* recommended action */
char locus; /* error locus */
};
#define _DOSERROR DOSERROR
#define errclass eclass
struct COUNTRY {
short 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 diskfree_t {
unsigned total_clusters;
unsigned avail_clusters;
unsigned sectors_per_cluster;
unsigned bytes_per_sector;
};
#define _diskfree_t diskfree_t
struct dos_date_t
{
unsigned char day;
unsigned char month;
unsigned short year;
unsigned char dayofweek;
};
#define _dosdate_t dos_date_t
struct _fatinfo
{
char fi_sclus;
char fi_fatid;
unsigned fi_nclus;
int fi_bysec;
};
#define fatinfo _fatinfo
struct dos_time_t
{
unsigned char hour;
unsigned char minute;
unsigned char second;
unsigned char hsecond;
};
#define _dostime_t dos_time_t
struct time
{
unsigned char ti_min;
unsigned char ti_hour;
unsigned char ti_hund;
unsigned char ti_sec;
};
struct date
{
int da_year;
char da_day;
char da_mon;
};
struct fcb
{
char fcb_drive;
char fcb_name[8];
char fcb_ext[3];
short fcb_curblk;
short fcb_filesize;
short fcb_date;
char fcb_resv[10];
char fcb_crrec;
long fcb_random;
};
#pragma pack()
#ifndef __NT__
struct COUNTRY *__CLIB country( int , struct COUNTRY *);
extern unsigned int __CLIB _osversion;
#ifndef DOS386
int __CLIB getcbrk(void);
void __CLIB ctrlbrk(int (*FarPtr)());
int __CLIB setcbrk(int value);
void __CLIB getfat(unsigned char disk, struct fatinfo *fat);
void __CLIB getfatd(struct fatinfo *fat);
int __CLIB getverify(void);
void __CLIB setverify(int value);
char __far * __CLIB getdta(void);
void __CLIB setdta(char __far *dta);
unsigned __CLIB getpsp(void);
int __CLIB setblock(unsigned segment, unsigned size);
char * __CLIB parsfnm(const char *cmdline, struct fcb *fcb, int opt);
#endif /* DOS386 */
#endif /* __NT__ */
#ifndef DOS386
void __CLIB getdate(struct date *datePtr);
void __CLIB gettime(struct time *timePtr);
#endif
unsigned __CLIB _dos_lock(int, int, unsigned long, unsigned long);
unsigned long __CLIB _dos_seek(int, unsigned long, int);
int __CLIB dos_creat(char *,int);
int __CLIB _dos_creat(const char *,unsigned, int *);
int __CLIB _dos_creatnew(const char *,unsigned , int *);
unsigned __CLIB _dos_open(const char *, unsigned,int *);
int __CLIB dos_close(int);
unsigned __CLIB _dos_read(int, void __far *,unsigned,unsigned *);
unsigned __CLIB _dos_write(int, const void __far *,unsigned,unsigned *);
int __CLIB dos_get_ctrl_break(void);
#ifndef DOS386
int __CLIB dos_abs_disk_read(int,int,long,char *);
int __CLIB dos_abs_disk_write(int,int,long,const char *);
#endif
void __CLIB dos_set_verify(int);
void __CLIB dos_set_ctrl_break(int);
int __CLIB dos_get_verify(void);
int __CLIB getcurdir(int drive,char *dir);
char * __CLIB _getdcwd(int drive,char *Pbuf,int PbufLen);
unsigned __CLIB _dos_commit(int);
int __CLIB dos_exterr(struct DOSERROR *);
int __CLIB dosexterr(struct DOSERROR *);
int __CLIB setdisk(int);
int __CLIB getdisk(void);
long __CLIB dos_getdiskfreespace(int);
unsigned __CLIB _dos_getdiskfree(unsigned, struct diskfree_t *);
void __CLIB dos_setdrive(unsigned, unsigned *);
void __CLIB dos_getdrive(unsigned *);
unsigned __CLIB dos_setftime(int, unsigned, unsigned);
unsigned __CLIB dos_getftime(int, unsigned *, unsigned *);
unsigned __CLIB dos_setfileattr(const char *, unsigned);
unsigned __CLIB dos_getfileattr(const char *, unsigned *);
unsigned __CLIB dos_setdate(struct dos_date_t *);
void __CLIB dos_getdate(struct dos_date_t *);
int __CLIB _dos_sethandlecount(unsigned);
unsigned __CLIB dos_settime(struct dos_time_t *);
void __CLIB dos_gettime(struct dos_time_t *);
#define absread(drive,nsects,lsects,buffer) dos_abs_disk_read(drive,nsects,lsects,buffer)
#define abswrite(drive,nsects,lsects,buffer) dos_abs_disk_write(drive,nsects,lsects,buffer)
#define _dosexterr(dosstruct) dos_exterr(dosstruct)
#define _dos_close dos_close
#if __INTSIZE == 2
unsigned _dos_allocmem(unsigned int,unsigned int *);
int allocmem(unsigned int,unsigned int *);
unsigned _dos_freemem(unsigned);
int freemem(unsigned);
#endif
#define _dos_getdate dos_getdate
#define _dos_getdrive dos_getdrive
#define _dos_getfileattr dos_getfileattr
#define _dos_getftime dos_getftime
#define _dos_gettime dos_gettime
#define _dos_setdate dos_setdate
#define _dos_setdrive dos_setdrive
#define _dos_setfileattr dos_setfileattr
#define _dos_setftime dos_setftime
#define _dos_settime dos_settime
unsigned char __CLIB _inp(unsigned);
unsigned short __CLIB _inpw(unsigned);
unsigned long __CLIB _inpl(unsigned);
unsigned char __CLIB _outp(unsigned,unsigned char);
unsigned short __CLIB _outpw(unsigned,unsigned short);
unsigned long __CLIB _outpl(unsigned,unsigned long);
unsigned char __CLIB _inline_inp(unsigned);
unsigned short __CLIB _inline_inpw(unsigned);
unsigned long __CLIB _inline_inpl(unsigned);
unsigned char __CLIB _inline_outp(unsigned,unsigned char);
unsigned short __CLIB _inline_outpw(unsigned,unsigned short);
unsigned long __CLIB _inline_outpl(unsigned,unsigned long);
#define _inp(x) _inline_inp(x)
#define _inpw(x) _inline_inpw(x)
#define _outp(x,y) _inline_outp(x,y)
#define _outpw(x,y) _inline_outpw(x,y)
#if __INTSIZE == 4
#define _inpl(x) _inline_inpl(x)
#define _outpl(x,y) _inline_outpl(x,y)
#endif
// Obsolete, use the _ prefixed versions
#define inp(x) _inline_inp(x)
#define inpw(x) _inline_inpw(x)
#define outp(x,y) _inline_outp(x,y)
#define outpw(x,y) _inline_outpw(x,y)
#if !(defined (_WINDOWS) || defined (__NT__))
#define _HARDERR_IGNORE 0
#define _HARDERR_RETRY 1
#define _HARDERR_ABORT 2
#define _HARDERR_FAIL 3
void __cdecl _harderr (void (__far __cdecl *) (unsigned, unsigned, unsigned __far *));
void __cdecl _hardresume (int);
void __cdecl _hardretn (int);
#endif /*!(defined (_WINDOWS) || defined (__NT__))*/
size_t __CLIB _chkstack(void);
#ifndef __NT__
#define interrupt __interrupt
void __cdecl peekbytes(unsigned,unsigned,void *,size_t);
void __cdecl pokebytes(unsigned,unsigned,const void *,size_t);
#if __cplusplus
void inline poke(unsigned segm, unsigned offs, int value)
{
*((int __far *) MK_FP(segm, offs)) = value;
}
int inline peek(unsigned segm, unsigned offs)
{
return *((int __far *) MK_FP(segm, offs));
}
void inline pokeb(unsigned segm, unsigned offs, char value)
{
*((char __far *) MK_FP(segm, offs)) = value;
}
char inline peekb(unsigned segm, unsigned offs)
{
return *((char __far *) MK_FP(segm, offs));
}
#else
#define peek(segm, offs) (*((int __far *) MK_FP((segm), (offs))))
#define peekb(segm, offs) (*((char __far *) MK_FP((segm), (offs))))
#define poke(segm, offs, value) (*((int __far *) MK_FP((segm), (offs))) = (int)(value))
#define pokeb(segm, offs, value) (*((char __far *) MK_FP((segm), (offs))) = (char)(value))
#endif
#ifndef _WINDOWS
#ifndef DOS386
void __CLIB _chain_intr (void (__interrupt __far * funcptr)());
void (__interrupt __far * __CLIB _dos_getvect(unsigned vector))();
void __CLIB _dos_setvect (unsigned vector,
void (__interrupt __far * funcptr)());
#if __cplusplus
void inline (__interrupt __far * getvect(int vector))()
{
return _dos_getvect (vector);
}
void inline setvect(int vector, void (__interrupt __far * funcptr)())
{
_dos_setvect(vector, funcptr);
}
#else
#define getvect _dos_getvect
#define setvect _dos_setvect
#endif
#endif /* DOS386 */
#endif
int __cdecl bdos(int dosfunc, unsigned int dosdx, unsigned int dosal);
#define _bdos bdos
int __cdecl bdosptr(int, void *, unsigned);
int __cdecl bdosx(char,void *,char);
#ifndef DOS386
unsigned __CLIB dos_alloc(unsigned);
unsigned __CLIB dos_calloc(unsigned);
int __CLIB dos_free(unsigned);
#endif /* DOS386 */
void __CLIB _copy(unsigned,unsigned,unsigned);
unsigned long __CLIB dos_avail(void);
#ifndef DOS386
unsigned __CLIB dos_setblock(unsigned,unsigned);
unsigned __CLIB _dos_setblock(unsigned,unsigned,unsigned *);
#endif /* DOS386 */
#endif
int __pascal response_expand(int *,char ***);
int __CLIB cputype(void);
#ifndef _WIN32
# if defined(ZTC_COMPAT)
# if !(M_UNIX || M_XENIX)
# if !__cplusplus
#define WILDCARDS extern int __cdecl __wildcard; int *__wild = &__wildcard;
# else
#define WILDCARDS extern "C" { extern int __cdecl __wildcard; int *__wild = &__wildcard; }
# endif
# else
#define WILDCARDS
# endif
# else
# if !(M_UNIX || M_XENIX)
# if !__cplusplus
#define EXPAND_WILDCARDS extern int __cdecl __wildcard; int *__wild = &__wildcard;
# else
#define EXPAND_WILDCARDS extern "C" { extern int __cdecl __wildcard; int *__wild = &__wildcard; }
# endif
# else
#define EXPAND_WILDCARDS
# endif
# endif
#else
# if !(M_UNIX || M_XENIX)
# if !__cplusplus
#define WILDCARDS int __cdecl __wildcard = 1;
#define EXPAND_WILDCARDS int __cdecl __wildcard = 1;
# else
#define WILDCARDS extern "C" { int __cdecl __wildcard = 1; }
#define EXPAND_WILDCARDS extern "C" { int __cdecl __wildcard=1; }
# endif
# else
#define WILDCARDS
#define EXPAND_WILDCARDS
# endif
#endif
#define EXE_DOS 1
#define EXE_DOS16RM 2
#define EXE_ZPM 4
#define EXE_PHAR386 8
#define EXE_DOSX 0x10
#define EXE_WINDOWS 0x20
#define EXE_OS2 0x40
#define EXE_SCOUNIX 0x80
#define EXE_OS2_2 0x100
#define EXE_WINDOWSNT 0x200
extern unsigned short __cdecl _exe_type;
#if !(M_UNIX || M_XENIX)
#pragma pack()
#endif
#ifdef _WINDOWS
extern void __far __pascal DOS3CALL(void);
#define int21h __asm call DOS3CALL
#else
#define int21h __asm int 21h
#endif
#if __cplusplus
inline unsigned _getdiskfree(unsigned driveno, struct _diskfree_t *diskspace)
{
return _dos_getdiskfree(driveno, diskspace); /*needed for MSVCNT compatibility*/
}
#else
#define _getdiskfree _dos_getdiskfree /*needed for MSVCNT compatibility*/
#endif
#if __cplusplus
}
#endif
#endif