]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - board/MAI/bios_emulator/scitech/src/pm/tests/getch.c
* Patch by Thomas Frieden, 13 Nov 2002:
[karo-tx-uboot.git] / board / MAI / bios_emulator / scitech / src / pm / tests / getch.c
1 /****************************************************************************
2 *
3 *                   SciTech OS Portability Manager Library
4 *
5 *  ========================================================================
6 *
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
11 *
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.
16 *
17 *    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
18 *
19 *    The Initial Developer of the Original Code is SciTech Software, Inc.
20 *    All Rights Reserved.
21 *
22 *  ========================================================================
23 *
24 * Language:     ANSI C
25 * Environment:  Any
26 *
27 * Description:  Test program to test out the cross platform event handling
28 *               library.
29 *
30 ****************************************************************************/
31
32 #include <stdlib.h>
33 #include <stdio.h>
34 #include <ctype.h>
35 #include "pmapi.h"
36 #include "event.h"
37
38 /* Translation table for key codes */
39
40 typedef struct {
41     int     code;
42     char    *name;
43     } KeyEntry;
44
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"},
92     {ASCII_0                ,"ASCII_0"},
93     {ASCII_1                ,"ASCII_1"},
94     {ASCII_2                ,"ASCII_2"},
95     {ASCII_3                ,"ASCII_3"},
96     {ASCII_4                ,"ASCII_4"},
97     {ASCII_5                ,"ASCII_5"},
98     {ASCII_6                ,"ASCII_6"},
99     {ASCII_7                ,"ASCII_7"},
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"},
172     };
173
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"},
191     {KB_F1                  ,"KB_F1"},
192     {KB_F2                  ,"KB_F2"},
193     {KB_F3                  ,"KB_F3"},
194     {KB_F4                  ,"KB_F4"},
195     {KB_F5                  ,"KB_F5"},
196     {KB_F6                  ,"KB_F6"},
197     {KB_F7                  ,"KB_F7"},
198     {KB_F8                  ,"KB_F8"},
199     {KB_F9                  ,"KB_F9"},
200     {KB_F10                 ,"KB_F10"},
201     {KB_F11                 ,"KB_F11"},
202     {KB_F12                 ,"KB_F12"},
203     {KB_left                ,"KB_left"},
204     {KB_right               ,"KB_right"},
205     {KB_up                  ,"KB_up"},
206     {KB_down                ,"KB_down"},
207     {KB_insert              ,"KB_insert"},
208     {KB_delete              ,"KB_delete"},
209     {KB_home                ,"KB_home"},
210     {KB_end                 ,"KB_end"},
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"},
226     {KB_esc                 ,"KB_esc"},
227     {KB_1                   ,"KB_1"},
228     {KB_2                   ,"KB_2"},
229     {KB_3                   ,"KB_3"},
230     {KB_4                   ,"KB_4"},
231     {KB_5                   ,"KB_5"},
232     {KB_6                   ,"KB_6"},
233     {KB_7                   ,"KB_7"},
234     {KB_8                   ,"KB_8"},
235     {KB_9                   ,"KB_9"},
236     {KB_0                   ,"KB_0"},
237     {KB_minus               ,"KB_minus"},
238     {KB_equals              ,"KB_equals"},
239     {KB_backSlash           ,"KB_backSlash"},
240     {KB_backspace           ,"KB_backspace"},
241     {KB_tab                 ,"KB_tab"},
242     {KB_Q                   ,"KB_Q"},
243     {KB_W                   ,"KB_W"},
244     {KB_E                   ,"KB_E"},
245     {KB_R                   ,"KB_R"},
246     {KB_T                   ,"KB_T"},
247     {KB_Y                   ,"KB_Y"},
248     {KB_U                   ,"KB_U"},
249     {KB_I                   ,"KB_I"},
250     {KB_O                   ,"KB_O"},
251     {KB_P                   ,"KB_P"},
252     {KB_leftSquareBrace     ,"KB_leftSquareBrace"},
253     {KB_rightSquareBrace    ,"KB_rightSquareBrace"},
254     {KB_enter               ,"KB_enter"},
255     {KB_A                   ,"KB_A"},
256     {KB_S                   ,"KB_S"},
257     {KB_D                   ,"KB_D"},
258     {KB_F                   ,"KB_F"},
259     {KB_G                   ,"KB_G"},
260     {KB_H                   ,"KB_H"},
261     {KB_J                   ,"KB_J"},
262     {KB_K                   ,"KB_K"},
263     {KB_L                   ,"KB_L"},
264     {KB_semicolon           ,"KB_semicolon"},
265     {KB_apostrophe          ,"KB_apostrophe"},
266     {KB_Z                   ,"KB_Z"},
267     {KB_X                   ,"KB_X"},
268     {KB_C                   ,"KB_C"},
269     {KB_V                   ,"KB_V"},
270     {KB_B                   ,"KB_B"},
271     {KB_N                   ,"KB_N"},
272     {KB_M                   ,"KB_M"},
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"},
278     {0                      ,"KB_unknown"},
279     };
280
281 /****************************************************************************
282 PARAMETERS:
283 x   - X coordinate of the mouse cursor position (screen coordinates)
284 y   - Y coordinate of the mouse cursor position (screen coordinates)
285
286 REMARKS:
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
289 it.
290 ****************************************************************************/
291 void EVTAPI moveMouse(
292     int x,
293     int y)
294 {
295 }
296
297 /****************************************************************************
298 PARAMETERS:
299 code    - Code to translate
300 keys    - Table of translation key values to look up
301
302 REMARKS:
303 Simple function to look up the printable name for the keyboard code.
304 ****************************************************************************/
305 KeyEntry *FindKey(
306     int code,
307     KeyEntry *keys)
308 {
309     KeyEntry    *key;
310
311     for (key = keys; key->code != 0; key++) {
312         if (key->code == code)
313             break;
314         }
315     return key;
316 }
317
318 /****************************************************************************
319 PARAMETERS:
320 evt - Event to display modifiers for
321
322 REMARKS:
323 Function to display shift modifiers flags
324 ****************************************************************************/
325 void DisplayModifiers(
326     event_t *evt)
327 {
328     if (evt->modifiers & EVT_LEFTBUT)
329         printf(", LBUT");
330     if (evt->modifiers & EVT_RIGHTBUT)
331         printf(", RBUT");
332     if (evt->modifiers & EVT_MIDDLEBUT)
333         printf(", MBUT");
334     if (evt->modifiers & EVT_SHIFTKEY) {
335         if (evt->modifiers & EVT_LEFTSHIFT)
336             printf(", LSHIFT");
337         if (evt->modifiers & EVT_RIGHTSHIFT)
338             printf(", RSHIFT");
339         }
340     if (evt->modifiers & EVT_CTRLSTATE) {
341         if (evt->modifiers & EVT_LEFTCTRL)
342             printf(", LCTRL");
343         if (evt->modifiers & EVT_RIGHTCTRL)
344             printf(", RCTRL");
345         }
346     if (evt->modifiers & EVT_ALTSTATE) {
347         if (evt->modifiers & EVT_LEFTALT)
348             printf(", LALT");
349         if (evt->modifiers & EVT_RIGHTALT)
350             printf(", RALT");
351         }
352 }
353
354 /****************************************************************************
355 PARAMETERS:
356 msg - Message to display for type of event
357 evt - Event to display
358
359 REMARKS:
360 Function to display the status of the keyboard event to the screen.
361 ****************************************************************************/
362 void DisplayKey(
363     char *msg,
364     event_t *evt)
365 {
366     KeyEntry    *ascii,*scan;
367     char        ch = EVT_asciiCode(evt->message);
368
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);
374     printf("\n");
375 }
376
377 /****************************************************************************
378 PARAMETERS:
379 msg - Message to display for type of event
380 evt - Event to display
381
382 REMARKS:
383 Function to display the status of the mouse event to the screen.
384 ****************************************************************************/
385 void DisplayMouse(
386     char *msg,
387     event_t *evt)
388 {
389     printf("%s: ", msg);
390     if (evt->message & EVT_LEFTBMASK)
391         printf("LEFT ");
392     if (evt->message & EVT_RIGHTBMASK)
393         printf("RIGHT ");
394     if (evt->message & EVT_MIDDLEBMASK)
395         printf("MIDDLE ");
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");
400     printf("\n");
401 }
402
403 /****************************************************************************
404 PARAMETERS:
405 msg - Message to display for type of event
406 evt - Event to display
407
408 REMARKS:
409 Function to display the status of the joystick event to the screen.
410 ****************************************************************************/
411 void DisplayJoy(
412     char *msg,
413     event_t *evt)
414 {
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');
422 }
423
424 /****************************************************************************
425 REMARKS:
426 Joystick calibration routine
427 ****************************************************************************/
428 void CalibrateJoy(void)
429 {
430   event_t evt;
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);
443     EVT_joySetCenter();
444     printf("Joystick calibrated\n");
445   }
446 }
447
448 /****************************************************************************
449 REMARKS:
450 Main program entry point
451 ****************************************************************************/
452 int main(void)
453 {
454     event_t     evt;
455     ibool       done = false;
456     PM_HWND     hwndConsole;
457
458     hwndConsole = PM_openConsole(0,0,0,0,0,true);
459     EVT_init(&moveMouse);
460     EVT_setMouseRange(1024,768);
461     CalibrateJoy();
462     do {
463         EVT_pollJoystick();
464         if (EVT_getNext(&evt,EVT_EVERYEVT)) {
465             switch (evt.what) {
466                 case EVT_KEYDOWN:
467                     DisplayKey("EVT_KEYDOWN  ", &evt);
468                     if (EVT_scanCode(evt.message) == KB_esc)
469                         done = true;
470                     break;
471                 case EVT_KEYREPEAT:
472                     DisplayKey("EVT_KEYREPEAT", &evt);
473                     break;
474                 case EVT_KEYUP:
475                     DisplayKey("EVT_KEYUP    ", &evt);
476                     break;
477                 case EVT_MOUSEDOWN:
478                     DisplayMouse("EVT_MOUSEDOWN", &evt);
479                     break;
480                 case EVT_MOUSEAUTO:
481                     DisplayMouse("EVT_MOUSEAUTO", &evt);
482                     break;
483                 case EVT_MOUSEUP:
484                     DisplayMouse("EVT_MOUSEUP  ", &evt);
485                     break;
486                 case EVT_MOUSEMOVE:
487                     DisplayMouse("EVT_MOUSEMOVE", &evt);
488                     break;
489                 case EVT_JOYCLICK:
490                     DisplayJoy("EVT_JOYCLICK ", &evt);
491                     break;
492                 case EVT_JOYMOVE:
493                     DisplayJoy("EVT_JOYMOVE  ", &evt);
494                     break;
495                 }
496             }
497         } while (!done);
498     EVT_exit();
499     PM_closeConsole(hwndConsole);
500     return 0;
501 }