summaryrefslogtreecommitdiffstats
path: root/private/mvdm/v86/scaffold/i386/xwincon.h
blob: c3880146dc04fc79b65d018e24e0616128d96ea3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
//
// 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);