This repository has been archived on 2023-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
fte/port.h
Gered 43d7eb4f73 properly hook up ScreenSizeX/Y global options & fix related mouse issues
note that 80x43 text mode is not currently working. if the int 10h can
be adjusted to set this mode correctly, the mouse fixes should all work
properly with it too ...
2019-03-31 17:13:55 -04:00

294 lines
7.9 KiB
C

#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);
boolean MOUSSetBounds(void);
//** 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);
void plScnSetSize(int xSize, int ySize);
//** 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