windows-nt/Source/XPSP1/NT/base/mvdm/v86/scaffold/i386/xwincon.h
2020-09-26 16:20:57 +08:00

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);