// // borrowed for temprorary softpc console support // /*++ BUILD Version: 0001 * * x86 v1.0 * * XWINCON.H * Windows support functions for console windows * * History * Created 27-Dec-90 by Jeff Parsons * * COPYRIGHT NOTICE * This source file may not be distributed, modified or incorporated into * another product without prior approval from the author, Jeff Parsons. * This file may be copied to designated servers and machines authorized to * access those servers, but that does not imply any form of approval. */ typedef unsigned int UINT; // ints preferred typedef int INT; // ints preferred typedef CHAR *NPSZ; typedef INT (FAR PASCAL *INTPROC)(HWND, UINT, UINT, LONG); #define DEF_CCHIN 16 // default input buffer size #define DEF_CCHXOUT 80 // default output buffer width #define DEF_CCHYOUT 25 // default output buffer height #define CON_SCROLL_LOCK 0x0010 // console has SCROLL-LOCK set #define CON_NUM_LOCK 0x0020 // console has NUM-LOCK set #define CON_CAPS_LOCK 0x0040 // console has CAPS-LOCK set #define CON_LEDS_MASK 0x0070 // #define CON_FOCUS 0x0100 // console has focus #ifndef VK_OEM_SCROLL #define VK_OEM_SCROLL 0x91 // left out of windows.h for some reason... #endif #define INVALIDATE_SCROLL 2 #define IDM_DBBRK 100 #define IDM_ABOUT 101 #define CLR_BLACK 0x00000000 #define CLR_RED 0x007F0000 #define CLR_GREEN 0x00007F00 #define CLR_BROWN 0x007F7F00 #define CLR_BLUE 0x0000007F #define CLR_MAGENTA 0x007F007F #define CLR_CYAN 0x00007F7F #define CLR_LT_GRAY 0x00BFBFBF #define CLR_DK_GRAY 0x007F7F7F #define CLR_BR_RED 0x00FF0000 #define CLR_BR_GREEN 0x0000FF00 #define CLR_YELLOW 0x00FFFF00 #define CLR_BR_BLUE 0x000000FF #define CLR_BR_MAGENTA 0x00FF00FF #define CLR_BR_CYAN 0x0000FFFF #define CLR_WHITE 0x00FFFFFF #define OPT_FONT 0x0004 // use small OEM font if available (/s) #define OPT_DOUBLE 0x0020 // use 50-line debug window w/small font (/50) #define OPT_CAPS 0x0002 // map ctrl keys to caps-lock (/c) #define OPT_TERMINAL 0x0010 // redirect all window output to terminal (/t) #define OPT_FLUSH 0x0100 // flush prefetch after every jump (/f) #define OPT_NOXLATE 0x0200 // disable built-in translations (/n) #define OPT_DEBUG 0x0008 // shadow all log output on debug terminal (/d) #define OPT_GO 0x0001 // do an initial "go" (/g) #define CTRL_A 1 // used by gets to repeat last line #define CTRL_C 3 // break in debug window #define CTRL_Q 17 // flow control #define CTRL_S 19 // flow control #define BELL 7 // #define BS 8 // backspace #define TAB 9 // #define LF 10 // linefeed #define CR 13 // return #define ESCAPE 27 // #define SIGNAL_EMULATE 1 #define ERR_NONE 0x0 #define TRUE_IF_WIN32 1 /* Per-window information */ #ifdef WIN_16 #define GETPCONSOLE(hwnd) (PCONSOLE)GetWindowWord(hwnd,0) #define SETPCONSOLE(hwnd,p) (PCONSOLE)SetWindowWord(hwnd,0,(INT)p) #endif #ifdef WIN_32 #define GETPCONSOLE(hwnd) (PCONSOLE)GetWindowLong(hwnd,0) #define SETPCONSOLE(hwnd,p) (PCONSOLE)SetWindowLong(hwnd,0,(LONG)p) #endif #ifdef PM #define GETPCONSOLE(hwnd) (PCONSOLE)WinQueryWindowUShort(hwnd,0) #define SETPCONSOLE(hwnd,p) (PCONSOLE)WinSetWindowUShort(hwnd,0,(USHORT)p) #endif #define GETICARET(pcon) (pcon->chyCaret*pcon->cchxOut+pcon->chxCaret) #define GETPCARET(pcon) (pcon->pchOut+GETICARET(pcon)) #define GETXCARET(pcon) (pcon->chxCaret*pcon->cxChar) #ifdef WIN #define GETYCARET(pcon) (pcon->chyCaret*pcon->cyChar) #else #define GETYCARET(pcon) (pcon->cyOut - pcon->chyCaret*pcon->cyChar) #endif #define GETILINE(pcon,chy) ((chy)*pcon->cchxOut) #define GETPLINE(pcon,chy) (pcon->pchOut+GETILINE(pcon,chy)) #define GETICHAR(pcon,chx,chy) ((chy)*pcon->cchxOut+(chx)) #define GETPCHAR(pcon,chx,chy) (pcon->pchOut+GETICHAR(pcon,chx,chy)) #define GETXCHAR(pcon,chx) (pcon->cxChar*(chx)) #ifdef WIN #define GETYCHAR(pcon,chy) (pcon->cyChar*(chy)) #else #define GETYCHAR(pcon,chy) (pcon->cyOut - pcon->cyChar*(chy)) #endif #define WORDOF(i,n) (((PWORD)&(i))[n]) #define LOW(l) WORDOF(l,0) #define NPVOID(p) ((VOID *)(p)) typedef struct key_s { INT iKey; LONG lKeyType; } KEY, *PKEY; typedef struct console_s { INT flCon; // console flags (see CON_*) PKEY pkIn; // pointer to input buffer HANDLE hkEvent; // handle to key event INT ikHead; // input head (where to store next key) INT ikTail; // input tail (where to retrieve next key) INT ikMax; // maximum input index HFONT hFont; // font identifier INT cxChar; // character width, in pixels INT cyChar; // character height, in pixels INT cxOut; // buffer width, in pixels INT cyOut; // buffer height, in pixels INT cchxOut; // buffer width, in chars INT cchyOut; // buffer height, in chars UINT cbOut; // buffer size, in bytes PCHAR pchOut; // pointer to output buffer INT chxCaret; // caret x location, in char coordinates INT chyCaret; // caret y location, in char coordinates } CONSOLE, *PCONSOLE; /* Function prototypes */ PCONSOLE initconsole(HWND hwnd, INT cchIn, INT cchxOut, INT cchyOut, INT iFont); VOID freeconsole(HWND hwnd); VOID clearconsole(HWND hwnd); VOID invalidateconsole(HWND hwnd, PRECT prc, BOOL fUpdate); INT wprint(HWND hwnd, NPSZ psz, INT n); INT wgetch(HWND hwnd); BOOL wkbhit(HWND hwnd); VOID wyield(HANDLE); INT wputch(HWND hwnd, INT i); VOID setcaret(HWND hwnd, INT x, INT y); VOID getcaret(HWND hwnd, PINT px, PINT py); VOID writechar(HWND hwnd, CHAR ch, INT n); VOID scrollrect(HWND hwndGuest, PRECT prc, INT n); extern HWND hwndGuest; extern HANDLE hHostInstance; extern INT flOptions; // command-line options (see OPT_*) extern INT flSignals; // signal flags (see SIGNAL_*) LONG FAR PASCAL VDMWndProc(HWND hwnd, UINT wMsg, UINT uParam, LONG lParam); BOOL FAR PASCAL VDMAbout(HWND hDlg, UINT wMsg, UINT uParam, LONG lParam); VOID processmessages(HWND hwnd); INT getkbdleds(VOID); VOID setkbdleds(INT flCon); VOID mapkbdkeys(PCONSOLE pcon, UINT iParam, BOOL fDown);