206 lines
5.2 KiB
C
206 lines
5.2 KiB
C
/* Release 3.00 */
|
|
|
|
/*-------------------------------------------------------------------------*
|
|
* *
|
|
* dos.h - structure, union, macro and function definitions for MSDOS and *
|
|
* Intel IAPX86 family. *
|
|
* *
|
|
* COPYRIGHT (C) 1989 Jensen and Partners. All Rights Reserved *
|
|
* *
|
|
*--------------------------------------------------------------------------*/
|
|
#include <stdepoc.h>
|
|
|
|
#ifndef _DOS_INC_
|
|
#define _DOS_INC_
|
|
|
|
#ifndef __STDC__
|
|
extern unsigned int _osmajor;
|
|
extern unsigned int _osminor;
|
|
extern int _argc;
|
|
extern char *_argv[32];
|
|
#endif
|
|
|
|
#define FA_NORMAL 0x00 /* normal file */
|
|
#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 FA_TEXT 0x100 /* Open in text mode */
|
|
#define FA_SHARE 0x200 /* Open with sharing */
|
|
|
|
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;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
extern int int86(int _intno, const union REGS * _inregs, union REGS * _outregs);
|
|
extern int int86x(int _intno, const union REGS * _inregs, union REGS * _outregs,
|
|
struct SREGS * _segregs);
|
|
extern void intr(int _intno, struct REGPACK * _preg);
|
|
extern void segread(struct SREGS * _segs);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#ifndef _FFBLK_DEF
|
|
#define _FFBLK_DEF
|
|
|
|
struct ffblk {
|
|
char ff_reserved[21];
|
|
char ff_attrib;
|
|
int ff_ftime;
|
|
int ff_fdate;
|
|
long ff_fsize;
|
|
char ff_name[13];
|
|
};
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
extern int findfirst(const char * _path, struct ffblk * _buffer, int _attrib);
|
|
extern int findnext(struct ffblk * _buffer);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#ifndef _PORTIO_DEF
|
|
#define _PORTIO_DEF
|
|
|
|
#if (defined _IL_MTF) | ( defined __STDC__)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
extern unsigned char inportb(int _portid);
|
|
extern void outportb(int _portid, unsigned char _value);
|
|
extern unsigned int inportw(int _portid);
|
|
extern void outportw(int _portid, unsigned int _value);
|
|
extern void _disable(void);
|
|
extern void _enable(void);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#define inp(portid) inportb(portid)
|
|
#define outp(portid, v) outportb(portid, v)
|
|
#define inpw(portid) inportw(portid)
|
|
#define outpw(portid, v) outportw(portid, v)
|
|
#else
|
|
|
|
#define RET 0xC3
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#pragma save,call(reg_param=>(dx,ax),reg_saved=>(bx,cx,si,di,es,ds,st1,st2), inline=>on)
|
|
static void __outportb__(int _port, unsigned char _byte) =
|
|
{
|
|
0xEE, RET /* out dx,al */
|
|
};
|
|
|
|
static unsigned char __inportb__(int _port) =
|
|
{
|
|
0xEC, RET /* in dx,al */
|
|
};
|
|
|
|
static void __outportw__(int _port,int unsigned _word) =
|
|
{
|
|
0xEF, RET /* out dx,ax */
|
|
};
|
|
|
|
static unsigned int __inportw__(int _port) =
|
|
{
|
|
0xED, RET /* in dx,ax */
|
|
};
|
|
|
|
static void _enable(void)=
|
|
{
|
|
0xFB, RET
|
|
};
|
|
|
|
static void _disable(void)=
|
|
{
|
|
0xFA, RET
|
|
};
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#pragma restore
|
|
|
|
#define inportb(portid) __inportb__(portid) /* Byte IN instruction */
|
|
#define outportb(portid, v) __outportb__(portid,v)/* Byte OUT instruction */
|
|
#define inportw(portid) __inportw__(portid) /* Word IN instruction */
|
|
#define outportw(portid, v) __outportw__(portid,v)/* Word OUT instruction */
|
|
|
|
/* some compilers use inp, outp for inportb, outportb */
|
|
|
|
#define inp(portid) __inportb__(portid)
|
|
#define outp(portid, v) __outportb__(portid, v)
|
|
#define inpw(portid) __inportw__(portid)
|
|
#define outpw(portid, v) __outportw__(portid, v)
|
|
#endif
|
|
#define enable() _enable()
|
|
#define disable() _disable()
|
|
#endif
|
|
|
|
#define NFDS 20 /* Maximum number of fds */
|
|
|
|
#ifndef _TMT_DEF
|
|
#define _TMT_DEF
|
|
struct date {
|
|
int da_year;
|
|
unsigned char da_day;
|
|
unsigned char da_mon;
|
|
};
|
|
|
|
struct time {
|
|
unsigned char ti_hour;
|
|
unsigned char ti_min;
|
|
unsigned char ti_sec;
|
|
unsigned char ti_hund;
|
|
};
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
extern void getdate(struct date * _dptr);
|
|
extern void gettime(struct time * _tptr);
|
|
extern void setdate(const struct date * _dptr);
|
|
extern void settime(const struct time * _tptr);
|
|
extern void sleep(unsigned _secs);
|
|
extern void *getRealHandle(int handle);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|