2019-03-31 15:57:52 -04:00
|
|
|
#ifndef __port_port_h
|
|
|
|
#define __port_port_h
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef ULONG
|
|
|
|
# define ULONG unsigned long
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef UWORD
|
|
|
|
# define UWORD unsigned short
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef UBYTE
|
|
|
|
# define UBYTE unsigned char
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef boolean
|
|
|
|
# define boolean int
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef FALSE
|
|
|
|
# define FALSE 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef TRUE
|
|
|
|
# define TRUE 1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* STRUCTURES: dosxEreg is a union containing all extended registers.. */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#if defined(__32BIT__)
|
|
|
|
#define __FILLER(a) unsigned short a;
|
|
|
|
#else
|
|
|
|
#define __FILLER(a)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
struct dosxEreg {
|
|
|
|
unsigned long eax, ebx, ecx, edx, ebp, esi, edi;
|
|
|
|
unsigned short ds, es, fs, gs;
|
|
|
|
unsigned long flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct dosxBreg {
|
|
|
|
unsigned char al, ah; __FILLER(_1)
|
|
|
|
unsigned char bl, bh; __FILLER(_2)
|
|
|
|
unsigned char cl, ch; __FILLER(_3)
|
|
|
|
unsigned char dl, dh; __FILLER(_4)
|
|
|
|
};
|
|
|
|
|
|
|
|
struct dosxWreg {
|
|
|
|
unsigned short ax; __FILLER(_1)
|
|
|
|
unsigned short bx; __FILLER(_2)
|
|
|
|
unsigned short cx; __FILLER(_3)
|
|
|
|
unsigned short dx; __FILLER(_4)
|
|
|
|
unsigned short bp; __FILLER(_5)
|
|
|
|
unsigned short si; __FILLER(_6)
|
|
|
|
unsigned short di; __FILLER(_7)
|
|
|
|
unsigned short ds;
|
|
|
|
unsigned short es;
|
|
|
|
unsigned short fs;
|
|
|
|
unsigned short gs;
|
|
|
|
unsigned long flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* STRUCTURES: dosxReg contains all usable registers. */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
union dosxReg {
|
|
|
|
struct dosxBreg h;
|
|
|
|
struct dosxWreg w;
|
|
|
|
struct dosxEreg x;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* DEFINES: PLRF_* defines are the processor flags. */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#define PLCPUF_C 0x0001 // Carry flag
|
|
|
|
#define PLCPUF_P 0x0004 // Parity
|
|
|
|
#define PLCPUF_A 0x0010 // Auxiliary carry
|
|
|
|
#define PLCPUF_Z 0x0040 // Zero flag,
|
|
|
|
#define PLCPUF_S 0x0080 // Sign flag
|
|
|
|
#define PLCPUF_T 0x0100 // Trace flag
|
|
|
|
#define PLCPUF_I 0x0200 // Interrupt
|
|
|
|
#define PLCPUF_D 0x0400 // Direction
|
|
|
|
#define PLCPUF_O 0x0800 // Overflow.
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* DEFINES: plFnsplit() defines. */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#define PL_WILDCARDS 0x01
|
|
|
|
#define PL_EXTENSION 0x02
|
|
|
|
#define PL_FILENAME 0x04
|
|
|
|
#define PL_DIRECTORY 0x08
|
|
|
|
#define PL_DRIVE 0x10
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* DEFINES: File attributes. */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#define PLFA_NORMAL 0x00 /* Normal file, no attributes */
|
|
|
|
#define PLFA_RDONLY 0x01 /* Read only attribute */
|
|
|
|
#define PLFA_HIDDEN 0x02 /* Hidden file */
|
|
|
|
#define PLFA_SYSTEM 0x04 /* System file */
|
|
|
|
#define PLFA_LABEL 0x08 /* Volume label */
|
|
|
|
#define PLFA_DIREC 0x10 /* Directory */
|
|
|
|
#define PLFA_ARCH 0x20 /* Archive */
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* STRUCTURES: plFTime holds date/time for a file (plGetftime()). */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
struct plFTime
|
|
|
|
{
|
|
|
|
unsigned ft_tsec : 5; // Two second interval
|
|
|
|
unsigned ft_min : 6; // Minute
|
|
|
|
unsigned ft_hour : 5; // Hour
|
|
|
|
unsigned ft_day : 5; // Day
|
|
|
|
unsigned ft_month : 4; // Month
|
|
|
|
unsigned ft_year : 7; // Year
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* STRUCTURES: plDFree holds "disk free space" info for plGetdfree().
|
|
|
|
*/
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
struct plDFree
|
|
|
|
{
|
|
|
|
unsigned df_avail;
|
|
|
|
unsigned df_total;
|
|
|
|
unsigned df_bsec;
|
|
|
|
unsigned df_sclus;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* DEFINES: plLocking() mode flags... */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#define PL_LK_UNLCK 0 // unlock the file region
|
|
|
|
#define PL_LK_LOCK 1 // lock the file region
|
|
|
|
#define PL_LK_NBLCK 2 // non-blocking lock
|
|
|
|
#define PL_LK_RLCK 3 // lock for writing
|
|
|
|
#define PL_LK_NBRLCK 4 // non-blocking lock for writing
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//** Hardware interface: DOS & extended DOS only!!
|
|
|
|
void dosxIntr(int inr, union dosxReg* r);
|
|
|
|
|
|
|
|
void dosxMemRead(void* dest, ULONG ra, unsigned nbytes);
|
|
|
|
void dosxMemWrite(ULONG ra, void* src, unsigned nbytes);
|
|
|
|
void dosxPMemRead(void* dest, ULONG pa, unsigned nbytes);
|
|
|
|
void dosxPMemWrite(ULONG pa, void* src, unsigned nbytes);
|
|
|
|
|
|
|
|
void dosxDisable(void);
|
|
|
|
void dosxEnable(void);
|
|
|
|
|
|
|
|
//** Disk stuff..
|
|
|
|
int plGetdisk(void);
|
|
|
|
int plSetdisk(int dnr);
|
|
|
|
int plGetcurdir(int drive, char *dir);
|
|
|
|
|
|
|
|
//** Misc..
|
|
|
|
char *plSearchpath(char *name);
|
|
|
|
int plFnsplit(const char *pathp, char *drivep, char *dirp, char *namep,
|
|
|
|
char *extp); void plFnmerge(char *out, char *drive, char *dir, char *name,
|
|
|
|
char *ext);
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* Hardware portability calls. */
|
|
|
|
/* */
|
|
|
|
/****************************************************************************/
|
|
|
|
|
|
|
|
//** Mouse calls
|
|
|
|
//** ===========
|
|
|
|
boolean MOUSInit(void);
|
|
|
|
void MOUSExit(void);
|
|
|
|
void MOUSCursen(boolean enable);
|
|
|
|
void MOUSPos(UWORD *x, UWORD *y, boolean *leftbutton, boolean
|
|
|
|
*rightbutton); void MOUSSetpos(UWORD x, UWORD y);
|
|
|
|
void MOUSSetTextCursor(UWORD screenmask, UWORD cursormask);
|
|
|
|
void MOUSSaveCurs(void);
|
|
|
|
void MOUSRestCurs(void);
|
|
|
|
boolean MOUSIsPresent(void);
|
|
|
|
ULONG MOUSPressCount(void);
|
2019-03-31 17:13:55 -04:00
|
|
|
boolean MOUSSetBounds(void);
|
2019-03-31 15:57:52 -04:00
|
|
|
|
|
|
|
//** Timer calls
|
|
|
|
//** ===========
|
|
|
|
int plTiAlloc(unsigned long cnt);
|
|
|
|
void plTiSet(int t, unsigned long cnt);
|
|
|
|
void plTiFree(int t);
|
|
|
|
unsigned long plTiQValue(int t);
|
|
|
|
|
|
|
|
//** Thread/task based.
|
|
|
|
//** ==================
|
|
|
|
void plDelay(unsigned int msecs);
|
|
|
|
unsigned long plTmGet(void); // Avoid using this.
|
|
|
|
void plCpuRelease(void);
|
|
|
|
|
|
|
|
|
|
|
|
//** Thread interface!
|
|
|
|
//** =================
|
|
|
|
int plThrdStart(void (*exfn)(void*), unsigned long stksz, void* args);
|
|
|
|
|
|
|
|
|
|
|
|
//** FTE specific.
|
|
|
|
int fnmatch(char* pat, char* in, int vv);
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef DOSP32
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* ENUM: ePlScnType defines a screen type. */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
enum ePlScnType
|
|
|
|
{
|
|
|
|
plsctUnknown,
|
|
|
|
plsctMono, // Monochrome adapter / unknown type,
|
|
|
|
plsctCGA, // Color graphics adapter
|
|
|
|
plsctEGA, // EGA adapter,
|
|
|
|
plsctVGA, // VGA adapter,
|
|
|
|
plsctLast
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//** Informational functions,
|
|
|
|
enum ePlScnType plScnType(void);
|
|
|
|
boolean plScnIsMono(void);
|
|
|
|
int plScnWidth(void);
|
|
|
|
int plScnHeight(void);
|
|
|
|
void plScnCursorShapeGet(int* sp, int* ep);
|
|
|
|
void plScnCursorPosGet(int* xp, int* yp);
|
|
|
|
|
|
|
|
|
|
|
|
//** Change parameters e.a.
|
|
|
|
void plScnSetFlash(boolean on);
|
|
|
|
void plScnCursorOn(boolean on);
|
|
|
|
void plScnCursorShape(int start, int end);
|
|
|
|
void plScnCursorPos(int x, int y);
|
2019-03-31 17:13:55 -04:00
|
|
|
void plScnSetSize(int xSize, int ySize);
|
2019-03-31 15:57:52 -04:00
|
|
|
|
|
|
|
|
|
|
|
//** Writing the screen.
|
|
|
|
void plScnWrite(unsigned x, unsigned y, unsigned short* buf, unsigned nch);
|
|
|
|
void plScnRead(unsigned x, unsigned y, unsigned short* buf, unsigned nch);
|
|
|
|
void plScnSetCell(unsigned x, unsigned y, unsigned wid, unsigned hig, UWORD cell);
|
|
|
|
void plScnScrollDown(int x, int y, int ex, int ey, int nlines, UWORD fill);
|
|
|
|
void plScnScrollUp(int x, int y, int ex, int ey, int nlines, UWORD fill);
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* Keyboard interface.. */
|
|
|
|
/* */
|
|
|
|
/****************************************************************************/
|
|
|
|
struct plKbdInfo
|
|
|
|
{
|
|
|
|
UBYTE ki_scan;
|
|
|
|
UBYTE ki_ascii;
|
|
|
|
ULONG ki_flags; // PLKF_ defines, above;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define PLKF_SHIFT 0x0001
|
|
|
|
#define PLKF_CTRL 0x0002
|
|
|
|
#define PLKF_ALT 0x0004
|
|
|
|
#define PLKF_SCROLLLOCK 0x0008
|
|
|
|
#define PLKF_NUMLOCK 0x0010
|
|
|
|
#define PLKF_CAPSLOCK 0x0020
|
|
|
|
|
|
|
|
|
|
|
|
boolean plKbdReadF(struct plKbdInfo* ki);
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|