| /**************************************************************************** |
| * |
| * SciTech OS Portability Manager Library |
| * |
| * ======================================================================== |
| * |
| * The contents of this file are subject to the SciTech MGL Public |
| * License Version 1.0 (the "License"); you may not use this file |
| * except in compliance with the License. You may obtain a copy of |
| * the License at http://www.scitechsoft.com/mgl-license.txt |
| * |
| * Software distributed under the License is distributed on an |
| * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or |
| * implied. See the License for the specific language governing |
| * rights and limitations under the License. |
| * |
| * The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc. |
| * |
| * The Initial Developer of the Original Code is SciTech Software, Inc. |
| * All Rights Reserved. |
| * |
| * ======================================================================== |
| * |
| * Language: ANSI C |
| * Environment: Any |
| * |
| * Description: Test program to test out the cross platform event handling |
| * library. |
| * |
| ****************************************************************************/ |
| |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <ctype.h> |
| #include "pmapi.h" |
| #include "event.h" |
| |
| /* Translation table for key codes */ |
| |
| typedef struct { |
| int code; |
| char *name; |
| } KeyEntry; |
| |
| KeyEntry ASCIICodes[] = { |
| {ASCII_ctrlA ,"ASCII_ctrlA"}, |
| {ASCII_ctrlB ,"ASCII_ctrlB"}, |
| {ASCII_ctrlC ,"ASCII_ctrlC"}, |
| {ASCII_ctrlD ,"ASCII_ctrlD"}, |
| {ASCII_ctrlE ,"ASCII_ctrlE"}, |
| {ASCII_ctrlF ,"ASCII_ctrlF"}, |
| {ASCII_ctrlG ,"ASCII_ctrlG"}, |
| {ASCII_backspace ,"ASCII_backspace"}, |
| {ASCII_ctrlH ,"ASCII_ctrlH"}, |
| {ASCII_tab ,"ASCII_tab"}, |
| {ASCII_ctrlI ,"ASCII_ctrlI"}, |
| {ASCII_ctrlJ ,"ASCII_ctrlJ"}, |
| {ASCII_ctrlK ,"ASCII_ctrlK"}, |
| {ASCII_ctrlL ,"ASCII_ctrlL"}, |
| {ASCII_enter ,"ASCII_enter"}, |
| {ASCII_ctrlM ,"ASCII_ctrlM"}, |
| {ASCII_ctrlN ,"ASCII_ctrlN"}, |
| {ASCII_ctrlO ,"ASCII_ctrlO"}, |
| {ASCII_ctrlP ,"ASCII_ctrlP"}, |
| {ASCII_ctrlQ ,"ASCII_ctrlQ"}, |
| {ASCII_ctrlR ,"ASCII_ctrlR"}, |
| {ASCII_ctrlS ,"ASCII_ctrlS"}, |
| {ASCII_ctrlT ,"ASCII_ctrlT"}, |
| {ASCII_ctrlU ,"ASCII_ctrlU"}, |
| {ASCII_ctrlV ,"ASCII_ctrlV"}, |
| {ASCII_ctrlW ,"ASCII_ctrlW"}, |
| {ASCII_ctrlX ,"ASCII_ctrlX"}, |
| {ASCII_ctrlY ,"ASCII_ctrlY"}, |
| {ASCII_ctrlZ ,"ASCII_ctrlZ"}, |
| {ASCII_esc ,"ASCII_esc"}, |
| {ASCII_space ,"ASCII_space"}, |
| {ASCII_exclamation ,"ASCII_exclamation"}, |
| {ASCII_quote ,"ASCII_quote"}, |
| {ASCII_pound ,"ASCII_pound"}, |
| {ASCII_dollar ,"ASCII_dollar"}, |
| {ASCII_percent ,"ASCII_percent"}, |
| {ASCII_ampersand ,"ASCII_ampersand"}, |
| {ASCII_apostrophe ,"ASCII_apostrophe"}, |
| {ASCII_leftBrace ,"ASCII_leftBrace"}, |
| {ASCII_rightBrace ,"ASCII_rightBrace"}, |
| {ASCII_times ,"ASCII_times"}, |
| {ASCII_plus ,"ASCII_plus"}, |
| {ASCII_comma ,"ASCII_comma"}, |
| {ASCII_minus ,"ASCII_minus"}, |
| {ASCII_period ,"ASCII_period"}, |
| {ASCII_divide ,"ASCII_divide"}, |
| {ASCII_0 ,"ASCII_0"}, |
| {ASCII_1 ,"ASCII_1"}, |
| {ASCII_2 ,"ASCII_2"}, |
| {ASCII_3 ,"ASCII_3"}, |
| {ASCII_4 ,"ASCII_4"}, |
| {ASCII_5 ,"ASCII_5"}, |
| {ASCII_6 ,"ASCII_6"}, |
| {ASCII_7 ,"ASCII_7"}, |
| {ASCII_8 ,"ASCII_8"}, |
| {ASCII_9 ,"ASCII_9"}, |
| {ASCII_colon ,"ASCII_colon"}, |
| {ASCII_semicolon ,"ASCII_semicolon"}, |
| {ASCII_lessThan ,"ASCII_lessThan"}, |
| {ASCII_equals ,"ASCII_equals"}, |
| {ASCII_greaterThan ,"ASCII_greaterThan"}, |
| {ASCII_question ,"ASCII_question"}, |
| {ASCII_at ,"ASCII_at"}, |
| {ASCII_A ,"ASCII_A"}, |
| {ASCII_B ,"ASCII_B"}, |
| {ASCII_C ,"ASCII_C"}, |
| {ASCII_D ,"ASCII_D"}, |
| {ASCII_E ,"ASCII_E"}, |
| {ASCII_F ,"ASCII_F"}, |
| {ASCII_G ,"ASCII_G"}, |
| {ASCII_H ,"ASCII_H"}, |
| {ASCII_I ,"ASCII_I"}, |
| {ASCII_J ,"ASCII_J"}, |
| {ASCII_K ,"ASCII_K"}, |
| {ASCII_L ,"ASCII_L"}, |
| {ASCII_M ,"ASCII_M"}, |
| {ASCII_N ,"ASCII_N"}, |
| {ASCII_O ,"ASCII_O"}, |
| {ASCII_P ,"ASCII_P"}, |
| {ASCII_Q ,"ASCII_Q"}, |
| {ASCII_R ,"ASCII_R"}, |
| {ASCII_S ,"ASCII_S"}, |
| {ASCII_T ,"ASCII_T"}, |
| {ASCII_U ,"ASCII_U"}, |
| {ASCII_V ,"ASCII_V"}, |
| {ASCII_W ,"ASCII_W"}, |
| {ASCII_X ,"ASCII_X"}, |
| {ASCII_Y ,"ASCII_Y"}, |
| {ASCII_Z ,"ASCII_Z"}, |
| {ASCII_leftSquareBrace ,"ASCII_leftSquareBrace"}, |
| {ASCII_backSlash ,"ASCII_backSlash"}, |
| {ASCII_rightSquareBrace ,"ASCII_rightSquareBrace"}, |
| {ASCII_caret ,"ASCII_caret"}, |
| {ASCII_underscore ,"ASCII_underscore"}, |
| {ASCII_leftApostrophe ,"ASCII_leftApostrophe"}, |
| {ASCII_a ,"ASCII_a"}, |
| {ASCII_b ,"ASCII_b"}, |
| {ASCII_c ,"ASCII_c"}, |
| {ASCII_d ,"ASCII_d"}, |
| {ASCII_e ,"ASCII_e"}, |
| {ASCII_f ,"ASCII_f"}, |
| {ASCII_g ,"ASCII_g"}, |
| {ASCII_h ,"ASCII_h"}, |
| {ASCII_i ,"ASCII_i"}, |
| {ASCII_j ,"ASCII_j"}, |
| {ASCII_k ,"ASCII_k"}, |
| {ASCII_l ,"ASCII_l"}, |
| {ASCII_m ,"ASCII_m"}, |
| {ASCII_n ,"ASCII_n"}, |
| {ASCII_o ,"ASCII_o"}, |
| {ASCII_p ,"ASCII_p"}, |
| {ASCII_q ,"ASCII_q"}, |
| {ASCII_r ,"ASCII_r"}, |
| {ASCII_s ,"ASCII_s"}, |
| {ASCII_t ,"ASCII_t"}, |
| {ASCII_u ,"ASCII_u"}, |
| {ASCII_v ,"ASCII_v"}, |
| {ASCII_w ,"ASCII_w"}, |
| {ASCII_x ,"ASCII_x"}, |
| {ASCII_y ,"ASCII_y"}, |
| {ASCII_z ,"ASCII_z"}, |
| {ASCII_leftCurlyBrace ,"ASCII_leftCurlyBrace"}, |
| {ASCII_verticalBar ,"ASCII_verticalBar"}, |
| {ASCII_rightCurlyBrace ,"ASCII_rightCurlyBrace"}, |
| {ASCII_tilde ,"ASCII_tilde"}, |
| {0 ,"ASCII_unknown"}, |
| }; |
| |
| KeyEntry ScanCodes[] = { |
| {KB_padEnter ,"KB_padEnter"}, |
| {KB_padMinus ,"KB_padMinus"}, |
| {KB_padPlus ,"KB_padPlus"}, |
| {KB_padTimes ,"KB_padTimes"}, |
| {KB_padDivide ,"KB_padDivide"}, |
| {KB_padLeft ,"KB_padLeft"}, |
| {KB_padRight ,"KB_padRight"}, |
| {KB_padUp ,"KB_padUp"}, |
| {KB_padDown ,"KB_padDown"}, |
| {KB_padInsert ,"KB_padInsert"}, |
| {KB_padDelete ,"KB_padDelete"}, |
| {KB_padHome ,"KB_padHome"}, |
| {KB_padEnd ,"KB_padEnd"}, |
| {KB_padPageUp ,"KB_padPageUp"}, |
| {KB_padPageDown ,"KB_padPageDown"}, |
| {KB_padCenter ,"KB_padCenter"}, |
| {KB_F1 ,"KB_F1"}, |
| {KB_F2 ,"KB_F2"}, |
| {KB_F3 ,"KB_F3"}, |
| {KB_F4 ,"KB_F4"}, |
| {KB_F5 ,"KB_F5"}, |
| {KB_F6 ,"KB_F6"}, |
| {KB_F7 ,"KB_F7"}, |
| {KB_F8 ,"KB_F8"}, |
| {KB_F9 ,"KB_F9"}, |
| {KB_F10 ,"KB_F10"}, |
| {KB_F11 ,"KB_F11"}, |
| {KB_F12 ,"KB_F12"}, |
| {KB_left ,"KB_left"}, |
| {KB_right ,"KB_right"}, |
| {KB_up ,"KB_up"}, |
| {KB_down ,"KB_down"}, |
| {KB_insert ,"KB_insert"}, |
| {KB_delete ,"KB_delete"}, |
| {KB_home ,"KB_home"}, |
| {KB_end ,"KB_end"}, |
| {KB_pageUp ,"KB_pageUp"}, |
| {KB_pageDown ,"KB_pageDown"}, |
| {KB_capsLock ,"KB_capsLock"}, |
| {KB_numLock ,"KB_numLock"}, |
| {KB_scrollLock ,"KB_scrollLock"}, |
| {KB_leftShift ,"KB_leftShift"}, |
| {KB_rightShift ,"KB_rightShift"}, |
| {KB_leftCtrl ,"KB_leftCtrl"}, |
| {KB_rightCtrl ,"KB_rightCtrl"}, |
| {KB_leftAlt ,"KB_leftAlt"}, |
| {KB_rightAlt ,"KB_rightAlt"}, |
| {KB_leftWindows ,"KB_leftWindows"}, |
| {KB_rightWindows ,"KB_rightWindows"}, |
| {KB_menu ,"KB_menu"}, |
| {KB_sysReq ,"KB_sysReq"}, |
| {KB_esc ,"KB_esc"}, |
| {KB_1 ,"KB_1"}, |
| {KB_2 ,"KB_2"}, |
| {KB_3 ,"KB_3"}, |
| {KB_4 ,"KB_4"}, |
| {KB_5 ,"KB_5"}, |
| {KB_6 ,"KB_6"}, |
| {KB_7 ,"KB_7"}, |
| {KB_8 ,"KB_8"}, |
| {KB_9 ,"KB_9"}, |
| {KB_0 ,"KB_0"}, |
| {KB_minus ,"KB_minus"}, |
| {KB_equals ,"KB_equals"}, |
| {KB_backSlash ,"KB_backSlash"}, |
| {KB_backspace ,"KB_backspace"}, |
| {KB_tab ,"KB_tab"}, |
| {KB_Q ,"KB_Q"}, |
| {KB_W ,"KB_W"}, |
| {KB_E ,"KB_E"}, |
| {KB_R ,"KB_R"}, |
| {KB_T ,"KB_T"}, |
| {KB_Y ,"KB_Y"}, |
| {KB_U ,"KB_U"}, |
| {KB_I ,"KB_I"}, |
| {KB_O ,"KB_O"}, |
| {KB_P ,"KB_P"}, |
| {KB_leftSquareBrace ,"KB_leftSquareBrace"}, |
| {KB_rightSquareBrace ,"KB_rightSquareBrace"}, |
| {KB_enter ,"KB_enter"}, |
| {KB_A ,"KB_A"}, |
| {KB_S ,"KB_S"}, |
| {KB_D ,"KB_D"}, |
| {KB_F ,"KB_F"}, |
| {KB_G ,"KB_G"}, |
| {KB_H ,"KB_H"}, |
| {KB_J ,"KB_J"}, |
| {KB_K ,"KB_K"}, |
| {KB_L ,"KB_L"}, |
| {KB_semicolon ,"KB_semicolon"}, |
| {KB_apostrophe ,"KB_apostrophe"}, |
| {KB_Z ,"KB_Z"}, |
| {KB_X ,"KB_X"}, |
| {KB_C ,"KB_C"}, |
| {KB_V ,"KB_V"}, |
| {KB_B ,"KB_B"}, |
| {KB_N ,"KB_N"}, |
| {KB_M ,"KB_M"}, |
| {KB_comma ,"KB_comma"}, |
| {KB_period ,"KB_period"}, |
| {KB_divide ,"KB_divide"}, |
| {KB_space ,"KB_space"}, |
| {KB_tilde ,"KB_tilde"}, |
| {0 ,"KB_unknown"}, |
| }; |
| |
| /**************************************************************************** |
| PARAMETERS: |
| x - X coordinate of the mouse cursor position (screen coordinates) |
| y - Y coordinate of the mouse cursor position (screen coordinates) |
| |
| REMARKS: |
| This gets called periodically to move the mouse. It will get called when |
| the mouse may not have actually moved, so check if it has before redrawing |
| it. |
| ****************************************************************************/ |
| void EVTAPI moveMouse( |
| int x, |
| int y) |
| { |
| } |
| |
| /**************************************************************************** |
| PARAMETERS: |
| code - Code to translate |
| keys - Table of translation key values to look up |
| |
| REMARKS: |
| Simple function to look up the printable name for the keyboard code. |
| ****************************************************************************/ |
| KeyEntry *FindKey( |
| int code, |
| KeyEntry *keys) |
| { |
| KeyEntry *key; |
| |
| for (key = keys; key->code != 0; key++) { |
| if (key->code == code) |
| break; |
| } |
| return key; |
| } |
| |
| /**************************************************************************** |
| PARAMETERS: |
| evt - Event to display modifiers for |
| |
| REMARKS: |
| Function to display shift modifiers flags |
| ****************************************************************************/ |
| void DisplayModifiers( |
| event_t *evt) |
| { |
| if (evt->modifiers & EVT_LEFTBUT) |
| printf(", LBUT"); |
| if (evt->modifiers & EVT_RIGHTBUT) |
| printf(", RBUT"); |
| if (evt->modifiers & EVT_MIDDLEBUT) |
| printf(", MBUT"); |
| if (evt->modifiers & EVT_SHIFTKEY) { |
| if (evt->modifiers & EVT_LEFTSHIFT) |
| printf(", LSHIFT"); |
| if (evt->modifiers & EVT_RIGHTSHIFT) |
| printf(", RSHIFT"); |
| } |
| if (evt->modifiers & EVT_CTRLSTATE) { |
| if (evt->modifiers & EVT_LEFTCTRL) |
| printf(", LCTRL"); |
| if (evt->modifiers & EVT_RIGHTCTRL) |
| printf(", RCTRL"); |
| } |
| if (evt->modifiers & EVT_ALTSTATE) { |
| if (evt->modifiers & EVT_LEFTALT) |
| printf(", LALT"); |
| if (evt->modifiers & EVT_RIGHTALT) |
| printf(", RALT"); |
| } |
| } |
| |
| /**************************************************************************** |
| PARAMETERS: |
| msg - Message to display for type of event |
| evt - Event to display |
| |
| REMARKS: |
| Function to display the status of the keyboard event to the screen. |
| ****************************************************************************/ |
| void DisplayKey( |
| char *msg, |
| event_t *evt) |
| { |
| KeyEntry *ascii,*scan; |
| char ch = EVT_asciiCode(evt->message); |
| |
| ascii = FindKey(ch,ASCIICodes); |
| scan = FindKey(EVT_scanCode(evt->message),ScanCodes); |
| printf("%s: 0x%04X -> %s, %s, '%c'", |
| msg, (int)evt->message & 0xFFFF, scan->name, ascii->name, isprint(ch) ? ch : ' '); |
| DisplayModifiers(evt); |
| printf("\n"); |
| } |
| |
| /**************************************************************************** |
| PARAMETERS: |
| msg - Message to display for type of event |
| evt - Event to display |
| |
| REMARKS: |
| Function to display the status of the mouse event to the screen. |
| ****************************************************************************/ |
| void DisplayMouse( |
| char *msg, |
| event_t *evt) |
| { |
| printf("%s: ", msg); |
| if (evt->message & EVT_LEFTBMASK) |
| printf("LEFT "); |
| if (evt->message & EVT_RIGHTBMASK) |
| printf("RIGHT "); |
| if (evt->message & EVT_MIDDLEBMASK) |
| printf("MIDDLE "); |
| printf("abs(%d,%d), rel(%d,%d)", evt->where_x, evt->where_y, evt->relative_x, evt->relative_y); |
| DisplayModifiers(evt); |
| if (evt->message & EVT_DBLCLICK) |
| printf(", DBLCLICK"); |
| printf("\n"); |
| } |
| |
| /**************************************************************************** |
| PARAMETERS: |
| msg - Message to display for type of event |
| evt - Event to display |
| |
| REMARKS: |
| Function to display the status of the joystick event to the screen. |
| ****************************************************************************/ |
| void DisplayJoy( |
| char *msg, |
| event_t *evt) |
| { |
| printf("%s: Joy1(%4d,%4d,%c%c), Joy2(%4d,%4d,%c%c)\n", msg, |
| evt->where_x,evt->where_y, |
| (evt->message & EVT_JOY1_BUTTONA) ? 'A' : 'a', |
| (evt->message & EVT_JOY1_BUTTONB) ? 'B' : 'b', |
| evt->relative_x,evt->relative_y, |
| (evt->message & EVT_JOY2_BUTTONA) ? 'A' : 'a', |
| (evt->message & EVT_JOY2_BUTTONB) ? 'B' : 'b'); |
| } |
| |
| /**************************************************************************** |
| REMARKS: |
| Joystick calibration routine |
| ****************************************************************************/ |
| void CalibrateJoy(void) |
| { |
| event_t evt; |
| if(EVT_joyIsPresent()){ |
| printf("Joystick Calibration\nMove the joystick to the upper left corner and press any button.\n"); |
| EVT_halt(&evt, EVT_JOYCLICK); |
| EVT_halt(&evt, EVT_JOYCLICK); |
| EVT_joySetUpperLeft(); |
| printf("Move the joystick to the lower right corner and press any button.\n"); |
| EVT_halt(&evt, EVT_JOYCLICK); |
| EVT_halt(&evt, EVT_JOYCLICK); |
| EVT_joySetLowerRight(); |
| printf("Move the joystick to center position and press any button.\n"); |
| EVT_halt(&evt, EVT_JOYCLICK); |
| EVT_halt(&evt, EVT_JOYCLICK); |
| EVT_joySetCenter(); |
| printf("Joystick calibrated\n"); |
| } |
| } |
| |
| /**************************************************************************** |
| REMARKS: |
| Main program entry point |
| ****************************************************************************/ |
| int main(void) |
| { |
| event_t evt; |
| ibool done = false; |
| PM_HWND hwndConsole; |
| |
| hwndConsole = PM_openConsole(0,0,0,0,0,true); |
| EVT_init(&moveMouse); |
| EVT_setMouseRange(1024,768); |
| CalibrateJoy(); |
| do { |
| EVT_pollJoystick(); |
| if (EVT_getNext(&evt,EVT_EVERYEVT)) { |
| switch (evt.what) { |
| case EVT_KEYDOWN: |
| DisplayKey("EVT_KEYDOWN ", &evt); |
| if (EVT_scanCode(evt.message) == KB_esc) |
| done = true; |
| break; |
| case EVT_KEYREPEAT: |
| DisplayKey("EVT_KEYREPEAT", &evt); |
| break; |
| case EVT_KEYUP: |
| DisplayKey("EVT_KEYUP ", &evt); |
| break; |
| case EVT_MOUSEDOWN: |
| DisplayMouse("EVT_MOUSEDOWN", &evt); |
| break; |
| case EVT_MOUSEAUTO: |
| DisplayMouse("EVT_MOUSEAUTO", &evt); |
| break; |
| case EVT_MOUSEUP: |
| DisplayMouse("EVT_MOUSEUP ", &evt); |
| break; |
| case EVT_MOUSEMOVE: |
| DisplayMouse("EVT_MOUSEMOVE", &evt); |
| break; |
| case EVT_JOYCLICK: |
| DisplayJoy("EVT_JOYCLICK ", &evt); |
| break; |
| case EVT_JOYMOVE: |
| DisplayJoy("EVT_JOYMOVE ", &evt); |
| break; |
| } |
| } |
| } while (!done); |
| EVT_exit(); |
| PM_closeConsole(hwndConsole); |
| return 0; |
| } |