Mercurial > mm7
diff Keyboard.cpp @ 0:9c0607679772
init
author | Ritor1 |
---|---|
date | Sat, 12 Jan 2013 09:45:18 +0600 |
parents | |
children | bf31c505f4d3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Keyboard.cpp Sat Jan 12 09:45:18 2013 +0600 @@ -0,0 +1,1847 @@ +#include "OSAPI.h" + +#include "Keyboard.h" +#include "GUIWindow.h" +#include "Game.h" +#include "OSInfo.h" + +#include "mm7_data.h" + + + + + + +struct KeyboardActionMapping *pKeyActionMap; +struct AsyncKeyboard *pAsyncKeyboard; + + + + + +//----- (00459C68) -------------------------------------------------------- +void KeyboardActionMapping::SetKeyMapping(int uAction, int vKey, KeyToggleType type) +{ + pVirtualKeyCodesMapping[uAction] = vKey; + pToggleTypes[uAction] = type; +} + +//----- (00459C82) -------------------------------------------------------- +unsigned int KeyboardActionMapping::GetActionVKey(enum InputAction eAction) +{ + return this->pVirtualKeyCodesMapping[eAction]; +} + +//----- (00459C8D) -------------------------------------------------------- +KeyboardActionMapping::KeyboardActionMapping() +{ + uLastKeyPressed = 0; + + SetDefaultMapping(); + ReadMappings(); + + ResetKeys(); + + dword_506E68 = -1; +} +// 506E68: using guessed type int dword_506E68; + +//----- (00459CC4) -------------------------------------------------------- +void KeyboardActionMapping::SetDefaultMapping() +{ + pVirtualKeyCodesMapping[0] = VK_UP; + pToggleTypes[0] = TOGGLE_Continuously; + pVirtualKeyCodesMapping[1] = VK_DOWN; + pToggleTypes[1] = TOGGLE_Continuously; + pVirtualKeyCodesMapping[2] = VK_LEFT; + pToggleTypes[2] = TOGGLE_Continuously; + pVirtualKeyCodesMapping[3] = VK_RIGHT; + pToggleTypes[3] = TOGGLE_Continuously; + pVirtualKeyCodesMapping[8] = 'A'; + pToggleTypes[8] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[7] = 'S'; + pToggleTypes[7] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[4] = 'Y'; + pToggleTypes[4] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[5] = 'X'; + pToggleTypes[5] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[6] = VK_RETURN; + pToggleTypes[6] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[9] = VK_SPACE; + pToggleTypes[9] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[10] = 'C'; + pToggleTypes[10] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[11] = 'B'; + pToggleTypes[11] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[12] = VK_TAB; + pToggleTypes[12] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[13] = 'Q'; + pToggleTypes[13] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[14] = 'Z'; + pToggleTypes[14] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[15] = 'R'; + pToggleTypes[15] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[16] = 'T'; + pToggleTypes[16] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[17] = 'N'; + pToggleTypes[17] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[18] = 'M'; + pToggleTypes[18] = TOGGLE_OneTimePress; + pVirtualKeyCodesMapping[20] = VK_NEXT; + pToggleTypes[20] = TOGGLE_Continuously; + pVirtualKeyCodesMapping[21] = VK_DELETE; + pToggleTypes[21] = TOGGLE_Continuously; + + SetKeyMapping(INPUT_CenterView, VK_END, TOGGLE_Continuously); + SetKeyMapping(INPUT_ZoomIn, VK_ADD, TOGGLE_OneTimePress); + SetKeyMapping(INPUT_ZoomOut, VK_SUBTRACT, TOGGLE_OneTimePress); + SetKeyMapping(INPUT_FlyUp, VK_PRIOR, TOGGLE_Continuously); + SetKeyMapping(INPUT_FlyDown, VK_INSERT, TOGGLE_Continuously); + SetKeyMapping(INPUT_Land, VK_HOME, TOGGLE_OneTimePress); + SetKeyMapping(INPUT_AlwaysRun, 'U', TOGGLE_OneTimePress); + SetKeyMapping(INPUT_StrafeLeft, VK_OEM_4, TOGGLE_Continuously); + SetKeyMapping(INPUT_StrafeRight, VK_OEM_6, TOGGLE_Continuously); +} + +//----- (00459E3F) -------------------------------------------------------- +void KeyboardActionMapping::ResetKeys() +{ + for (uint i = 0; i < 30; ++i) + GetAsyncKeyState(pVirtualKeyCodesMapping[i]); +} + +//----- (00459E5A) -------------------------------------------------------- +void KeyboardActionMapping::_459E5A(int a2, int a3, GUIWindow *pWindow) +{ + KeyboardActionMapping *v4; // esi@1 + + v4 = this; + memset(this->pPressedKeysBuffer, 0, 0x101u); + v4->uNumKeysPressed = 0; + if ( a2 ) + v4->field_204 = 2; + else + v4->field_204 = 1; + v4->field_FC = a3; + v4->pWindow = pWindow; + pWindow->field_40 = 1; + if ( LOBYTE(pGame->pKeyboardInstance->bUsingAsynKeyboard) ) + { + if ( pAsyncKeyboard ) + pAsyncKeyboard->Suspend(); + } +} + +//----- (00459ED1) -------------------------------------------------------- +void KeyboardActionMapping::_459ED1(int a2) +{ + KeyboardActionMapping *v2; // esi@1 + GUIWindow *v3; // esi@4 + + v2 = this; + if (pGame->pKeyboardInstance->bUsingAsynKeyboard && pAsyncKeyboard) + pAsyncKeyboard->Resume(); + v2->field_204 = 0; + v3 = v2->pWindow; + if ( v3 ) + v3->field_40 = a2; +} + +//----- (00459F10) -------------------------------------------------------- +bool KeyboardActionMapping::_459F10(unsigned int a2) +{ + int v3; // [sp-4h] [bp-4h]@3 + + pKeyActionMap->uLastKeyPressed = a2; + if ( dword_506E68 == -1 ) + { + if ( pKeyActionMap->field_204 == 1 ) + { + if ( a2 != 8 ) + { + if ( a2 == 9 ) + return 1; + if ( a2 == 13 ) + goto LABEL_3; + if ( a2 == 27 ) + goto LABEL_15; + if ( this->uNumKeysPressed >= this->field_FC ) + return 1; + pKeyActionMap->pPressedKeysBuffer[pKeyActionMap->uNumKeysPressed] = a2; + ++pKeyActionMap->uNumKeysPressed; +LABEL_24: + pKeyActionMap->pPressedKeysBuffer[pKeyActionMap->uNumKeysPressed] = 0; + return 1; + } + } + else + { + if ( pKeyActionMap->field_204 != 2 ) + return 0; + if ( a2 != 8 ) + { + if ( a2 == 13 ) + goto LABEL_3; + if ( a2 != 27 ) + { + if ( (signed int)a2 >= 48 && (signed int)a2 <= 57 ) + { + if ( pKeyActionMap->uNumKeysPressed < this->field_FC ) + { + pKeyActionMap->pPressedKeysBuffer[pKeyActionMap->uNumKeysPressed] = a2; + ++pKeyActionMap->uNumKeysPressed; + } + } + return 1; + } +LABEL_15: + v3 = 3; + goto LABEL_4; + } + } + if ( !pKeyActionMap->uNumKeysPressed ) + return 1; + --pKeyActionMap->uNumKeysPressed; + goto LABEL_24; + } + pKeyActionMap->pPressedKeysBuffer[pKeyActionMap->uNumKeysPressed] = a2; + ++pKeyActionMap->uNumKeysPressed; + pKeyActionMap->pPressedKeysBuffer[pKeyActionMap->uNumKeysPressed] = 0; +LABEL_3: + v3 = 2; +LABEL_4: + pKeyActionMap->_459ED1(v3); + return 1; +} +// 506E68: using guessed type int dword_506E68; + +//----- (00459FFC) -------------------------------------------------------- +void KeyboardActionMapping::ReadMappings() +{ + //KeyboardActionMapping *v1; // esi@1 + int v2; // eax@2 + unsigned int v3; // eax@3 + int v4; // eax@6 + unsigned int v5; // eax@7 + int v6; // eax@10 + unsigned int v7; // eax@11 + int v8; // eax@14 + unsigned int v9; // eax@15 + int v10; // eax@18 + unsigned int v11; // eax@19 + int v12; // eax@22 + //unsigned int v13; // eax@23 + int v14; // eax@26 + //unsigned int v15; // eax@27 + int v16; // eax@30 + //unsigned int v17; // eax@31 + int v18; // eax@34 + //unsigned int v19; // eax@35 + int v20; // eax@38 + //unsigned int v21; // eax@39 + int v22; // eax@42 + //unsigned int v23; // eax@43 + int v24; // eax@46 + //unsigned int v25; // eax@47 + int v26; // eax@50 + //unsigned int v27; // eax@51 + int v28; // eax@54 + //unsigned int v29; // eax@55 + int v30; // eax@58 + //unsigned int v31; // eax@59 + int v32; // eax@62 + //unsigned int v33; // eax@63 + int v34; // eax@66 + //unsigned int v35; // eax@67 + int v36; // eax@70 + //unsigned int v37; // eax@71 + int v38; // eax@74 + //unsigned int v39; // eax@75 + int v40; // eax@78 + //unsigned int v41; // eax@79 + int v42; // eax@82 + //unsigned int v43; // eax@83 + int v44; // eax@86 + //unsigned int v45; // eax@87 + int v46; // eax@90 + //unsigned int v47; // eax@91 + int v48; // eax@94 + //unsigned int v49; // eax@95 + int v50; // eax@98 + //unsigned int v51; // eax@99 + int v52; // eax@102 + //unsigned int v53; // eax@103 + int v54; // eax@106 + //unsigned int v55; // eax@107 + int v56; // eax@110 + unsigned int v57; // eax@111 + int v58; // eax@114 + unsigned int v59; // eax@115 + int v60; // eax@118 + unsigned int v61; // eax@119 + //char str[32]; // [sp+Ch] [bp-20h]@1 + + char str[32]; + + ReadWindowsRegistryString("KEY_FORWARD", str, 32, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v2) = GetActionDefaultVKey(str), v2 != -1) ) + { + pVirtualKeyCodesMapping[0] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[0] = VK_UP; + } + pToggleTypes[0] = TOGGLE_Continuously; + ReadWindowsRegistryString("KEY_BACKWARD", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v4) = GetActionDefaultVKey(str), v4 != -1) ) + { + pVirtualKeyCodesMapping[1] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[1] = VK_DOWN; + } + pToggleTypes[1] = TOGGLE_Continuously; + + ReadWindowsRegistryString("KEY_LEFT", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v6) = GetActionDefaultVKey(str), v6 != -1) ) + { + pVirtualKeyCodesMapping[2] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[2] = VK_LEFT; + } + pToggleTypes[2] = TOGGLE_Continuously; + + ReadWindowsRegistryString("KEY_RIGHT", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v8) = GetActionDefaultVKey(str), v8 != -1) ) + { + pVirtualKeyCodesMapping[3] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[3] = VK_RIGHT; + } + pToggleTypes[3] = TOGGLE_Continuously; + + ReadWindowsRegistryString("KEY_ATTACK", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v10) = GetActionDefaultVKey(str), v10 != -1) ) + { + pVirtualKeyCodesMapping[8] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[8] = 'A'; + } + pToggleTypes[8] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_CASTREADY", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v12) = GetActionDefaultVKey(str), v12 != -1) ) + { + pVirtualKeyCodesMapping[7] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[7] = 'S'; + } + pToggleTypes[7] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_YELL", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v14) = GetActionDefaultVKey(str), v14 != -1) ) + { + pVirtualKeyCodesMapping[4] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[4] = 'Y'; + } + pToggleTypes[4] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_JUMP", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v16) = GetActionDefaultVKey(str), v16 != -1) ) + { + pVirtualKeyCodesMapping[5] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[5] = 'X'; + } + pToggleTypes[5] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_COMBAT", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v18) = GetActionDefaultVKey(str), v18 != -1) ) + { + pVirtualKeyCodesMapping[6] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[6] = VK_RETURN; + } + pToggleTypes[6] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_EVENTTRIGGER", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v20) = GetActionDefaultVKey(str), v20 != -1) ) + { + pVirtualKeyCodesMapping[9] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[9] = VK_SPACE; + } + pToggleTypes[9] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_CAST", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v22) = GetActionDefaultVKey(str), v22 != -1) ) + { + pVirtualKeyCodesMapping[10] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[10] = 'C'; + } + pToggleTypes[10] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_PASS", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v24) = GetActionDefaultVKey(str), v24 != -1) ) + { + pVirtualKeyCodesMapping[11] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[11] = 'B'; + } + pToggleTypes[11] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_CHARCYCLE", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v26) = GetActionDefaultVKey(str), v26 != -1) ) + { + pVirtualKeyCodesMapping[12] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[12] = VK_TAB; + } + pToggleTypes[12] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_QUEST", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v28) = GetActionDefaultVKey(str), v28 != -1) ) + { + pVirtualKeyCodesMapping[13] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[13] = 'Q'; + } + pToggleTypes[13] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_QUICKREF", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v30) = GetActionDefaultVKey(str), v30 != -1) ) + { + pVirtualKeyCodesMapping[14] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[14] = 'Z'; + } + pToggleTypes[14] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_REST", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v32) = GetActionDefaultVKey(str), v32 != -1) ) + { + pVirtualKeyCodesMapping[15] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[15] = 'R'; + } + pToggleTypes[15] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_TIMECAL", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v34) = GetActionDefaultVKey(str), v34 != -1) ) + { + pVirtualKeyCodesMapping[16] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[16] = 'T'; + } + pToggleTypes[16] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_AUTONOTES", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v36) = GetActionDefaultVKey(str), v36 != -1) ) + { + pVirtualKeyCodesMapping[17] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[17] = 'N'; + } + pToggleTypes[17] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_MAPBOOK", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v38) = GetActionDefaultVKey(str), v38 != -1) ) + { + pVirtualKeyCodesMapping[18] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[18] = 'M'; + } + pToggleTypes[18] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_LOOKUP", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v40) = GetActionDefaultVKey(str), v40 != -1) ) + { + pVirtualKeyCodesMapping[20] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[20] = VK_NEXT; + } + pToggleTypes[20] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_LOOKDOWN", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v42) = GetActionDefaultVKey(str), v42 != -1) ) + { + pVirtualKeyCodesMapping[21] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[21] = VK_DELETE; + } + pToggleTypes[21] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_CENTERVIEWPT", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v44) = GetActionDefaultVKey(str), v44 != -1) ) + { + pVirtualKeyCodesMapping[22] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[22] = VK_END; + } + pToggleTypes[22] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_ZOOMIN", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v46) = GetActionDefaultVKey(str), v46 != -1) ) + { + pVirtualKeyCodesMapping[23] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[23] = VK_ADD; + } + pToggleTypes[23] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_ZOOMOUT", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v48) = GetActionDefaultVKey(str), v48 != -1) ) + { + pVirtualKeyCodesMapping[24] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[24] = VK_SUBTRACT; + } + pToggleTypes[24] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_FLYUP", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v50) = GetActionDefaultVKey(str), v50 != -1) ) + { + pVirtualKeyCodesMapping[25] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[25] = VK_PRIOR; + } + pToggleTypes[25] = TOGGLE_Continuously; + + ReadWindowsRegistryString("KEY_FLYDOWN", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v52) = GetActionDefaultVKey(str), v52 != -1) ) + { + pVirtualKeyCodesMapping[26] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[26] = VK_INSERT; + } + pToggleTypes[26] = TOGGLE_Continuously; + + ReadWindowsRegistryString("KEY_LAND", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v54) = GetActionDefaultVKey(str), v54 != -1) ) + { + pVirtualKeyCodesMapping[27] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[27] = VK_HOME; + } + pToggleTypes[27] = TOGGLE_OneTimePress; + + ReadWindowsRegistryString("KEY_ALWAYSRUN", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v56) = GetActionDefaultVKey(str), v56 != -1) ) + { + pVirtualKeyCodesMapping[19] = GetActionDefaultVKey(str); + } + else + { + pVirtualKeyCodesMapping[19] = 'U'; + } + pToggleTypes[19] = TOGGLE_OneTimePress; + + bAlwaysRun = ReadWindowsRegistryInt("valAlwaysRun", 0) != 0; + bFlipOnExit = ReadWindowsRegistryInt("FlipOnExit", 0) != 0; + ReadWindowsRegistryString("KEY_STEPLEFT", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v58) = GetActionDefaultVKey(str), v58 != -1) ) + { + pVirtualKeyCodesMapping[28] = GetActionDefaultVKey(str); + pToggleTypes[28] = TOGGLE_OneTimePress; + } + else + { + pToggleTypes[28] = TOGGLE_Continuously; + pVirtualKeyCodesMapping[28] = VK_OEM_4; + } + + ReadWindowsRegistryString("KEY_STEPRIGHT", str, 0x20u, "DEFAULT"); + if ( strcmp(str, "DEFAULT") && (LOBYTE(v60) = GetActionDefaultVKey(str), v60 != -1) ) + { + pVirtualKeyCodesMapping[29] = GetActionDefaultVKey(str); + pToggleTypes[29] = TOGGLE_OneTimePress; + } + else + { + pToggleTypes[29] = TOGGLE_Continuously; + pVirtualKeyCodesMapping[29] = VK_OEM_6; + } +} + +//----- (0045A960) -------------------------------------------------------- +void KeyboardActionMapping::StoreMappings() +{ + const char *v2; // eax@1 + const char *v3; // eax@1 + const char *v4; // eax@1 + const char *v5; // eax@1 + const char *v6; // eax@1 + const char *v7; // eax@1 + const char *v8; // eax@1 + const char *v9; // eax@1 + const char *v10; // eax@1 + const char *v11; // eax@1 + const char *v12; // eax@1 + const char *v13; // eax@1 + const char *v14; // eax@1 + const char *v15; // eax@1 + const char *v16; // eax@1 + const char *v17; // eax@1 + const char *v18; // eax@1 + const char *v19; // eax@1 + const char *v20; // eax@1 + const char *v21; // eax@1 + const char *v22; // eax@1 + const char *v23; // eax@1 + const char *v24; // eax@1 + const char *v25; // eax@1 + const char *v26; // eax@1 + const char *v27; // eax@1 + const char *v28; // eax@1 + const char *v29; // eax@1 + + v2 = GetVKeyDisplayName(this->pVirtualKeyCodesMapping[0]); + WriteWindowsRegistryString("KEY_FORWARD", v2); + v3 = GetVKeyDisplayName(pVirtualKeyCodesMapping[1]); + WriteWindowsRegistryString("KEY_BACKWARD", v3); + v4 = GetVKeyDisplayName(pVirtualKeyCodesMapping[2]); + WriteWindowsRegistryString("KEY_LEFT", v4); + v5 = GetVKeyDisplayName(pVirtualKeyCodesMapping[3]); + WriteWindowsRegistryString("KEY_RIGHT", v5); + v6 = GetVKeyDisplayName(pVirtualKeyCodesMapping[8]); + WriteWindowsRegistryString("KEY_ATTACK", v6); + v7 = GetVKeyDisplayName(pVirtualKeyCodesMapping[7]); + WriteWindowsRegistryString("KEY_CASTREADY", v7); + v8 = GetVKeyDisplayName(pVirtualKeyCodesMapping[4]); + WriteWindowsRegistryString("KEY_YELL", v8); + v9 = GetVKeyDisplayName(pVirtualKeyCodesMapping[5]); + WriteWindowsRegistryString("KEY_JUMP", v9); + v10 = GetVKeyDisplayName(pVirtualKeyCodesMapping[6]); + WriteWindowsRegistryString("KEY_COMBAT", v10); + v11 = GetVKeyDisplayName(pVirtualKeyCodesMapping[9]); + WriteWindowsRegistryString("KEY_EVENTTRIGGER", v11); + v12 = GetVKeyDisplayName(pVirtualKeyCodesMapping[10]); + WriteWindowsRegistryString("KEY_CAST", v12); + v13 = GetVKeyDisplayName(pVirtualKeyCodesMapping[11]); + WriteWindowsRegistryString("KEY_PASS", v13); + v14 = GetVKeyDisplayName(pVirtualKeyCodesMapping[12]); + WriteWindowsRegistryString("KEY_CHARCYCLE", v14); + v15 = GetVKeyDisplayName(pVirtualKeyCodesMapping[13]); + WriteWindowsRegistryString("KEY_QUEST", v15); + v16 = GetVKeyDisplayName(pVirtualKeyCodesMapping[14]); + WriteWindowsRegistryString("KEY_QUICKREF", v16); + v17 = GetVKeyDisplayName(pVirtualKeyCodesMapping[15]); + WriteWindowsRegistryString("KEY_REST", v17); + v18 = GetVKeyDisplayName(pVirtualKeyCodesMapping[16]); + WriteWindowsRegistryString("KEY_TIMECAL", v18); + v19 = GetVKeyDisplayName(pVirtualKeyCodesMapping[17]); + WriteWindowsRegistryString("KEY_AUTONOTES", v19); + v20 = GetVKeyDisplayName(pVirtualKeyCodesMapping[18]); + WriteWindowsRegistryString("KEY_MAPBOOK", v20); + v21 = GetVKeyDisplayName(pVirtualKeyCodesMapping[20]); + WriteWindowsRegistryString("KEY_LOOKUP", v21); + v22 = GetVKeyDisplayName(pVirtualKeyCodesMapping[21]); + WriteWindowsRegistryString("KEY_LOOKDOWN", v22); + v23 = GetVKeyDisplayName(pVirtualKeyCodesMapping[22]); + WriteWindowsRegistryString("KEY_CENTERVIEWPT", v23); + v24 = GetVKeyDisplayName(pVirtualKeyCodesMapping[23]); + WriteWindowsRegistryString("KEY_ZOOMIN", v24); + v25 = GetVKeyDisplayName(pVirtualKeyCodesMapping[24]); + WriteWindowsRegistryString("KEY_ZOOMOUT", v25); + v26 = GetVKeyDisplayName(pVirtualKeyCodesMapping[25]); + WriteWindowsRegistryString("KEY_FLYUP", v26); + v27 = GetVKeyDisplayName(pVirtualKeyCodesMapping[26]); + WriteWindowsRegistryString("KEY_FLYDOWN", v27); + v28 = GetVKeyDisplayName(pVirtualKeyCodesMapping[27]); + WriteWindowsRegistryString("KEY_LAND", v28); + v29 = GetVKeyDisplayName(pVirtualKeyCodesMapping[19]); + WriteWindowsRegistryString("KEY_ALWAYSRUN", v29); +} + +//----- (0045ABCA) -------------------------------------------------------- +const unsigned __int8 KeyboardActionMapping::GetActionDefaultVKey(const char *Str) +{ + unsigned __int8 result; // al@3 + + if ( !strcmp(Str, "UP") ) + return VK_UP; + if ( !strcmp(Str, "DOWN") ) + return VK_DOWN; + if (!strcmp(Str, "ÂËÅÂÎ") || !strcmp(Str, "LEFT")) + return VK_LEFT; + if (!strcmp(Str, "ÂÏÐÀÂÎ") || !strcmp(Str, "RIGHT")) + return VK_RIGHT; + if ( !strcmp(Str, "RETURN") ) + return VK_RETURN; + if ( !strcmp(Str, "SPACE") ) + return VK_SPACE; + if ( !strcmp(Str, "PAGE_DOWN") ) + return VK_NEXT; + if ( !strcmp(Str, "PAGE_UP") ) + return VK_PRIOR; + if ( !strcmp(Str, "TAB") ) + return VK_TAB; + if ( !strcmp(Str, "SUBTRACT") ) + return VK_SUBTRACT; + if ( !strcmp(Str, "ADD") ) + return VK_ADD; + if ( !strcmp(Str, "END") ) + return VK_END; + if ( !strcmp(Str, "DELETE") ) + return VK_DELETE; + if ( !strcmp(Str, "HOME") ) + return VK_HOME; + if ( !strcmp(Str, "INSERT") ) + return VK_INSERT; + if ( strcmp(Str, "COMMA") ) + { + if ( !strcmp(Str, "DECIMAL") ) + return VK_DECIMAL; + if ( strcmp(Str, "SEMICOLON") ) + { + if ( strcmp(Str, "PERIOD") ) + { + if ( strcmp(Str, "SLASH") ) + { + if ( strcmp(Str, "SQUOTE") ) + { + if ( strcmp(Str, "BACKSLASH") ) + { + if ( !strcmp(Str, "BACKSPACE") ) + return VK_BACK; + if ( !strcmp(Str, "CONTROL") ) + return VK_CONTROL; + if ( strlen(Str) != 1 || (result = *Str, (unsigned __int8)*Str < 0x41u) || result > 0x5Au ) + result = -1; + } + else + { + result = -36; + } + } + else + { + result = -34; + } + } + else + { + result = -65; + } + } + else + { + result = -66; + } + } + else + { + result = -70; + } + } + else + { + result = -68; + } + return result; +} + +//----- (0045AE2C) -------------------------------------------------------- +const char *KeyboardActionMapping::GetVKeyDisplayName(signed int a1) +{ + char *v3; // [sp-4h] [bp-8h]@2 + + static char static_sub_45AE2C_string_69ADE0[32]; + + if ( a1 == VK_UP ) + { + v3 = "UP"; +LABEL_53: + strcpy(static_sub_45AE2C_string_69ADE0, v3); + return static_sub_45AE2C_string_69ADE0; + } + if ( a1 == VK_DOWN ) + { + v3 = "DOWN"; + goto LABEL_53; + } + if ( a1 == VK_LEFT ) + { + v3 = ascii_4E2D48; + goto LABEL_53; + } + if ( a1 == VK_RIGHT ) + { + v3 = ascii_4E2D40; + goto LABEL_53; + } + if ( a1 == VK_RETURN ) + { + v3 = "RETURN"; + goto LABEL_53; + } + if ( a1 == VK_SPACE ) + { + v3 = "SPACE"; + goto LABEL_53; + } + if ( a1 == VK_NEXT ) + { + v3 = "PAGE_DOWN"; + goto LABEL_53; + } + if ( a1 == VK_PRIOR ) + { + v3 = "PAGE_UP"; + goto LABEL_53; + } + if ( a1 == VK_TAB ) + { + v3 = "TAB"; + goto LABEL_53; + } + if ( a1 == 'm' ) + { + v3 = "SUBTRACT"; + goto LABEL_53; + } + if ( a1 == 'k' ) + { + v3 = "ADD"; + goto LABEL_53; + } + if ( a1 == VK_END ) + { + v3 = "END"; + goto LABEL_53; + } + if ( a1 == VK_DELETE ) + { + v3 = "DELETE"; + goto LABEL_53; + } + if ( a1 == VK_HOME ) + { + v3 = "HOME"; + goto LABEL_53; + } + if ( a1 == VK_INSERT ) + { + v3 = "INSERT"; + goto LABEL_53; + } + if ( a1 == VK_DECIMAL ) + { + v3 = "DECIMAL"; + goto LABEL_53; + } + if ( a1 == VK_OEM_COMMA ) + { + v3 = "COMMA"; + goto LABEL_53; + } + if ( a1 == VK_OEM_1 ) + { + v3 = "SEMICOLON"; + goto LABEL_53; + } + if ( a1 == VK_OEM_PERIOD ) + { + v3 = "PERIOD"; + goto LABEL_53; + } + if ( a1 == VK_OEM_2 ) + { + v3 = "SLASH"; + goto LABEL_53; + } + if ( a1 == VK_OEM_7 ) + { + v3 = "SQUOTE"; + goto LABEL_53; + } + if ( a1 == VK_OEM_5 ) + { + v3 = "BACKSLASH"; + goto LABEL_53; + } + if ( a1 == VK_CONTROL ) + { + v3 = "CONTROL"; + goto LABEL_53; + } + if ( a1 == VK_BACK ) + { + v3 = "BACKSPACE"; + goto LABEL_53; + } + if ( a1 < 65 || a1 > 90 ) + { + v3 = "-ÍÅÒ -"; + goto LABEL_53; + } + *(unsigned short *)static_sub_45AE2C_string_69ADE0 = (unsigned __int8)a1; + return static_sub_45AE2C_string_69ADE0; +} + +//----- (0045AFD9) -------------------------------------------------------- +Keyboard::Keyboard() +{ + bUsingAsynKeyboard = false; + + if (pVersion->pVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT && + pVersion->pVersionInfo.dwMajorVersion == 4) + bUsingAsynKeyboard = false; +} + +//----- (0045B019) -------------------------------------------------------- +void Keyboard::EnterCriticalSection() +{ + if (bUsingAsynKeyboard) + AsyncKeyboard::EnterCriticalSection(); +} + +//----- (0045B06E) -------------------------------------------------------- +bool Keyboard::IsShiftHeld() +{ + bool result; // eax@2 + char v2; // zf@3 + + if (bUsingAsynKeyboard) + { + if ( pAsyncKeyboard->_45B4EC(0x2Au) ) + { +LABEL_6: + LOBYTE(result) = 1; + return result; + } + v2 = pAsyncKeyboard->_45B4EC(0x36u) == 0; + } + else + { + LOWORD(result) = GetAsyncKeyState(VK_SHIFT); + v2 = result == 0; + } + if ( !v2 ) + goto LABEL_6; + LOBYTE(result) = 0; + return result; +} + +//----- (0045B0A9) -------------------------------------------------------- +bool Keyboard::IsKeyBeingHeld(int vKey) +{ + void *v2; // esi@2 + char v3; // bl@2 + + if (bUsingAsynKeyboard) + { + __debugbreak(); + /* + v2 = pAsyncKeyboard; + EnterCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + v3 = *((unsigned char *)v2 + (unsigned __int8)AsyncKeyboard::map_key(v2, vKey) + 265) >> 7; + LeaveCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + return v3;*/ + } + else + return (GetAsyncKeyState(vKey) & 0x8001) != 0; +} + +//----- (0045B0CE) -------------------------------------------------------- +bool Keyboard::WasKeyPressed(int vKey) +{ + void *v2; // esi@2 + char v3; // bl@2 + bool result; // eax@2 + + if ( LOBYTE(this->bUsingAsynKeyboard) ) + { + __debugbreak(); + /*v2 = pAsyncKeyboard; + EnterCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + v3 = *((unsigned char *)v2 + (unsigned __int8)AsyncKeyboard::map_key(v2, vKey) + 521) >> 7; + LeaveCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + LOBYTE(result) = v3;*/ + } + else + { + LOWORD(result) = GetAsyncKeyState(vKey); + LOBYTE(result) = result & 1; + } + return result; +} + +//----- (0045B10A) -------------------------------------------------------- +AsyncKeyboard::AsyncKeyboard() +{ + *(unsigned int *)(this + 4) = 0; + *(unsigned char *)(this + 8) = 0; + + if (!Initialize()) + MessageBoxW(nullptr, L"Could not initialize asynchronos keyboard object", nullptr, 0); +} +// 4D86B8: using guessed type int (__stdcall *AsyncKeyboard_pvdtor)(char); +// 4DBD94: using guessed type int dword_4DBD94; + + +//----- (0045B15E) -------------------------------------------------------- +AsyncKeyboard::~AsyncKeyboard() +{ + __debugbreak(); + /* + void *v1; // esi@1 + char *v2; // edi@1 + int v3; // ecx@1 + + v1 = this; + v2 = (char *)this + 1804; + v3 = *((unsigned int *)this + 451); + if ( v3 ) + (**(void (__stdcall ***)(unsigned int))v3)(1); + *(unsigned int *)v2 = 0; + return TerminateThread(*((HANDLE *)v1 + 1), 0x1F4u);*/ +} +// 4D86B8: using guessed type int (__stdcall *AsyncKeyboard_pvdtor)(char); + +//----- (0045B18E) -------------------------------------------------------- +bool AsyncKeyboard::Initialize() +{ + _45B1B1(); + if (_45B229()) + return CreateDirectInputKeyboard() != 0; + return false; +} + +//----- (0045B1B1) -------------------------------------------------------- +void AsyncKeyboard::_45B1B1() +{ + void *v1; // esi@1 + + v1 = this; + memset((char *)this + 9, 0, 0x100u); + memset((char *)v1 + 265, 0, 0x100u); + memset((char *)v1 + 521, 0, 0x100u); + memset((char *)v1 + 780, 0, 0x400u); +} + +//----- (0045B1FD) -------------------------------------------------------- +void AsyncKeyboard::EnterCriticalSection() +{ + __debugbreak(); + //EnterCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); +} + +//----- (0045B213) -------------------------------------------------------- +void AsyncKeyboard::LeaveCriticalSection() +{ + __debugbreak(); + //LeaveCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); +} + +//----- (0045B229) -------------------------------------------------------- +char AsyncKeyboard::_45B229() +{ + __debugbreak(); + return 0; + /*void *v1; // esi@1 + HANDLE v2; // eax@1 + char result; // al@2 + DWORD ThreadId; // [sp+0h] [bp-4h]@1 + + ThreadId = (DWORD)this; + v1 = this; + v2 = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)AsyncKeyboardThread, this, 4u, &ThreadId); + *((unsigned int *)v1 + 1) = v2; + if ( v2 ) + result = SetThreadPriority(v2, 15) != 0; + else + result = 0; + return result;*/ +} + +//----- (0045B260) -------------------------------------------------------- +char AsyncKeyboard::CreateDirectInputKeyboard() +{ + __debugbreak(); + return 0; + /*v1 = this; + v2 = new DirectInputKeyboard; + *((void **)v1 + 451) = v2; + + return v2 != 0;*/ +} + +//----- (0045B2A7) -------------------------------------------------------- +void AsyncKeyboard::Resume() +{ + __debugbreak(); + /*void *v1; // esi@1 + std::string v2; // [sp-18h] [bp-24h]@2 + const char *v3; // [sp-8h] [bp-14h]@2 + int v4; // [sp-4h] [bp-10h]@2 + std::string *v5; // [sp+4h] [bp-8h]@2 + int a3; // [sp+Bh] [bp-1h]@2 + + v1 = this; + if ( *((unsigned int *)this + 451) ) + { + EnterCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + _45B1B1(); + DirectInputKeyboard::set_acquire(*((DirectInputKeyboard **)v1 + 451), (int *)1); + ResumeThread(*((HANDLE *)v1 + 1)); + LeaveCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + } + else + { + MessageBoxW(nullptr, L"Invalid DI_Keyboard, bailing out of resume()", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\KeyboardAsync.cpp:97", 0); + }*/ +} + +//----- (0045B329) -------------------------------------------------------- +void AsyncKeyboard::Suspend() +{ + __debugbreak(); + /*void *v1; // esi@1 + std::string v2; // [sp-18h] [bp-24h]@2 + const char *v3; // [sp-8h] [bp-14h]@2 + int v4; // [sp-4h] [bp-10h]@2 + std::string *v5; // [sp+4h] [bp-8h]@2 + int a3; // [sp+Bh] [bp-1h]@2 + + v1 = this; + if ( *((unsigned int *)this + 451) ) + { + EnterCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + SuspendThread(*((HANDLE *)v1 + 1)); + DirectInputKeyboard::set_acquire(*((DirectInputKeyboard **)v1 + 451), 0); + LeaveCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + } + else + { + MessageBoxW(nullptr, L"Invalid DI_Keyboard, bailing out of suspend()", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\KeyboardAsync.cpp:115", 0); + }*/ +} + +//----- (0045B3A4) -------------------------------------------------------- +char AsyncKeyboard::_45B3A4() +{ + __debugbreak(); + return 0; + /**((unsigned char *)this + 8) = 1; + Sleep(0x85u); + return 1;*/ +} + + +//----- (00465C53) -------------------------------------------------------- +void AsyncKeyboard::Release() +{ + __debugbreak(); + /*if ( LOBYTE(pGame->pKeyboardInstance->bUsingAsynKeyboard) ) + { + if ( pAsyncKeyboard ) + { + pAsyncKeyboard->Suspend(); + if ( pAsyncKeyboard ) + (**(void (__stdcall ***)(int))pAsyncKeyboard)(1); + } + pAsyncKeyboard = 0; + }*/ +} + +//----- (0045B3B6) -------------------------------------------------------- +void AsyncKeyboard::Thread() +{ + __debugbreak(); + /*void *v1; // esi@1 + signed int v2; // ecx@3 + int v3; // eax@3 + DWORD v4; // edx@6 + std::string v5; // [sp-18h] [bp-2Ch]@2 + const char *v6; // [sp-8h] [bp-1Ch]@2 + int v7; // [sp-4h] [bp-18h]@2 + DWORD v8; // [sp+Ch] [bp-8h]@2 + int a3; // [sp+13h] [bp-1h]@2 + + v1 = this; + if ( *((unsigned int *)this + 451) ) + { + ::EnterCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + v8 = timeGetTime(); + memcpy((char *)v1 + 9, (const void *)(*((unsigned int *)v1 + 451) + 29), 0x100u); + (*((DirectInputKeyboard **)v1 + 451)->_43B8EC(); + memcpy((char *)v1 + 265, (const void *)(*((unsigned int *)v1 + 451) + 29), 0x100u); + v2 = 0; + v3 = (int)((char *)v1 + 780); + do + { + if ( *((unsigned char *)v1 + v2 + 265) & 0x80 ) + { + if ( v8 - *(unsigned int *)v3 > 0xC8 ) + { + v4 = v8; + *((unsigned char *)v1 + v2 + 521) |= 0x80u; + *(unsigned int *)v3 = v4; + } + } + ++v2; + v3 += 4; + } + while ( v2 < 256 ); + ::LeaveCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + } + else + { + MessageBoxW(nullptr, L"Invalid DI_Keyboard, bailing out of update_keyboard_data()", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\KeyboardAsync.cpp:169", 0); + }*/ +} + +//----- (0045B4EC) -------------------------------------------------------- +char AsyncKeyboard::_45B4EC(unsigned __int8 a2) +{ + __debugbreak(); + return 0; + /*void *v2; // esi@1 + char v3; // bl@1 + + v2 = this; + EnterCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + v3 = *((unsigned char *)v2 + a2 + 265) >> 7; + LeaveCriticalSection(&pGame->pThreadWardInstance->csAsyncKeyboard); + return v3;*/ +} + +//----- (0045B57D) -------------------------------------------------------- +char AsyncKeyboard::map_key(int key) +{ + __debugbreak(); + return 0; + /*char result; // al@2 + std::string v3; // [sp-18h] [bp-1Ch]@99 + const char *v4; // [sp-8h] [bp-Ch]@99 + int v5; // [sp-4h] [bp-8h]@99 + void *v6; // [sp+0h] [bp-4h]@1 + + v6 = this; + switch ( key ) + { + case 8: + result = 14; + break; + case 9: + result = 15; + break; + case 13: + result = 28; + break; + case 16: + case 161: + result = 54; + break; + case 160: + result = 42; + break; + case 17: + case 163: + result = -99; + break; + case 162: + result = 29; + break; + case 18: + result = -72; + break; + case 20: + result = 58; + break; + case 21: + result = 112; + break; + case 25: + result = -108; + break; + case 27: + result = 1; + break; + case 28: + result = 121; + break; + case 29: + result = 123; + break; + case 32: + result = 57; + break; + case 33: + result = -55; + break; + case 34: + result = -47; + break; + case 35: + result = -49; + break; + case 36: + result = -57; + break; + case 37: + result = -53; + break; + case 38: + result = -56; + break; + case 39: + result = -51; + break; + case 40: + result = -48; + break; + case 42: + result = -73; + break; + case 45: + result = -46; + break; + case 46: + result = -45; + break; + case 48: + result = 11; + break; + case 49: + result = 2; + break; + case 50: + result = 3; + break; + case 51: + result = 4; + break; + case 52: + result = 5; + break; + case 53: + result = 6; + break; + case 54: + result = 7; + break; + case 55: + result = 8; + break; + case 56: + result = 9; + break; + case 57: + result = 10; + break; + case 65: + result = 30; + break; + case 66: + result = 48; + break; + case 67: + result = 46; + break; + case 68: + result = 32; + break; + case 69: + result = 18; + break; + case 70: + result = 33; + break; + case 71: + result = 34; + break; + case 72: + result = 35; + break; + case 73: + result = 23; + break; + case 74: + result = 36; + break; + case 75: + result = 37; + break; + case 76: + result = 38; + break; + case 77: + result = 50; + break; + case 78: + result = 49; + break; + case 79: + result = 24; + break; + case 80: + result = 25; + break; + case 81: + result = 16; + break; + case 82: + result = 19; + break; + case 83: + result = 31; + break; + case 84: + result = 20; + break; + case 85: + result = 22; + break; + case 86: + result = 47; + break; + case 87: + result = 17; + break; + case 88: + result = 45; + break; + case 89: + result = 21; + break; + case 90: + result = 44; + break; + case 91: + result = -37; + break; + case 92: + result = -36; + break; + case 93: + result = -35; + break; + case 96: + result = 82; + break; + case 97: + result = 79; + break; + case 98: + result = 80; + break; + case 99: + result = 81; + break; + case 100: + result = 75; + break; + case 101: + result = 76; + break; + case 102: + result = 77; + break; + case 103: + result = 71; + break; + case 104: + result = 72; + break; + case 105: + result = 73; + break; + case 106: + result = 55; + break; + case 107: + result = 78; + break; + case 109: + result = 74; + break; + case 110: + result = 83; + break; + case 111: + result = -75; + break; + case 112: + result = 59; + break; + case 113: + result = 60; + break; + case 114: + result = 61; + break; + case 115: + result = 62; + break; + case 116: + result = 63; + break; + case 117: + result = 64; + break; + case 118: + result = 65; + break; + case 119: + result = 66; + break; + case 120: + result = 67; + break; + case 121: + result = 68; + break; + case 122: + result = 87; + break; + case 123: + result = 88; + break; + case 124: + result = 100; + break; + case 125: + result = 101; + break; + case 126: + result = 102; + break; + case 144: + result = 69; + break; + case 145: + result = 70; + break; + default: + MessageBoxW(nullptr, L"Uknown key detected!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\KeyboardAsync.cpp:999", 0); + goto LABEL_100; + case 1: + case 2: + case 3: + case 4: + case 12: + case 19: + case 23: + case 24: + case 30: + case 31: + case 41: + case 43: + case 44: + case 47: + case 108: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: +LABEL_100: + result = -1; + break; + } + return result;*/ +} + +//----- (0045BA60) -------------------------------------------------------- +int __stdcall AsyncKeyboard::ThreadStarter(AsyncKeyboard *pInstance) +{ + __debugbreak(); + return 0; + /*while ( 1 ) + { + while ( !pAsyncKeyboard ) + ; + if ( *((unsigned char *)pAsyncKeyboard + 8) ) + ExitThread(0); + pAsyncKeyboard->Thread(); + Sleep(0x21u); + }*/ +} + + + + + + + + +/* +//----- (0043B76D) -------------------------------------------------------- +DirectInputKeyboard *__thiscall DirectInputKeyboard::DirectInputKeyboard(DirectInputKeyboard *this) +{ + DirectInputKeyboard *v1; // esi@1 + HRESULT v2; // eax@5 + unsigned int uVersion; // [sp-18h] [bp-20h]@3 + IDirectInput **ppDirectInput; // [sp-14h] [bp-1Ch]@3 + int v6; // [sp-10h] [bp-18h]@3 + const char *v7; // [sp-Ch] [bp-14h]@3 + int v8; // [sp-8h] [bp-10h]@3 + unsigned int v9; // [sp-4h] [bp-Ch]@3 + CheckHRESULT_stru0 v10; // [sp+4h] [bp-4h]@5 + + v1 = this; + this->field_8 = 0; + LOBYTE(this->field_1C) = 0; + this->vdestructor_ptr = &pDirectInputKeyboard_pvdtor; + if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion != 4 ) + { + v9 = 1; + v8 = 28; + v7 = "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\DirectInputKeyboard.cpp"; + v6 = 0; + ppDirectInput = &this->pDirectInput; + uVersion = 0x500u; + } + else + { + v9 = 1; + v8 = 26; + v7 = "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\DirectInputKeyboard.cpp"; + v6 = 0; + ppDirectInput = &this->pDirectInput; + uVersion = 0x300u; + } + v2 = DirectInputCreateA(hInstance, uVersion, ppDirectInput, v6); + CheckHRESULT(&v10, v2, v7, v8, v9); + DirectInputKeyboard::CreateDevice(v1); + DirectInputKeyboard::43B87B(v1); + return v1; +} +// 4C8880: using guessed type int __stdcall DirectInputCreateA(int, int, int, int); + +//----- (0043B7E3) -------------------------------------------------------- +void __thiscall DirectInputKeyboard::vdtor(DirectInputKeyboard *this, bool a2) +{ + void *v2; // esi@1 + + v2 = this; + DirectInputKeyboard::dtor(this); + if ( a2 & 1 ) + free(v2); +} + +//----- (0043B7FF) -------------------------------------------------------- +void __thiscall DirectInputKeyboard::dtor(DirectInputKeyboard *this) +{ + DirectInputKeyboard *v1; // esi@1 + int v2; // eax@1 + + v1 = this; + v2 = this->field_8; + this->vdestructor_ptr = &pDirectInputKeyboard_pvdtor; + if ( v2 ) + { + (*(void (__stdcall **)(int))(*(int *)v2 + 32))(v2); + (*(void (__stdcall **)(int))(*(int *)v1->field_8 + 8))(v1->field_8); + v1->field_8 = 0; + } + v1->pDirectInput->lpVtbl->Release(v1->pDirectInput); + v1->pDirectInput = 0; +} + +//----- (0043B831) -------------------------------------------------------- +void __thiscall DirectInputKeyboard::CreateDevice(DirectInputKeyboard *this) +{ + DirectInputKeyboard *v1; // esi@1 + HRESULT v2; // eax@1 + int v3; // [sp+4h] [bp-4h]@1 + + v1 = this; + v2 = ((int (__stdcall *)(IDirectInput *, signed int, int (__stdcall *)(int, int), DirectInputKeyboard *, signed int))this->pDirectInput->lpVtbl->field_10)( + this->pDirectInput, + 3, + DirectInputKeyboard_enumerator_43B9B9, + this, + 1); + CheckHRESULT((CheckHRESULT_stru0 *)&v3, v2, "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\DirectInputKeyboard.cpp", 52, 1u); + if ( !LOBYTE(v1->field_1C) ) + { + v3 = (int)"Error: No keyboard found"; + _CxxThrowException((int)&v3, (int)&dword_4DBD94); + } +} +// 43B9B9: using guessed type int __stdcall DirectInputKeyboard_enumerator_43B9B9(int, int); +// 4DBD94: using guessed type int dword_4DBD94; + +//----- (0043B87B) -------------------------------------------------------- +void __thiscall DirectInputKeyboard::43B87B(DirectInputKeyboard *ecx0) +{ + char *v1; // esi@1 + HRESULT v2; // eax@1 + HRESULT v3; // eax@1 + HRESULT v4; // eax@1 + unsigned int v5; // [sp+0h] [bp-Ch]@0 + char this; // [sp+8h] [bp-4h]@1 + + v1 = (char *)&ecx0->field_8; + v2 = ((int (__stdcall *)(IDirectInput *, int *, int *, int, int))ecx0->pDirectInput->lpVtbl->field_C)( + ecx0->pDirectInput, + &ecx0->field_C, + &ecx0->field_8, + 0, + "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\DirectInputKeyboard.cpp"); + CheckHRESULT((CheckHRESULT_stru0 *)&this, v2, (const char *)0x3C, 1, v5); + v3 = (*(int (__stdcall **)(int, int))(**(int **)v1 + 44))(*(int *)v1, dword_4C9890); + CheckHRESULT((CheckHRESULT_stru0 *)&this, v3, "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\DirectInputKeyboard.cpp", 63, 1u); + v4 = (*(int (__stdcall **)(int, HWND, signed int))(**(int **)v1 + 52))(*(int *)v1, hWnd, 6); + CheckHRESULT((CheckHRESULT_stru0 *)&this, v4, "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\DirectInputKeyboard.cpp", 64, 1u); + (*(void (__cdecl **)(int))(**(int **)v1 + 28))(*(int *)v1); +} +// 4C9890: using guessed type int dword_4C9890[10]; + +//----- (0043B8EC) -------------------------------------------------------- +char __thiscall DirectInputKeyboard::43B8EC(DirectInputKeyboard *this) +{ + DirectInputKeyboard *v1; // esi@1 + int v2; // eax@1 + char result; // al@2 + char *v4; // ebx@3 + int v5; // esi@5 + HRESULT v6; // eax@5 + std::string v7; // [sp-18h] [bp-2Ch]@2 + int v8; // [sp-Ch] [bp-20h]@5 + const char *v9; // [sp-8h] [bp-1Ch]@2 + int v10; // [sp-4h] [bp-18h]@2 + std::string *v13; // [sp+Ch] [bp-8h]@2 + int a3; // [sp+13h] [bp-1h]@2 + + v1 = this; + v2 = this->field_8; + if ( v2 ) + { + v4 = (char *)&this->field_1C + 1; + if ( (*(int (__stdcall **)(int, signed int, char *))(*(int *)v2 + 36))(v2, 256, (char *)&this->field_1C + 1) == -2147024866 ) + { + if ( !(*(int (__stdcall **)(int))(*(int *)v1->field_8 + 28))(v1->field_8) ) + { + v5 = v1->field_8; + v10 = 1; + v9 = (const char *)79; + v8 = (int)"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\DirectInputKeyboard.cpp"; + v6 = (*(int (__stdcall **)(int, signed int, char *))(*(int *)v5 + 36))(v5, 256, v4); + CheckHRESULT((CheckHRESULT_stru0 *)&v13, v6, "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\DirectInputKeyboard.cpp", 79, 1u); + } + } + result = 1; + } + else + { + MessageBoxW(nullptr, L"Invalid Device pointer, bailing out of update_data()", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\DirectInputKeyboard.cpp:72", 0); + result = 0; + } + return result; +} + +//----- (0043B96E) -------------------------------------------------------- +char __thiscall DirectInputKeyboard::set_acquire(DirectInputKeyboard *this, int *a2) +{ + int v2; // eax@1 + char result; // al@2 + int v4; // ecx@3 + std::string v5; // [sp-18h] [bp-1Ch]@2 + const char *v6; // [sp-8h] [bp-Ch]@2 + int v7; // [sp-4h] [bp-8h]@2 + DirectInputKeyboard *v8; // [sp+0h] [bp-4h]@1 + + v8 = this; + v2 = this->field_8; + if ( v2 ) + { + v4 = *(int *)v2; + v7 = v2; + if ( (char)a2 ) + (*(void (__stdcall **)(int))(v4 + 28))(v7); + else + (*(void (__stdcall **)(int))(v4 + 32))(v7); + result = 1; + } + else + { + MessageBoxW(nullptr, L"Invalid Device pointer, bailing out of set_acquire()", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\DirectInputKeyboard.cpp:89", 0); + result = 0; + } + return result; +} + +//----- (0043B9B9) -------------------------------------------------------- +signed int __stdcall DirectInputKeyboard_enumerator_43B9B9(int a1, int a2) +{ + signed int result; // eax@2 + + if ( *(char *)(a1 + 36) & 3 ) + { + *(int *)(a2 + 12) = *(int *)(a1 + 4); + *(int *)(a2 + 16) = *(int *)(a1 + 8); + *(int *)(a2 + 20) = *(int *)(a1 + 12); + *(int *)(a2 + 24) = *(int *)(a1 + 16); + *(char *)(a2 + 28) = 1; + result = 0; + } + else + { + result = 1; + } + return result; +} +// 43B9B9: using guessed type int __stdcall DirectInputKeyboard_enumerator_43B9B9(int, int); +*/ \ No newline at end of file