/**************************************************************************** REMARKS: Simple utility function to use the event library to read an ASCII keypress and return it. This function will block until a key is hit. ****************************************************************************/ int EVT_getch(void) { event_t evt; do { EVT_halt(&evt,EVT_KEYDOWN | EVT_KEYREPEAT); } while (EVT_asciiCode(evt.message) == 0); return EVT_asciiCode(evt.message); }
/**************************************************************************** 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"); }
/**************************************************************************** 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(1023,767); CalibrateJoy(); do { EVT_pollJoystick(); if (EVT_getNext(&evt,EVT_EVERYEVT)) { switch (evt.what) { case EVT_KEYDOWN: DisplayKey("EVT_KEYDOWN ", &evt); if (EVT_asciiCode(evt.message) == ASCII_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; }
static long wxScanToKeyCode(event_t *event, bool translate) { // VS: make it __WXDEBUG__-only, since we have lots of wxLogTrace calls // here and the arguments would be stored in non-debug executable even // though wxLogTrace would be no-op... #ifdef __WXDEBUG__ #define KEY(mgl_key,wx_key) \ case mgl_key: \ wxLogTrace(wxT("keyevents"), \ wxT("key " #mgl_key ", mapped to " #wx_key)); \ key = wx_key; \ break; #else #define KEY(mgl_key,wx_key) \ case mgl_key: key = wx_key; break; #endif long key = 0; if ( translate ) { bool numlock = (event->modifiers & EVT_NUMLOCK) != 0; switch ( EVT_scanCode(event->message) ) { KEY (KB_padMinus, WXK_NUMPAD_SUBTRACT) KEY (KB_padPlus, WXK_NUMPAD_ADD) KEY (KB_padTimes, WXK_NUMPAD_MULTIPLY) KEY (KB_padDivide, WXK_NUMPAD_DIVIDE) KEY (KB_padCenter, numlock ? WXK_NUMPAD5 : WXK_NUMPAD_SEPARATOR) // ? KEY (KB_padLeft, numlock ? WXK_NUMPAD4 : WXK_NUMPAD_LEFT) KEY (KB_padRight, numlock ? WXK_NUMPAD6 : WXK_NUMPAD_RIGHT) KEY (KB_padUp, numlock ? WXK_NUMPAD8 : WXK_NUMPAD_UP) KEY (KB_padDown, numlock ? WXK_NUMPAD2 : WXK_NUMPAD_DOWN) KEY (KB_padInsert, numlock ? WXK_NUMPAD0 : WXK_NUMPAD_INSERT) KEY (KB_padDelete, numlock ? WXK_DECIMAL : WXK_NUMPAD_DELETE) KEY (KB_padHome, numlock ? WXK_NUMPAD7 : WXK_NUMPAD_HOME) KEY (KB_padEnd, numlock ? WXK_NUMPAD1 : WXK_NUMPAD_END) KEY (KB_padPageUp, numlock ? WXK_NUMPAD9 : WXK_NUMPAD_PAGEUP) KEY (KB_padPageDown, numlock ? WXK_NUMPAD3 : WXK_NUMPAD_PAGEDOWN) KEY (KB_1, '1') KEY (KB_2, '2') KEY (KB_3, '3') KEY (KB_4, '4') KEY (KB_5, '5') KEY (KB_6, '6') KEY (KB_7, '7') KEY (KB_8, '8') KEY (KB_9, '9') KEY (KB_0, '0') KEY (KB_minus, WXK_SUBTRACT) KEY (KB_equals, WXK_ADD) KEY (KB_backSlash, '\\') KEY (KB_Q, 'Q') KEY (KB_W, 'W') KEY (KB_E, 'E') KEY (KB_R, 'R') KEY (KB_T, 'T') KEY (KB_Y, 'Y') KEY (KB_U, 'U') KEY (KB_I, 'I') KEY (KB_O, 'O') KEY (KB_P, 'P') KEY (KB_leftSquareBrace,'[') KEY (KB_rightSquareBrace,']') KEY (KB_A, 'A') KEY (KB_S, 'S') KEY (KB_D, 'D') KEY (KB_F, 'F') KEY (KB_G, 'G') KEY (KB_H, 'H') KEY (KB_J, 'J') KEY (KB_K, 'K') KEY (KB_L, 'L') KEY (KB_semicolon, ';') KEY (KB_apostrophe, '\'') KEY (KB_Z, 'Z') KEY (KB_X, 'X') KEY (KB_C, 'C') KEY (KB_V, 'V') KEY (KB_B, 'B') KEY (KB_N, 'N') KEY (KB_M, 'M') KEY (KB_comma, ',') KEY (KB_period, '.') KEY (KB_divide, WXK_DIVIDE) KEY (KB_space, WXK_SPACE) KEY (KB_tilde, '~') default: break; } } if ( key == 0 ) { switch ( EVT_scanCode(event->message) ) { KEY (KB_padEnter, WXK_NUMPAD_ENTER) KEY (KB_F1, WXK_F1) KEY (KB_F2, WXK_F2) KEY (KB_F3, WXK_F3) KEY (KB_F4, WXK_F4) KEY (KB_F5, WXK_F5) KEY (KB_F6, WXK_F6) KEY (KB_F7, WXK_F7) KEY (KB_F8, WXK_F8) KEY (KB_F9, WXK_F9) KEY (KB_F10, WXK_F10) KEY (KB_F11, WXK_F11) KEY (KB_F12, WXK_F12) KEY (KB_left, WXK_LEFT) KEY (KB_right, WXK_RIGHT) KEY (KB_up, WXK_UP) KEY (KB_down, WXK_DOWN) KEY (KB_insert, WXK_INSERT) KEY (KB_delete, WXK_DELETE) KEY (KB_home, WXK_HOME) KEY (KB_end, WXK_END) KEY (KB_pageUp, WXK_PAGEUP) KEY (KB_pageDown, WXK_PAGEDOWN) KEY (KB_capsLock, WXK_CAPITAL) KEY (KB_numLock, WXK_NUMLOCK) KEY (KB_scrollLock, WXK_SCROLL) KEY (KB_leftShift, WXK_SHIFT) KEY (KB_rightShift, WXK_SHIFT) KEY (KB_leftCtrl, WXK_CONTROL) KEY (KB_rightCtrl, WXK_CONTROL) KEY (KB_leftAlt, WXK_ALT) KEY (KB_rightAlt, WXK_ALT) KEY (KB_leftWindows, WXK_START) KEY (KB_rightWindows, WXK_START) KEY (KB_menu, WXK_MENU) KEY (KB_sysReq, WXK_SNAPSHOT) KEY (KB_esc, WXK_ESCAPE) KEY (KB_backspace, WXK_BACK) KEY (KB_tab, WXK_TAB) KEY (KB_enter, WXK_RETURN) default: key = EVT_asciiCode(event->message); break; } } #undef KEY return key; }
int mechTest( GA_HGLRC glrc, int width, int height) { ibool done = false; int initPageCount = 5; int fpsRate = 0,key = 0,waitVRT = gaWaitVRT,pageCount = initPageCount; ulong lastCount = 0,newCount; event_t evt; myinit(); myReshape(width,height); LZTimerOn(); while (!done) { animation(); display(); gmoveto(0,0); gprintf("%d x %d %d bit %s (%d.%d fps)",(int)maxX+1,(int)maxY+1, (int)modeInfo.BitsPerPixel, (cntMode & gaLinearBuffer) ? "Linear" : "Banked", fpsRate / 10, fpsRate % 10); if (softwareOnly) gprintf("Rendering to system memory back buffer"); switch (waitVRT) { case gaTripleBuffer: gprintf("Triple buffering - should be no flicker"); gprintf("Frame rate *must* max at refresh rate"); break; case gaWaitVRT: gprintf("Double buffering - should be no flicker"); gprintf("Frame rate *must* lock to multiple of refresh"); break; default: gprintf("Page flipping (no wait) - may flicker"); gprintf("Frame rate *must* max at hardware limit"); break; } glFuncs.SwapBuffers(glrc,waitVRT); if (EVT_kbhit()) { EVT_getNext(&evt,EVT_KEYDOWN | EVT_KEYREPEAT); EVT_flush(EVT_KEYREPEAT); key = EVT_asciiCode(evt.message); if (key == 'v' || key == 'V') { waitVRT -= 1; if (modeInfo.Attributes & gaHaveTripleBuffer) { if (waitVRT < gaTripleBuffer) waitVRT = gaDontWait; } else { if (waitVRT < gaWaitVRT) waitVRT = gaDontWait; } } else if (key == 0x1B || key == 0x0D || key == ' ') { done = true; } else { handleASCIICode(key); handleScanCode(EVT_scanCode(evt.message)); } } /* Compute the frames per second rate after going through a large * number of pages. */ if (--pageCount == 0) { newCount = LZTimerLap(); fpsRate = (int)(10000000L / (newCount - lastCount)) * initPageCount; lastCount = newCount; pageCount = initPageCount; } } LZTimerOff(); if (quadObj) { gluDeleteQuadric(quadObj); quadObj = NULL; } return key; }