1 /****************************************************************************
3 * SciTech OS Portability Manager Library
5 * ========================================================================
7 * The contents of this file are subject to the SciTech MGL Public
8 * License Version 1.0 (the "License"); you may not use this file
9 * except in compliance with the License. You may obtain a copy of
10 * the License at http://www.scitechsoft.com/mgl-license.txt
12 * Software distributed under the License is distributed on an
13 * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14 * implied. See the License for the specific language governing
15 * rights and limitations under the License.
17 * The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
19 * The Initial Developer of the Original Code is SciTech Software, Inc.
20 * All Rights Reserved.
22 * ========================================================================
27 * Description: Test program to test out the cross platform event handling
30 ****************************************************************************/
38 /* Translation table for key codes */
45 KeyEntry ASCIICodes[] = {
46 {ASCII_ctrlA ,"ASCII_ctrlA"},
47 {ASCII_ctrlB ,"ASCII_ctrlB"},
48 {ASCII_ctrlC ,"ASCII_ctrlC"},
49 {ASCII_ctrlD ,"ASCII_ctrlD"},
50 {ASCII_ctrlE ,"ASCII_ctrlE"},
51 {ASCII_ctrlF ,"ASCII_ctrlF"},
52 {ASCII_ctrlG ,"ASCII_ctrlG"},
53 {ASCII_backspace ,"ASCII_backspace"},
54 {ASCII_ctrlH ,"ASCII_ctrlH"},
55 {ASCII_tab ,"ASCII_tab"},
56 {ASCII_ctrlI ,"ASCII_ctrlI"},
57 {ASCII_ctrlJ ,"ASCII_ctrlJ"},
58 {ASCII_ctrlK ,"ASCII_ctrlK"},
59 {ASCII_ctrlL ,"ASCII_ctrlL"},
60 {ASCII_enter ,"ASCII_enter"},
61 {ASCII_ctrlM ,"ASCII_ctrlM"},
62 {ASCII_ctrlN ,"ASCII_ctrlN"},
63 {ASCII_ctrlO ,"ASCII_ctrlO"},
64 {ASCII_ctrlP ,"ASCII_ctrlP"},
65 {ASCII_ctrlQ ,"ASCII_ctrlQ"},
66 {ASCII_ctrlR ,"ASCII_ctrlR"},
67 {ASCII_ctrlS ,"ASCII_ctrlS"},
68 {ASCII_ctrlT ,"ASCII_ctrlT"},
69 {ASCII_ctrlU ,"ASCII_ctrlU"},
70 {ASCII_ctrlV ,"ASCII_ctrlV"},
71 {ASCII_ctrlW ,"ASCII_ctrlW"},
72 {ASCII_ctrlX ,"ASCII_ctrlX"},
73 {ASCII_ctrlY ,"ASCII_ctrlY"},
74 {ASCII_ctrlZ ,"ASCII_ctrlZ"},
75 {ASCII_esc ,"ASCII_esc"},
76 {ASCII_space ,"ASCII_space"},
77 {ASCII_exclamation ,"ASCII_exclamation"},
78 {ASCII_quote ,"ASCII_quote"},
79 {ASCII_pound ,"ASCII_pound"},
80 {ASCII_dollar ,"ASCII_dollar"},
81 {ASCII_percent ,"ASCII_percent"},
82 {ASCII_ampersand ,"ASCII_ampersand"},
83 {ASCII_apostrophe ,"ASCII_apostrophe"},
84 {ASCII_leftBrace ,"ASCII_leftBrace"},
85 {ASCII_rightBrace ,"ASCII_rightBrace"},
86 {ASCII_times ,"ASCII_times"},
87 {ASCII_plus ,"ASCII_plus"},
88 {ASCII_comma ,"ASCII_comma"},
89 {ASCII_minus ,"ASCII_minus"},
90 {ASCII_period ,"ASCII_period"},
91 {ASCII_divide ,"ASCII_divide"},
100 {ASCII_8 ,"ASCII_8"},
101 {ASCII_9 ,"ASCII_9"},
102 {ASCII_colon ,"ASCII_colon"},
103 {ASCII_semicolon ,"ASCII_semicolon"},
104 {ASCII_lessThan ,"ASCII_lessThan"},
105 {ASCII_equals ,"ASCII_equals"},
106 {ASCII_greaterThan ,"ASCII_greaterThan"},
107 {ASCII_question ,"ASCII_question"},
108 {ASCII_at ,"ASCII_at"},
109 {ASCII_A ,"ASCII_A"},
110 {ASCII_B ,"ASCII_B"},
111 {ASCII_C ,"ASCII_C"},
112 {ASCII_D ,"ASCII_D"},
113 {ASCII_E ,"ASCII_E"},
114 {ASCII_F ,"ASCII_F"},
115 {ASCII_G ,"ASCII_G"},
116 {ASCII_H ,"ASCII_H"},
117 {ASCII_I ,"ASCII_I"},
118 {ASCII_J ,"ASCII_J"},
119 {ASCII_K ,"ASCII_K"},
120 {ASCII_L ,"ASCII_L"},
121 {ASCII_M ,"ASCII_M"},
122 {ASCII_N ,"ASCII_N"},
123 {ASCII_O ,"ASCII_O"},
124 {ASCII_P ,"ASCII_P"},
125 {ASCII_Q ,"ASCII_Q"},
126 {ASCII_R ,"ASCII_R"},
127 {ASCII_S ,"ASCII_S"},
128 {ASCII_T ,"ASCII_T"},
129 {ASCII_U ,"ASCII_U"},
130 {ASCII_V ,"ASCII_V"},
131 {ASCII_W ,"ASCII_W"},
132 {ASCII_X ,"ASCII_X"},
133 {ASCII_Y ,"ASCII_Y"},
134 {ASCII_Z ,"ASCII_Z"},
135 {ASCII_leftSquareBrace ,"ASCII_leftSquareBrace"},
136 {ASCII_backSlash ,"ASCII_backSlash"},
137 {ASCII_rightSquareBrace ,"ASCII_rightSquareBrace"},
138 {ASCII_caret ,"ASCII_caret"},
139 {ASCII_underscore ,"ASCII_underscore"},
140 {ASCII_leftApostrophe ,"ASCII_leftApostrophe"},
141 {ASCII_a ,"ASCII_a"},
142 {ASCII_b ,"ASCII_b"},
143 {ASCII_c ,"ASCII_c"},
144 {ASCII_d ,"ASCII_d"},
145 {ASCII_e ,"ASCII_e"},
146 {ASCII_f ,"ASCII_f"},
147 {ASCII_g ,"ASCII_g"},
148 {ASCII_h ,"ASCII_h"},
149 {ASCII_i ,"ASCII_i"},
150 {ASCII_j ,"ASCII_j"},
151 {ASCII_k ,"ASCII_k"},
152 {ASCII_l ,"ASCII_l"},
153 {ASCII_m ,"ASCII_m"},
154 {ASCII_n ,"ASCII_n"},
155 {ASCII_o ,"ASCII_o"},
156 {ASCII_p ,"ASCII_p"},
157 {ASCII_q ,"ASCII_q"},
158 {ASCII_r ,"ASCII_r"},
159 {ASCII_s ,"ASCII_s"},
160 {ASCII_t ,"ASCII_t"},
161 {ASCII_u ,"ASCII_u"},
162 {ASCII_v ,"ASCII_v"},
163 {ASCII_w ,"ASCII_w"},
164 {ASCII_x ,"ASCII_x"},
165 {ASCII_y ,"ASCII_y"},
166 {ASCII_z ,"ASCII_z"},
167 {ASCII_leftCurlyBrace ,"ASCII_leftCurlyBrace"},
168 {ASCII_verticalBar ,"ASCII_verticalBar"},
169 {ASCII_rightCurlyBrace ,"ASCII_rightCurlyBrace"},
170 {ASCII_tilde ,"ASCII_tilde"},
171 {0 ,"ASCII_unknown"},
174 KeyEntry ScanCodes[] = {
175 {KB_padEnter ,"KB_padEnter"},
176 {KB_padMinus ,"KB_padMinus"},
177 {KB_padPlus ,"KB_padPlus"},
178 {KB_padTimes ,"KB_padTimes"},
179 {KB_padDivide ,"KB_padDivide"},
180 {KB_padLeft ,"KB_padLeft"},
181 {KB_padRight ,"KB_padRight"},
182 {KB_padUp ,"KB_padUp"},
183 {KB_padDown ,"KB_padDown"},
184 {KB_padInsert ,"KB_padInsert"},
185 {KB_padDelete ,"KB_padDelete"},
186 {KB_padHome ,"KB_padHome"},
187 {KB_padEnd ,"KB_padEnd"},
188 {KB_padPageUp ,"KB_padPageUp"},
189 {KB_padPageDown ,"KB_padPageDown"},
190 {KB_padCenter ,"KB_padCenter"},
203 {KB_left ,"KB_left"},
204 {KB_right ,"KB_right"},
206 {KB_down ,"KB_down"},
207 {KB_insert ,"KB_insert"},
208 {KB_delete ,"KB_delete"},
209 {KB_home ,"KB_home"},
211 {KB_pageUp ,"KB_pageUp"},
212 {KB_pageDown ,"KB_pageDown"},
213 {KB_capsLock ,"KB_capsLock"},
214 {KB_numLock ,"KB_numLock"},
215 {KB_scrollLock ,"KB_scrollLock"},
216 {KB_leftShift ,"KB_leftShift"},
217 {KB_rightShift ,"KB_rightShift"},
218 {KB_leftCtrl ,"KB_leftCtrl"},
219 {KB_rightCtrl ,"KB_rightCtrl"},
220 {KB_leftAlt ,"KB_leftAlt"},
221 {KB_rightAlt ,"KB_rightAlt"},
222 {KB_leftWindows ,"KB_leftWindows"},
223 {KB_rightWindows ,"KB_rightWindows"},
224 {KB_menu ,"KB_menu"},
225 {KB_sysReq ,"KB_sysReq"},
237 {KB_minus ,"KB_minus"},
238 {KB_equals ,"KB_equals"},
239 {KB_backSlash ,"KB_backSlash"},
240 {KB_backspace ,"KB_backspace"},
252 {KB_leftSquareBrace ,"KB_leftSquareBrace"},
253 {KB_rightSquareBrace ,"KB_rightSquareBrace"},
254 {KB_enter ,"KB_enter"},
264 {KB_semicolon ,"KB_semicolon"},
265 {KB_apostrophe ,"KB_apostrophe"},
273 {KB_comma ,"KB_comma"},
274 {KB_period ,"KB_period"},
275 {KB_divide ,"KB_divide"},
276 {KB_space ,"KB_space"},
277 {KB_tilde ,"KB_tilde"},
281 /****************************************************************************
283 x - X coordinate of the mouse cursor position (screen coordinates)
284 y - Y coordinate of the mouse cursor position (screen coordinates)
287 This gets called periodically to move the mouse. It will get called when
288 the mouse may not have actually moved, so check if it has before redrawing
290 ****************************************************************************/
291 void EVTAPI moveMouse(
297 /****************************************************************************
299 code - Code to translate
300 keys - Table of translation key values to look up
303 Simple function to look up the printable name for the keyboard code.
304 ****************************************************************************/
311 for (key = keys; key->code != 0; key++) {
312 if (key->code == code)
318 /****************************************************************************
320 evt - Event to display modifiers for
323 Function to display shift modifiers flags
324 ****************************************************************************/
325 void DisplayModifiers(
328 if (evt->modifiers & EVT_LEFTBUT)
330 if (evt->modifiers & EVT_RIGHTBUT)
332 if (evt->modifiers & EVT_MIDDLEBUT)
334 if (evt->modifiers & EVT_SHIFTKEY) {
335 if (evt->modifiers & EVT_LEFTSHIFT)
337 if (evt->modifiers & EVT_RIGHTSHIFT)
340 if (evt->modifiers & EVT_CTRLSTATE) {
341 if (evt->modifiers & EVT_LEFTCTRL)
343 if (evt->modifiers & EVT_RIGHTCTRL)
346 if (evt->modifiers & EVT_ALTSTATE) {
347 if (evt->modifiers & EVT_LEFTALT)
349 if (evt->modifiers & EVT_RIGHTALT)
354 /****************************************************************************
356 msg - Message to display for type of event
357 evt - Event to display
360 Function to display the status of the keyboard event to the screen.
361 ****************************************************************************/
366 KeyEntry *ascii,*scan;
367 char ch = EVT_asciiCode(evt->message);
369 ascii = FindKey(ch,ASCIICodes);
370 scan = FindKey(EVT_scanCode(evt->message),ScanCodes);
371 printf("%s: 0x%04X -> %s, %s, '%c'",
372 msg, (int)evt->message & 0xFFFF, scan->name, ascii->name, isprint(ch) ? ch : ' ');
373 DisplayModifiers(evt);
377 /****************************************************************************
379 msg - Message to display for type of event
380 evt - Event to display
383 Function to display the status of the mouse event to the screen.
384 ****************************************************************************/
390 if (evt->message & EVT_LEFTBMASK)
392 if (evt->message & EVT_RIGHTBMASK)
394 if (evt->message & EVT_MIDDLEBMASK)
396 printf("abs(%d,%d), rel(%d,%d)", evt->where_x, evt->where_y, evt->relative_x, evt->relative_y);
397 DisplayModifiers(evt);
398 if (evt->message & EVT_DBLCLICK)
399 printf(", DBLCLICK");
403 /****************************************************************************
405 msg - Message to display for type of event
406 evt - Event to display
409 Function to display the status of the joystick event to the screen.
410 ****************************************************************************/
415 printf("%s: Joy1(%4d,%4d,%c%c), Joy2(%4d,%4d,%c%c)\n", msg,
416 evt->where_x,evt->where_y,
417 (evt->message & EVT_JOY1_BUTTONA) ? 'A' : 'a',
418 (evt->message & EVT_JOY1_BUTTONB) ? 'B' : 'b',
419 evt->relative_x,evt->relative_y,
420 (evt->message & EVT_JOY2_BUTTONA) ? 'A' : 'a',
421 (evt->message & EVT_JOY2_BUTTONB) ? 'B' : 'b');
424 /****************************************************************************
426 Joystick calibration routine
427 ****************************************************************************/
428 void CalibrateJoy(void)
431 if(EVT_joyIsPresent()){
432 printf("Joystick Calibration\nMove the joystick to the upper left corner and press any button.\n");
433 EVT_halt(&evt, EVT_JOYCLICK);
434 EVT_halt(&evt, EVT_JOYCLICK);
435 EVT_joySetUpperLeft();
436 printf("Move the joystick to the lower right corner and press any button.\n");
437 EVT_halt(&evt, EVT_JOYCLICK);
438 EVT_halt(&evt, EVT_JOYCLICK);
439 EVT_joySetLowerRight();
440 printf("Move the joystick to center position and press any button.\n");
441 EVT_halt(&evt, EVT_JOYCLICK);
442 EVT_halt(&evt, EVT_JOYCLICK);
444 printf("Joystick calibrated\n");
448 /****************************************************************************
450 Main program entry point
451 ****************************************************************************/
458 hwndConsole = PM_openConsole(0,0,0,0,0,true);
459 EVT_init(&moveMouse);
460 EVT_setMouseRange(1024,768);
464 if (EVT_getNext(&evt,EVT_EVERYEVT)) {
467 DisplayKey("EVT_KEYDOWN ", &evt);
468 if (EVT_scanCode(evt.message) == KB_esc)
472 DisplayKey("EVT_KEYREPEAT", &evt);
475 DisplayKey("EVT_KEYUP ", &evt);
478 DisplayMouse("EVT_MOUSEDOWN", &evt);
481 DisplayMouse("EVT_MOUSEAUTO", &evt);
484 DisplayMouse("EVT_MOUSEUP ", &evt);
487 DisplayMouse("EVT_MOUSEMOVE", &evt);
490 DisplayJoy("EVT_JOYCLICK ", &evt);
493 DisplayJoy("EVT_JOYMOVE ", &evt);
499 PM_closeConsole(hwndConsole);