summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/windows/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/windows/input.c')
-rw-r--r--src/osd/windows/input.c312
1 files changed, 178 insertions, 134 deletions
diff --git a/src/osd/windows/input.c b/src/osd/windows/input.c
index f6c46d87f15..ec08277bcf4 100644
--- a/src/osd/windows/input.c
+++ b/src/osd/windows/input.c
@@ -52,11 +52,6 @@ enum
#define MAX_KEYS 256
-#define MAME_KEY 0
-#define DI_KEY 1
-#define VIRTUAL_KEY 2
-#define ASCII_KEY 3
-
//============================================================
@@ -270,118 +265,126 @@ static const TCHAR *default_pov_name(int which);
//============================================================
// master keyboard translation table
-static const int win_key_trans_table[][4] =
+struct key_trans_entry {
+ input_item_id mame_key;
+ INT32 di_key;
+ unsigned char virtual_key;
+ char ascii_key;
+ char const * mame_key_name;
+};
+#define KEY_TRANS_ENTRY(mame, di, virtual, ascii) { ITEM_ID_##mame, DIK_##di, virtual, ascii, "ITEM_ID_"#mame }
+static const key_trans_entry win_key_trans_table[] =
{
- // MAME key dinput key virtual key ascii
- { ITEM_ID_ESC, DIK_ESCAPE, VK_ESCAPE, 27 },
- { ITEM_ID_1, DIK_1, '1', '1' },
- { ITEM_ID_2, DIK_2, '2', '2' },
- { ITEM_ID_3, DIK_3, '3', '3' },
- { ITEM_ID_4, DIK_4, '4', '4' },
- { ITEM_ID_5, DIK_5, '5', '5' },
- { ITEM_ID_6, DIK_6, '6', '6' },
- { ITEM_ID_7, DIK_7, '7', '7' },
- { ITEM_ID_8, DIK_8, '8', '8' },
- { ITEM_ID_9, DIK_9, '9', '9' },
- { ITEM_ID_0, DIK_0, '0', '0' },
- { ITEM_ID_MINUS, DIK_MINUS, VK_OEM_MINUS, '-' },
- { ITEM_ID_EQUALS, DIK_EQUALS, VK_OEM_PLUS, '=' },
- { ITEM_ID_BACKSPACE, DIK_BACK, VK_BACK, 8 },
- { ITEM_ID_TAB, DIK_TAB, VK_TAB, 9 },
- { ITEM_ID_Q, DIK_Q, 'Q', 'Q' },
- { ITEM_ID_W, DIK_W, 'W', 'W' },
- { ITEM_ID_E, DIK_E, 'E', 'E' },
- { ITEM_ID_R, DIK_R, 'R', 'R' },
- { ITEM_ID_T, DIK_T, 'T', 'T' },
- { ITEM_ID_Y, DIK_Y, 'Y', 'Y' },
- { ITEM_ID_U, DIK_U, 'U', 'U' },
- { ITEM_ID_I, DIK_I, 'I', 'I' },
- { ITEM_ID_O, DIK_O, 'O', 'O' },
- { ITEM_ID_P, DIK_P, 'P', 'P' },
- { ITEM_ID_OPENBRACE, DIK_LBRACKET, VK_OEM_4, '[' },
- { ITEM_ID_CLOSEBRACE, DIK_RBRACKET, VK_OEM_6, ']' },
- { ITEM_ID_ENTER, DIK_RETURN, VK_RETURN, 13 },
- { ITEM_ID_LCONTROL, DIK_LCONTROL, VK_LCONTROL, 0 },
- { ITEM_ID_A, DIK_A, 'A', 'A' },
- { ITEM_ID_S, DIK_S, 'S', 'S' },
- { ITEM_ID_D, DIK_D, 'D', 'D' },
- { ITEM_ID_F, DIK_F, 'F', 'F' },
- { ITEM_ID_G, DIK_G, 'G', 'G' },
- { ITEM_ID_H, DIK_H, 'H', 'H' },
- { ITEM_ID_J, DIK_J, 'J', 'J' },
- { ITEM_ID_K, DIK_K, 'K', 'K' },
- { ITEM_ID_L, DIK_L, 'L', 'L' },
- { ITEM_ID_COLON, DIK_SEMICOLON, VK_OEM_1, ';' },
- { ITEM_ID_QUOTE, DIK_APOSTROPHE, VK_OEM_7, '\'' },
- { ITEM_ID_TILDE, DIK_GRAVE, VK_OEM_3, '`' },
- { ITEM_ID_LSHIFT, DIK_LSHIFT, VK_LSHIFT, 0 },
- { ITEM_ID_BACKSLASH, DIK_BACKSLASH, VK_OEM_5, '\\' },
- { ITEM_ID_BACKSLASH2, DIK_OEM_102, VK_OEM_102, '<' },
- { ITEM_ID_Z, DIK_Z, 'Z', 'Z' },
- { ITEM_ID_X, DIK_X, 'X', 'X' },
- { ITEM_ID_C, DIK_C, 'C', 'C' },
- { ITEM_ID_V, DIK_V, 'V', 'V' },
- { ITEM_ID_B, DIK_B, 'B', 'B' },
- { ITEM_ID_N, DIK_N, 'N', 'N' },
- { ITEM_ID_M, DIK_M, 'M', 'M' },
- { ITEM_ID_COMMA, DIK_COMMA, VK_OEM_COMMA, ',' },
- { ITEM_ID_STOP, DIK_PERIOD, VK_OEM_PERIOD, '.' },
- { ITEM_ID_SLASH, DIK_SLASH, VK_OEM_2, '/' },
- { ITEM_ID_RSHIFT, DIK_RSHIFT, VK_RSHIFT, 0 },
- { ITEM_ID_ASTERISK, DIK_MULTIPLY, VK_MULTIPLY, '*' },
- { ITEM_ID_LALT, DIK_LMENU, VK_LMENU, 0 },
- { ITEM_ID_SPACE, DIK_SPACE, VK_SPACE, ' ' },
- { ITEM_ID_CAPSLOCK, DIK_CAPITAL, VK_CAPITAL, 0 },
- { ITEM_ID_F1, DIK_F1, VK_F1, 0 },
- { ITEM_ID_F2, DIK_F2, VK_F2, 0 },
- { ITEM_ID_F3, DIK_F3, VK_F3, 0 },
- { ITEM_ID_F4, DIK_F4, VK_F4, 0 },
- { ITEM_ID_F5, DIK_F5, VK_F5, 0 },
- { ITEM_ID_F6, DIK_F6, VK_F6, 0 },
- { ITEM_ID_F7, DIK_F7, VK_F7, 0 },
- { ITEM_ID_F8, DIK_F8, VK_F8, 0 },
- { ITEM_ID_F9, DIK_F9, VK_F9, 0 },
- { ITEM_ID_F10, DIK_F10, VK_F10, 0 },
- { ITEM_ID_NUMLOCK, DIK_NUMLOCK, VK_NUMLOCK, 0 },
- { ITEM_ID_SCRLOCK, DIK_SCROLL, VK_SCROLL, 0 },
- { ITEM_ID_7_PAD, DIK_NUMPAD7, VK_NUMPAD7, 0 },
- { ITEM_ID_8_PAD, DIK_NUMPAD8, VK_NUMPAD8, 0 },
- { ITEM_ID_9_PAD, DIK_NUMPAD9, VK_NUMPAD9, 0 },
- { ITEM_ID_MINUS_PAD, DIK_SUBTRACT, VK_SUBTRACT, 0 },
- { ITEM_ID_4_PAD, DIK_NUMPAD4, VK_NUMPAD4, 0 },
- { ITEM_ID_5_PAD, DIK_NUMPAD5, VK_NUMPAD5, 0 },
- { ITEM_ID_6_PAD, DIK_NUMPAD6, VK_NUMPAD6, 0 },
- { ITEM_ID_PLUS_PAD, DIK_ADD, VK_ADD, 0 },
- { ITEM_ID_1_PAD, DIK_NUMPAD1, VK_NUMPAD1, 0 },
- { ITEM_ID_2_PAD, DIK_NUMPAD2, VK_NUMPAD2, 0 },
- { ITEM_ID_3_PAD, DIK_NUMPAD3, VK_NUMPAD3, 0 },
- { ITEM_ID_0_PAD, DIK_NUMPAD0, VK_NUMPAD0, 0 },
- { ITEM_ID_DEL_PAD, DIK_DECIMAL, VK_DECIMAL, 0 },
- { ITEM_ID_F11, DIK_F11, VK_F11, 0 },
- { ITEM_ID_F12, DIK_F12, VK_F12, 0 },
- { ITEM_ID_F13, DIK_F13, VK_F13, 0 },
- { ITEM_ID_F14, DIK_F14, VK_F14, 0 },
- { ITEM_ID_F15, DIK_F15, VK_F15, 0 },
- { ITEM_ID_ENTER_PAD, DIK_NUMPADENTER, VK_RETURN, 0 },
- { ITEM_ID_RCONTROL, DIK_RCONTROL, VK_RCONTROL, 0 },
- { ITEM_ID_SLASH_PAD, DIK_DIVIDE, VK_DIVIDE, 0 },
- { ITEM_ID_PRTSCR, DIK_SYSRQ, 0, 0 },
- { ITEM_ID_RALT, DIK_RMENU, VK_RMENU, 0 },
- { ITEM_ID_HOME, DIK_HOME, VK_HOME, 0 },
- { ITEM_ID_UP, DIK_UP, VK_UP, 0 },
- { ITEM_ID_PGUP, DIK_PRIOR, VK_PRIOR, 0 },
- { ITEM_ID_LEFT, DIK_LEFT, VK_LEFT, 0 },
- { ITEM_ID_RIGHT, DIK_RIGHT, VK_RIGHT, 0 },
- { ITEM_ID_END, DIK_END, VK_END, 0 },
- { ITEM_ID_DOWN, DIK_DOWN, VK_DOWN, 0 },
- { ITEM_ID_PGDN, DIK_NEXT, VK_NEXT, 0 },
- { ITEM_ID_INSERT, DIK_INSERT, VK_INSERT, 0 },
- { ITEM_ID_DEL, DIK_DELETE, VK_DELETE, 0 },
- { ITEM_ID_LWIN, DIK_LWIN, VK_LWIN, 0 },
- { ITEM_ID_RWIN, DIK_RWIN, VK_RWIN, 0 },
- { ITEM_ID_MENU, DIK_APPS, VK_APPS, 0 },
- { ITEM_ID_PAUSE, DIK_PAUSE, VK_PAUSE, 0 },
- { ITEM_ID_CANCEL, 0, VK_CANCEL, 0 },
+ // MAME key dinput key virtual key ascii
+ KEY_TRANS_ENTRY(ESC, ESCAPE, VK_ESCAPE, 27),
+ KEY_TRANS_ENTRY(1, 1, '1', '1'),
+ KEY_TRANS_ENTRY(2, 2, '2', '2'),
+ KEY_TRANS_ENTRY(3, 3, '3', '3'),
+ KEY_TRANS_ENTRY(4, 4, '4', '4'),
+ KEY_TRANS_ENTRY(5, 5, '5', '5'),
+ KEY_TRANS_ENTRY(6, 6, '6', '6'),
+ KEY_TRANS_ENTRY(7, 7, '7', '7'),
+ KEY_TRANS_ENTRY(8, 8, '8', '8'),
+ KEY_TRANS_ENTRY(9, 9, '9', '9'),
+ KEY_TRANS_ENTRY(0, 0, '0', '0'),
+ KEY_TRANS_ENTRY(MINUS, MINUS, VK_OEM_MINUS, '-'),
+ KEY_TRANS_ENTRY(EQUALS, EQUALS, VK_OEM_PLUS, '='),
+ KEY_TRANS_ENTRY(BACKSPACE, BACK, VK_BACK, 8),
+ KEY_TRANS_ENTRY(TAB, TAB, VK_TAB, 9),
+ KEY_TRANS_ENTRY(Q, Q, 'Q', 'Q'),
+ KEY_TRANS_ENTRY(W, W, 'W', 'W'),
+ KEY_TRANS_ENTRY(E, E, 'E', 'E'),
+ KEY_TRANS_ENTRY(R, R, 'R', 'R'),
+ KEY_TRANS_ENTRY(T, T, 'T', 'T'),
+ KEY_TRANS_ENTRY(Y, Y, 'Y', 'Y'),
+ KEY_TRANS_ENTRY(U, U, 'U', 'U'),
+ KEY_TRANS_ENTRY(I, I, 'I', 'I'),
+ KEY_TRANS_ENTRY(O, O, 'O', 'O'),
+ KEY_TRANS_ENTRY(P, P, 'P', 'P'),
+ KEY_TRANS_ENTRY(OPENBRACE, LBRACKET, VK_OEM_4, '['),
+ KEY_TRANS_ENTRY(CLOSEBRACE, RBRACKET, VK_OEM_6, ']'),
+ KEY_TRANS_ENTRY(ENTER, RETURN, VK_RETURN, 13),
+ KEY_TRANS_ENTRY(LCONTROL, LCONTROL, VK_LCONTROL, 0),
+ KEY_TRANS_ENTRY(A, A, 'A', 'A'),
+ KEY_TRANS_ENTRY(S, S, 'S', 'S'),
+ KEY_TRANS_ENTRY(D, D, 'D', 'D'),
+ KEY_TRANS_ENTRY(F, F, 'F', 'F'),
+ KEY_TRANS_ENTRY(G, G, 'G', 'G'),
+ KEY_TRANS_ENTRY(H, H, 'H', 'H'),
+ KEY_TRANS_ENTRY(J, J, 'J', 'J'),
+ KEY_TRANS_ENTRY(K, K, 'K', 'K'),
+ KEY_TRANS_ENTRY(L, L, 'L', 'L'),
+ KEY_TRANS_ENTRY(COLON, SEMICOLON, VK_OEM_1, ';'),
+ KEY_TRANS_ENTRY(QUOTE, APOSTROPHE, VK_OEM_7, '\''),
+ KEY_TRANS_ENTRY(TILDE, GRAVE, VK_OEM_3, '`'),
+ KEY_TRANS_ENTRY(LSHIFT, LSHIFT, VK_LSHIFT, 0),
+ KEY_TRANS_ENTRY(BACKSLASH, BACKSLASH, VK_OEM_5, '\\'),
+ KEY_TRANS_ENTRY(BACKSLASH2, OEM_102, VK_OEM_102, '<'),
+ KEY_TRANS_ENTRY(Z, Z, 'Z', 'Z'),
+ KEY_TRANS_ENTRY(X, X, 'X', 'X'),
+ KEY_TRANS_ENTRY(C, C, 'C', 'C'),
+ KEY_TRANS_ENTRY(V, V, 'V', 'V'),
+ KEY_TRANS_ENTRY(B, B, 'B', 'B'),
+ KEY_TRANS_ENTRY(N, N, 'N', 'N'),
+ KEY_TRANS_ENTRY(M, M, 'M', 'M'),
+ KEY_TRANS_ENTRY(COMMA, COMMA, VK_OEM_COMMA, ','),
+ KEY_TRANS_ENTRY(STOP, PERIOD, VK_OEM_PERIOD, '.'),
+ KEY_TRANS_ENTRY(SLASH, SLASH, VK_OEM_2, '/'),
+ KEY_TRANS_ENTRY(RSHIFT, RSHIFT, VK_RSHIFT, 0),
+ KEY_TRANS_ENTRY(ASTERISK, MULTIPLY, VK_MULTIPLY, '*'),
+ KEY_TRANS_ENTRY(LALT, LMENU, VK_LMENU, 0),
+ KEY_TRANS_ENTRY(SPACE, SPACE, VK_SPACE, ' '),
+ KEY_TRANS_ENTRY(CAPSLOCK, CAPITAL, VK_CAPITAL, 0),
+ KEY_TRANS_ENTRY(F1, F1, VK_F1, 0),
+ KEY_TRANS_ENTRY(F2, F2, VK_F2, 0),
+ KEY_TRANS_ENTRY(F3, F3, VK_F3, 0),
+ KEY_TRANS_ENTRY(F4, F4, VK_F4, 0),
+ KEY_TRANS_ENTRY(F5, F5, VK_F5, 0),
+ KEY_TRANS_ENTRY(F6, F6, VK_F6, 0),
+ KEY_TRANS_ENTRY(F7, F7, VK_F7, 0),
+ KEY_TRANS_ENTRY(F8, F8, VK_F8, 0),
+ KEY_TRANS_ENTRY(F9, F9, VK_F9, 0),
+ KEY_TRANS_ENTRY(F10, F10, VK_F10, 0),
+ KEY_TRANS_ENTRY(NUMLOCK, NUMLOCK, VK_NUMLOCK, 0),
+ KEY_TRANS_ENTRY(SCRLOCK, SCROLL, VK_SCROLL, 0),
+ KEY_TRANS_ENTRY(7_PAD, NUMPAD7, VK_NUMPAD7, 0),
+ KEY_TRANS_ENTRY(8_PAD, NUMPAD8, VK_NUMPAD8, 0),
+ KEY_TRANS_ENTRY(9_PAD, NUMPAD9, VK_NUMPAD9, 0),
+ KEY_TRANS_ENTRY(MINUS_PAD, SUBTRACT, VK_SUBTRACT, 0),
+ KEY_TRANS_ENTRY(4_PAD, NUMPAD4, VK_NUMPAD4, 0),
+ KEY_TRANS_ENTRY(5_PAD, NUMPAD5, VK_NUMPAD5, 0),
+ KEY_TRANS_ENTRY(6_PAD, NUMPAD6, VK_NUMPAD6, 0),
+ KEY_TRANS_ENTRY(PLUS_PAD, ADD, VK_ADD, 0),
+ KEY_TRANS_ENTRY(1_PAD, NUMPAD1, VK_NUMPAD1, 0),
+ KEY_TRANS_ENTRY(2_PAD, NUMPAD2, VK_NUMPAD2, 0),
+ KEY_TRANS_ENTRY(3_PAD, NUMPAD3, VK_NUMPAD3, 0),
+ KEY_TRANS_ENTRY(0_PAD, NUMPAD0, VK_NUMPAD0, 0),
+ KEY_TRANS_ENTRY(DEL_PAD, DECIMAL, VK_DECIMAL, 0),
+ KEY_TRANS_ENTRY(F11, F11, VK_F11, 0),
+ KEY_TRANS_ENTRY(F12, F12, VK_F12, 0),
+ KEY_TRANS_ENTRY(F13, F13, VK_F13, 0),
+ KEY_TRANS_ENTRY(F14, F14, VK_F14, 0),
+ KEY_TRANS_ENTRY(F15, F15, VK_F15, 0),
+ KEY_TRANS_ENTRY(ENTER_PAD, NUMPADENTER, VK_RETURN, 0),
+ KEY_TRANS_ENTRY(RCONTROL, RCONTROL, VK_RCONTROL, 0),
+ KEY_TRANS_ENTRY(SLASH_PAD, DIVIDE, VK_DIVIDE, 0),
+ KEY_TRANS_ENTRY(PRTSCR, SYSRQ, 0, 0),
+ KEY_TRANS_ENTRY(RALT, RMENU, VK_RMENU, 0),
+ KEY_TRANS_ENTRY(HOME, HOME, VK_HOME, 0),
+ KEY_TRANS_ENTRY(UP, UP, VK_UP, 0),
+ KEY_TRANS_ENTRY(PGUP, PRIOR, VK_PRIOR, 0),
+ KEY_TRANS_ENTRY(LEFT, LEFT, VK_LEFT, 0),
+ KEY_TRANS_ENTRY(RIGHT, RIGHT, VK_RIGHT, 0),
+ KEY_TRANS_ENTRY(END, END, VK_END, 0),
+ KEY_TRANS_ENTRY(DOWN, DOWN, VK_DOWN, 0),
+ KEY_TRANS_ENTRY(PGDN, NEXT, VK_NEXT, 0),
+ KEY_TRANS_ENTRY(INSERT, INSERT, VK_INSERT, 0),
+ KEY_TRANS_ENTRY(DEL, DELETE, VK_DELETE, 0),
+ KEY_TRANS_ENTRY(LWIN, LWIN, VK_LWIN, 0),
+ KEY_TRANS_ENTRY(RWIN, RWIN, VK_RWIN, 0),
+ KEY_TRANS_ENTRY(MENU, APPS, VK_APPS, 0),
+ KEY_TRANS_ENTRY(PAUSE, PAUSE, VK_PAUSE, 0),
+ { ITEM_ID_CANCEL, 0, VK_CANCEL, 0, "ITEM_ID_CANCEL" },
// New keys introduced in Windows 2000. These have no MAME codes to
// preserve compatibility with old config files that may refer to them
@@ -391,18 +394,18 @@ static const int win_key_trans_table[][4] =
// paused). Some codes are missing because the mapping to vkey codes
// isn't clear, and MapVirtualKey is no help.
- { ITEM_ID_OTHER_SWITCH, DIK_MUTE, VK_VOLUME_MUTE, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_VOLUMEDOWN, VK_VOLUME_DOWN, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_VOLUMEUP, VK_VOLUME_UP, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_WEBHOME, VK_BROWSER_HOME, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_WEBSEARCH, VK_BROWSER_SEARCH, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_WEBFAVORITES, VK_BROWSER_FAVORITES, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_WEBREFRESH, VK_BROWSER_REFRESH, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_WEBSTOP, VK_BROWSER_STOP, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_WEBFORWARD, VK_BROWSER_FORWARD, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_WEBBACK, VK_BROWSER_BACK, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_MAIL, VK_LAUNCH_MAIL, 0 },
- { ITEM_ID_OTHER_SWITCH, DIK_MEDIASELECT, VK_LAUNCH_MEDIA_SELECT, 0 },
+ KEY_TRANS_ENTRY(OTHER_SWITCH, MUTE, VK_VOLUME_MUTE, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, VOLUMEDOWN, VK_VOLUME_DOWN, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, VOLUMEUP, VK_VOLUME_UP, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, WEBHOME, VK_BROWSER_HOME, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, WEBSEARCH, VK_BROWSER_SEARCH, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, WEBFAVORITES, VK_BROWSER_FAVORITES, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, WEBREFRESH, VK_BROWSER_REFRESH, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, WEBSTOP, VK_BROWSER_STOP, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, WEBFORWARD, VK_BROWSER_FORWARD, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, WEBBACK, VK_BROWSER_BACK, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, MAIL, VK_LAUNCH_MAIL, 0),
+ KEY_TRANS_ENTRY(OTHER_SWITCH, MEDIASELECT, VK_LAUNCH_MEDIA_SELECT, 0),
};
@@ -424,8 +427,8 @@ INLINE input_item_id keyboard_map_scancode_to_itemid(int scancode)
// scan the table for a match
for (tablenum = 0; tablenum < ARRAY_LENGTH(win_key_trans_table); tablenum++)
- if (win_key_trans_table[tablenum][DI_KEY] == scancode)
- return (input_item_id)win_key_trans_table[tablenum][MAME_KEY];
+ if (win_key_trans_table[tablenum].di_key == scancode)
+ return (input_item_id)win_key_trans_table[tablenum].mame_key;
// default to an "other" switch
return ITEM_ID_OTHER_SWITCH;
@@ -706,20 +709,45 @@ int wininput_vkey_for_mame_code(input_code code)
// scan the table for a match
for (tablenum = 0; tablenum < ARRAY_LENGTH(win_key_trans_table); tablenum++)
- if (win_key_trans_table[tablenum][MAME_KEY] == id)
- return win_key_trans_table[tablenum][VIRTUAL_KEY];
+ if (win_key_trans_table[tablenum].mame_key == id)
+ return win_key_trans_table[tablenum].virtual_key;
}
return 0;
}
//============================================================
+// lookup_mame_code
+//============================================================
+
+static int lookup_mame_index(const char *scode)
+{
+ for (int i = 0; i < ARRAY_LENGTH(win_key_trans_table); i++)
+ {
+ if (!strcmp(scode, win_key_trans_table[i].mame_key_name))
+ return i;
+ }
+ return -1;
+}
+
+static input_item_id lookup_mame_code(const char *scode)
+{
+ int const index = lookup_mame_index(scode);
+ if (index >= 0)
+ return win_key_trans_table[index].mame_key;
+ else
+ return ITEM_ID_INVALID;
+}
+
+
+//============================================================
// customize_input_type_list
//============================================================
void windows_osd_interface::customize_input_type_list(simple_list<input_type_entry> &typelist)
{
input_type_entry *entry;
+ const char* uimode;
// loop over the defaults
for (entry = typelist.first(); entry != NULL; entry = entry->next())
@@ -731,6 +759,22 @@ void windows_osd_interface::customize_input_type_list(simple_list<input_type_ent
entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_TAB, input_seq::not_code, KEYCODE_LALT, input_seq::not_code, KEYCODE_RALT);
break;
+ // configurable UI mode switch
+ case IPT_UI_TOGGLE_UI:
+ uimode = options().ui_mode_key();
+ if (strcmp(uimode,"auto"))
+ {
+ std::string fullmode = "ITEM_ID_";
+ fullmode += uimode;
+ input_item_id const mameid_code = lookup_mame_code(fullmode.c_str());
+ if (ITEM_ID_INVALID != mameid_code)
+ {
+ input_code const ui_code = input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, input_item_id(mameid_code));
+ entry->defseq(SEQ_TYPE_STANDARD).set(ui_code);
+ }
+ }
+ break;
+
// alt-enter for fullscreen
case IPT_OSD_1:
entry->configure_osd("TOGGLE_FULLSCREEN", "Toggle Fullscreen");
@@ -1010,10 +1054,10 @@ static void win32_keyboard_poll(device_info *devinfo)
// iterate over keys
for (keynum = 0; keynum < ARRAY_LENGTH(win_key_trans_table); keynum++)
{
- int vk = win_key_trans_table[keynum][VIRTUAL_KEY];
+ int vk = win_key_trans_table[keynum].virtual_key;
if (vk != 0 && (GetAsyncKeyState(vk) & 0x8000) != 0)
{
- int dik = win_key_trans_table[keynum][DI_KEY];
+ int dik = win_key_trans_table[keynum].di_key;
// conver the VK code to a scancode (DIK code)
if (dik != 0)