// Системный вызов syscall_getch // Ожидает нажатия клавиши и возвращает ее ascii-код char syscall_getch() { uchar cp, c = inb(0x60); char ascii; do { cp = c; c = inb(0x60); } while ((c == '\0') || (c == cp) || ((ascii = scan2ascii(c)) == '\0')); return scan2ascii(c); }
static void doKeyboardEvent(WPARAM wParam, LPARAM lParam, void (*keyFunc)(unsigned char key, int x, int y), void (specialKeyFunc)(unsigned char key, int x, int y), char keyMapValue) { unsigned char c; switch(wParam) { case VK_F1: c = GLUT_KEY_F1; break; case VK_F2: c = GLUT_KEY_F2; break; case VK_F3: c = GLUT_KEY_F3; break; case VK_F4: c = GLUT_KEY_F4; break; case VK_F5: c = GLUT_KEY_F5; break; case VK_F6: c = GLUT_KEY_F6; break; case VK_F7: c = GLUT_KEY_F7; break; // F8 and up ignored since they are not possible on some keyboards - like mine case VK_LEFT: c = GLUT_KEY_LEFT; break; case VK_UP: c = GLUT_KEY_UP; break; case VK_RIGHT: c = GLUT_KEY_RIGHT; break; case VK_DOWN: c = GLUT_KEY_DOWN; break; case VK_ESCAPE: c = GLUT_KEY_ESC; break; case VK_PRIOR: c = GLUT_KEY_PAGE_UP; break; case VK_NEXT: c = GLUT_KEY_PAGE_DOWN; break; case VK_HOME: c = GLUT_KEY_HOME; break; case VK_END: c = GLUT_KEY_END; break; case VK_INSERT: c = GLUT_KEY_INSERT; break; default: c = scan2ascii(wParam,lParam); if (c == 0) return; } if (keyFunc != NULL) { keyFunc(c, 0, 0); // TO DO: x and y } else if (specialKeyFunc != NULL && c < 32) { specialKeyFunc(c, 0, 0); // TO DO: x and y } gKeymap[c] = keyMapValue; printf("key %i %i\n", c, keyMapValue); }
tstring GuiConfig::FormatInput(int aDevice, int aButton, int aAxe) { tstring formatedThing; switch (aDevice) { case CTRL_KBD: { #if 0 switch(aButton) { case 0x01: return GLoc->GetString("ESCAPE"); case 0x0E: return GLoc->GetString("BACK"); /* backspace */ case 0x0F: return GLoc->GetString("TAB"); case 0x1C: return GLoc->GetString("RETURN"); /* Enter on main keyboard */ case 0x1D: return GLoc->GetString("LCONTROL"); case 0x2A: return GLoc->GetString("LSHIFT"); case 0x2B: return GLoc->GetString("BACKSLASH"); case 0x36: return GLoc->GetString("RSHIFT"); case 0x38: return GLoc->GetString("LMENU"); /* left Alt */ case 0x39: return GLoc->GetString("SPACE"); case 0x3A: return GLoc->GetString("CAPITAL"); case 0x3B: return GLoc->GetString("F1"); case 0x3C: return GLoc->GetString("F2"); case 0x3D: return GLoc->GetString("F3"); case 0x3E: return GLoc->GetString("F4"); case 0x3F: return GLoc->GetString("F5"); case 0x40: return GLoc->GetString("F6"); case 0x41: return GLoc->GetString("F7"); case 0x42: return GLoc->GetString("F8"); case 0x43: return GLoc->GetString("F9"); case 0x44: return GLoc->GetString("F10"); case 0x45: return GLoc->GetString("NUMLOCK"); case 0x46: return GLoc->GetString("SCROLL"); /* Scroll Lock */ case 0x47: return GLoc->GetString("NUMPAD7"); case 0x48: return GLoc->GetString("NUMPAD8"); case 0x49: return GLoc->GetString("NUMPAD9"); case 0x4B: return GLoc->GetString("NUMPAD4"); case 0x4C: return GLoc->GetString("NUMPAD5"); case 0x4D: return GLoc->GetString("NUMPAD6"); case 0x4F: return GLoc->GetString("NUMPAD1"); case 0x50: return GLoc->GetString("NUMPAD2"); case 0x51: return GLoc->GetString("NUMPAD3"); case 0x52: return GLoc->GetString("NUMPAD0"); case 0x53: return GLoc->GetString("DECIMAL"); /* . on numeric keypad */ case 0x70: return GLoc->GetString("KANA"); /* (Japanese keyboard) */ case 0x99: return GLoc->GetString("NEXTTRACK"); /* Next Track */ case 0x9C: return GLoc->GetString("NUMPADENTER"); /* Enter on numeric keypad */ case 0x9D: return GLoc->GetString("RCONTROL"); case 0xA0: return GLoc->GetString("MUTE"); /* Mute */ case 0xA1: return GLoc->GetString("CALCULATOR"); /* Calculator */ case 0xA2: return GLoc->GetString("PLAYPAUSE"); /* Play / Pause */ case 0xA4: return GLoc->GetString("MEDIASTOP"); /* Media Stop */ case 0xAE: return GLoc->GetString("VOLUMEDOWN"); /* Volume - */ case 0xB0: return GLoc->GetString("VOLUMEUP"); /* Volume + */ case 0xB2: return GLoc->GetString("WEBHOME"); /* Web home */ case 0xB7: return GLoc->GetString("SYSRQ"); case 0xB8: return GLoc->GetString("RMENU"); /* right Alt */ case 0xC5: return GLoc->GetString("PAUSE"); /* Pause */ case 0xC7: return GLoc->GetString("HOME"); /* Home on arrow keypad */ case 0xC8: return GLoc->GetString("UP"); /* UpArrow on arrow keypad */ case 0xC9: return GLoc->GetString("PRIOR"); /* PgUp on arrow keypad */ case 0xCB: return GLoc->GetString("LEFT"); /* LeftArrow on arrow keypad */ case 0xCD: return GLoc->GetString("RIGHT"); /* RightArrow on arrow keypad */ case 0xCF: return GLoc->GetString("END"); /* End on arrow keypad */ case 0xD0: return GLoc->GetString("DOWN"); /* DownArrow on arrow keypad */ case 0xD1: return GLoc->GetString("NEXT"); /* PgDn on arrow keypad */ case 0xD2: return GLoc->GetString("INSERT"); /* Insert on arrow keypad */ case 0xD3: return GLoc->GetString("DELETE"); /* Delete on arrow keypad */ case 0xDB: return GLoc->GetString("LWIN"); /* Left Windows key */ case 0xDC: return GLoc->GetString("RWIN"); /* Right Windows key */ case 0xDD: return GLoc->GetString("APPS"); /* AppMenu key */ case 0xDE: return GLoc->GetString("POWER"); /* System Power */ case 0xDF: return GLoc->GetString("SLEEP"); /* System Sleep */ case 0xE3: return GLoc->GetString("WAKE"); /* System Wake */ case 0xE5: return GLoc->GetString("WEBSEARCH"); /* Web Search */ case 0xE6: return GLoc->GetString("WEBFAVORITES"); /* Web Favorites */ case 0xE7: return GLoc->GetString("WEBREFRESH"); /* Web Refresh */ case 0xE8: return GLoc->GetString("WEBSTOP"); /* Web Stop */ case 0xE9: return GLoc->GetString("WEBFORWARD"); /* Web Forward */ case 0xEA: return GLoc->GetString("WEBBACK"); /* Web Back */ case 0xEB: return GLoc->GetString("MYCOMPUTER"); /* My Computer */ case 0xEC: return GLoc->GetString("MAIL"); /* Mail */ case 0xED: return GLoc->GetString("MEDIASELECT"); /* Media Select */ //default: return "???"; } #endif unsigned short result[2]; scan2ascii(aButton, result); formatedThing = ""; formatedThing += SDL_GetKeyName((SDLKey)aButton);//(char)aButton;//((unsigned char*)result)[0]; formatedThing.ToUpper(); } break; case CTRL_MOUSE: formatedThing = GLoc->GetString("Mouse"); formatedThing+= " "; if (aAxe == 1) formatedThing +=" X"; if (aAxe == 2) formatedThing +=" Y"; if (aAxe == 0) { tstring msbt; msbt.Printf("%d", aButton); formatedThing += GLoc->GetString("Button"); formatedThing += msbt; } break; case CTRL_PAD0: break; } return formatedThing; }