/* * WINSYS.H * * Written on 10-Jul-94 by John Dennis and released to the public domain. * * Header file for a system-independant windowing system. */ #ifndef __WINSYS_H__ #define __WINSYS_H__ #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #define WND_ERROR -1 #define WND_NOERR 1 #define NBDR 0x01 /* No Border */ #define SBDR 0x02 /* Single border */ #define DBDR 0x04 /* Double Border */ #define SHADOW 0x08 /* We have a shadow */ #define INSBDR 0x10 /* Inset border */ #define NOSAVE 0x20 /* don't save background */ #define NOMOUSE 0x40 /* we don't want a mouse */ #define MOUSE_EVT 0xff /* Undefined event */ #define RMOU_CLCK 0xfe /* Right button clicked */ #define LMOU_CLCK 0xfd /* Left button clicked */ #define LMOU_RPT 0xfc /* Button repeating */ #define RMOU_RPT 0xf7 /* Button repeating */ #define MOU_LBTDN 0xfb /* Left button pressed */ #define MOU_RBTDN 0xfa /* Right button pressed */ #define MOU_LBTUP 0xf9 /* Left button released */ #define MOU_RBTUP 0xf8 /* Right button released */ #define VERT_SCRL 0xf7 /* not used yet.. urk... */ #define HORZ_SCRL 0xf6 #define WM_SCRLFT 0xf5 #define WM_SCRRGT 0xf4 #define WM_SCRLUP 0xf3 #define WM_SCRLDN 0xf2 #define WM_SPGDN 0xf1 #define WM_SPGUP 0xef /* colours */ #define BLACK 0x00 /* Black */ #define BLUE 0x01 /* Blue */ #define GREEN 0x02 /* Green */ #define CYAN 0x03 /* Cyan */ #define RED 0x04 /* Red */ #define MAGENTA 0x05 /* Magenta */ #define BROWN 0x06 /* Brown */ #define LGREY 0x07 /* Light grey (white) */ #define DGREY 0x08 /* Dark grey */ #define LBLUE 0x09 /* Light blue */ #define LGREEN 0x0A /* Light green */ #define LCYAN 0x0B /* Light cyan */ #define LRED 0x0C /* Light red */ #define LMAGENTA 0x0D /* Light magenta */ #define YELLOW 0x0E /* Yellow */ #define WHITE 0x0F /* Intense white */ #define INTENSE 0x08 /* Intensity bit */ #define _BLACK 0x00 /* Black */ #define _BLUE 0x10 /* Blue */ #define _GREEN 0x20 /* Green */ #define _CYAN 0x30 /* Cyan */ #define _RED 0x40 /* Red */ #define _MAGENTA 0x50 /* Magenta */ #define _BROWN 0x60 /* Brown */ #define _LGREY 0x70 /* White */ #define _DGREY 0x80 /* Blink/dark grey */ #define _LBLUE 0x90 /* Blink/light blue */ #define _LGREEN 0xA0 /* Blink/light green */ #define _LCYAN 0xB0 /* Blink/light cyan */ #define _LRED 0xC0 /* Blink/light red */ #define _LMAGENTA 0xD0 /* Blink/light magenta */ #define _YELLOW 0xE0 /* Blink/light yellow */ #define _WHITE 0xF0 /* Blink/light white */ #define _BLINK 0x80 /* Blink/intensity bit */ #define _TRANSPARENT 0x100 /* transparent background, for Unix */ #define F_NORMAL 0x000 /* Normal Font */ #define F_ALTERNATE 0x100 /* Alternate Font */ #define MAKECELL(ch, at) ((unsigned long)(((unsigned long)((unsigned char)(ch))) | \ (((unsigned long)(at)) << 16))) /* hotspot related stuff */ #define MAX_HOTS 30 /* max # of hot spots per group */ #define MAX_HOT_GROUP 40 /* max # of HotGroups */ #define WND_WM_MOUSE 0x01 /* we got a Mouse Message */ #define WND_WM_CHAR 0x02 /* we got a keyboard message */ #define WND_WM_RESIZE 0x03 /* the window has been resized */ #define WND_WM_COMMAND 0x0020 /* we got a recognized id (was 0x04) */ /* these are wid's reserved for useage - wids start at 20 */ #define WND_WN_MENU 1L #define WND_WN_WIND 2L /* kludge time! :-) */ /* defines local terminal characteristics */ typedef struct _term { short NCol; /* Number Rows 0 org */ short NRow; /* Number Columns 0 org */ unsigned char Abil; /* Abilities of Terminal */ } TERM; #ifdef UNIX /* prevent a name clash with term.h */ #define term msged_term #endif #ifndef TERMDEF #ifdef UNIX volatile #endif extern TERM term; #endif typedef struct _window { unsigned long wid; unsigned char x1; /* screen coordinates (no shadow) */ unsigned char y1; unsigned char x2; unsigned char y2; unsigned char wattr; /* window forground attribute */ unsigned char battr; /* border background attr */ unsigned char flags; /* SHADOW DBDR SBDR IBDR TITLE */ char *title; /* pointer to title memory */ unsigned long **buffer; /* screen save buffer (screen behind) */ struct _window *next; /* pointer to window above this one */ struct _window *prev; /* pointer to window below this one */ } WND; /* Mouse event structure */ /* not used much now */ typedef struct _mou { unsigned int event; /* event number */ int x; /* location x,y */ int y; int lbutton; /* left button down */ int rbutton; /* left button down */ int lrelease; /* left button has been released */ int rrelease; /* right button has been released */ int repeat; /* repeat? */ } MOU; /* An input event */ typedef struct _event { int x, y; /* location */ int msgtype; /* message type */ int msg; /* message */ int id; } EVT; /* * This is a group of hot-spots - they're usually pushed onto the * global stack. id MUST be unique for it to be effective. Currently, * the ID must be manually added; this may change in the future. */ typedef struct _hotgrp { unsigned long wid; /* window ID for this group. 0 = ignored */ int num; /* number of hotspots in this group */ struct { /* individual hotspots */ int id; /* identifier for item */ int x1; /* coordinates */ int y1; int x2; int y2; void *ctl; /* pointer to structure containing item */ } harr[MAX_HOTS]; } HotGroup; /* * Window terminal functions for use by higher modules. Each * system-dependant module should provide these functions. */ int TTScolor(unsigned int Attr); int TTopen(void); int TTclose(void); int TTkopen(void); int TTkclose(void); int TTCurSet(int); int TTgotoxy(int row, int col); int TTgetxy(int *row, int *col); int TTconfigure(const char *, const char *); int TTGetChr(void); int TTPutChr(unsigned int Ch); int TTWriteStr(unsigned long *b, int len, int row, int col); int TTStrWr(unsigned char *s, int row, int col, int len); int TTReadStr(unsigned long *b, int len, int row, int col); int TTClear(int x1, int y1, int x2, int y2); int TTScroll(int x1, int y1, int x2, int y2, int lines, int Dir); int TTEeol(void); int TTdelay(int mil); int TTGetMsg(EVT * event); unsigned int TTGetKey(void); void MouseOFF(void); void MouseON(void); void MouseInit(void); void MouseClose(void); int GetMouInfo(int *x, int *y); void TTClearQue(void); int TTPeekQue(void); void TTBeginOutput(void); /* suppresses screen drawing until ... */ void TTEndOutput(void); /* .. ttendoutput is called. This improves speed! */ /* routines from the window module (system independant) */ WND *WndOpen(int x1, int y1, int x2, int y2, int Bdr, int BAttr, int Attr); WND *WndPopUp(int wid, int dep, int Bdr, int BAttr, int NAttr); void WndClose(WND * w); void WndBox(int x1, int y1, int x2, int y2, int Attr, int type); void WndTitle(const char *Str, int Attr); void WndWriteStr(int x, int y, int Attr, char *Str); void WndPutsCen(int y, int Attr, char *Str); int WndPrintf(int x, int y, int Attr, char *Str, ...); void WndPutsn(int x, int y, int len, int Attr, char *Str); void WndScroll(int x1, int y1, int x2, int y2, int dir); void WndCurr(WND * hWnd); WND *WndTop(void); void WndPutc(int Ch, int Attr); void WndGotoXY(int x, int y); void WndClear(int x1, int y1, int x2, int y2, int attr); int WndGetLine(int x, int y, int len, char *buf, int Attr, int *pos, int nokeys, int fil, int disp, EVT * ev); void WndClearLine(int y, int Att); void WndFillField(int x, int y, int len, unsigned char ch, int Attr); void WndGetRel(int x, int y, int *wx, int *wy); /* Routines from system module (system independent) */ void PushHotGroup(HotGroup * New); void PopHotGroup(void); int LocateHotItem(int x, int y, unsigned long wid); unsigned int MnuGetMsg(EVT * event, unsigned long wid); extern int wnd_suppress_shadows; extern int wnd_force_monochrome; extern int wnd_bs_127; extern int window_resized; #endif