187 lines
5.9 KiB
C
187 lines
5.9 KiB
C
|
//
|
||
|
// 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);
|