diff options
author | 2012-02-16 01:38:13 +0000 | |
---|---|---|
committer | 2012-02-16 01:38:13 +0000 | |
commit | ebe89a47d3653294795abeda63701823ef194746 (patch) | |
tree | 6d3d50f612dc2e202b1d99bbb1b6b677e30ee31b /src/osd | |
parent | 1ea68a18b1deec0e7f42c189b7e733d7728e877d (diff) |
Fixed testkeys to work with SDL2.0. Keymaps can now contain SDL1.3 and SDL2.0 mappings. Updated km-de.txt as an example. [Couriersud]
Diffstat (limited to 'src/osd')
-rw-r--r-- | src/osd/sdl/input.c | 58 | ||||
-rw-r--r-- | src/osd/sdl/keymaps/km-de.txt | 12 | ||||
-rw-r--r-- | src/osd/sdl/testkeys.c | 60 |
3 files changed, 78 insertions, 52 deletions
diff --git a/src/osd/sdl/input.c b/src/osd/sdl/input.c index bd0fc49f6b2..1434f1392e7 100644 --- a/src/osd/sdl/input.c +++ b/src/osd/sdl/input.c @@ -496,8 +496,7 @@ static key_lookup_table sdl_lookup_table[] = KE8(F6, F7, F8, F9, F10, F11, F12, F13 ) KE8(F14, F15, NUMLOCKCLEAR, CAPSLOCK, SCROLLLOCK, RSHIFT, LSHIFT, RCTRL ) KE5(LCTRL, RALT, LALT, LGUI, RGUI) - KE(PRINTSCREEN) - KE(MENU) + KE8(GRAVE, LEFTBRACKET,RIGHTBRACKET, SEMICOLON, APOSTROPHE, BACKSLASH, PRINTSCREEN,MENU ) KE(UNDO) {-1, ""} }; @@ -542,7 +541,6 @@ static key_lookup_table sdl_lookup_table[] = }; #endif - //============================================================ // INLINE FUNCTIONS //============================================================ @@ -955,9 +953,10 @@ static kt_table * sdlinput_read_keymap(running_machine &machine) int line = 1; int index,i, sk, vk, ak; char buf[256]; - char mks[21]; - char sks[21]; - char kns[21]; + char mks[41]; + char sks[41]; + char kns[41]; + int sdl2section=0; if (!machine.options().bool_value(SDLOPTION_KEYMAP)) return sdl_key_trans_table; @@ -977,34 +976,41 @@ static kt_table * sdlinput_read_keymap(running_machine &machine) while (!feof(keymap_file)) { - fgets(buf, 255, keymap_file); - if (*buf && buf[0] && buf[0] != '#') + char *ret = fgets(buf, 255, keymap_file); + if (ret && buf[0] != '\n' && buf[0] != '#') { buf[255]=0; i=strlen(buf); if (i && buf[i-1] == '\n') buf[i-1] = 0; - mks[0]=0; - sks[0]=0; - memset(kns, 0, ARRAY_LENGTH(kns)); - sscanf(buf, "%20s %20s %x %x %20c\n", - mks, sks, &vk, &ak, kns); + if (strncmp(buf,"[SDL2]",6) == 0) + { + sdl2section = 1; + } + else if (((SDLMAME_SDL2) ^ sdl2section) == 0) + { + mks[0]=0; + sks[0]=0; + memset(kns, 0, ARRAY_LENGTH(kns)); + sscanf(buf, "%40s %40s %x %x %40c\n", + mks, sks, &vk, &ak, kns); - index=lookup_mame_index(mks); - sk = lookup_sdl_code(sks); + index=lookup_mame_index(mks); + sk = lookup_sdl_code(sks); - if ( sk >= 0 && index >=0) - { - key_trans_table[index].sdl_key = sk; - // vk and ak are not really needed - //key_trans_table[index][VIRTUAL_KEY] = vk; - //key_trans_table[index][ASCII_KEY] = ak; - key_trans_table[index].ui_name = auto_alloc_array(machine, char, strlen(kns)+1); - strcpy(key_trans_table[index].ui_name, kns); - mame_printf_verbose("Keymap: Mapped <%s> to <%s> with ui-text <%s>\n", sks, mks, kns); + if ( sk >= 0 && index >=0) + { + key_trans_table[index].sdl_key = sk; + // vk and ak are not really needed + //key_trans_table[index][VIRTUAL_KEY] = vk; + //key_trans_table[index][ASCII_KEY] = ak; + key_trans_table[index].ui_name = auto_alloc_array(machine, char, strlen(kns)+1); + strcpy(key_trans_table[index].ui_name, kns); + mame_printf_verbose("Keymap: Mapped <%s> to <%s> with ui-text <%s>\n", sks, mks, kns); + } + else + mame_printf_warning("Keymap: Error on line %d - %s key not found: %s\n", line, (sk<0) ? "sdl" : "mame", buf); } - else - mame_printf_warning("Keymap: Error on line %d - %s key not found: %s\n", line, (sk<0) ? "sdl" : "mame", buf); } line++; } diff --git a/src/osd/sdl/keymaps/km-de.txt b/src/osd/sdl/keymaps/km-de.txt index 9f5e6f7eebd..5e5b75fa7e9 100644 --- a/src/osd/sdl/keymaps/km-de.txt +++ b/src/osd/sdl/keymaps/km-de.txt @@ -12,3 +12,15 @@ ITEM_ID_BACKSLASH SDLK_LESS 0x5e 0x3c < ITEM_ID_SLASH SDLK_MINUS 0x3d 0x2d - ITEM_ID_Z SDLK_y 0x34 0x79 Y ITEM_ID_Y SDLK_z 0x1d 0x7a Z +[SDL2] +ITEM_ID_TILDE SDL_SCANCODE_GRAVE 0x35 0x0 ^ +ITEM_ID_MINUS SDL_SCANCODE_MINUS 0x2d 0x0 ß +ITEM_ID_EQUALS SDL_SCANCODE_EQUALS 0x2e 0x0 ' +ITEM_ID_OPENBRACE SDL_SCANCODE_LEFTBRACKET 0x2f 0x0 Ü +ITEM_ID_CLOSEBRACE SDL_SCANCODE_RIGHTBRACKET 0x30 0x0 + +ITEM_ID_COLON SDL_SCANCODE_SEMICOLON 0x33 0x0 Ö +ITEM_ID_QUOTE SDL_SCANCODE_APOSTROPHE 0x34 0x0 Ä +ITEM_ID_BACKSLASH SDL_SCANCODE_BACKSLASH 0x31 0x0 # +ITEM_ID_SLASH SDL_SCANCODE_SLASH 0x38 0x0 - +ITEM_ID_Z SDL_SCANCODE_Y 0x34 0x79 Y +ITEM_ID_Y SDL_SCANCODE_Z 0x1d 0x7a Z diff --git a/src/osd/sdl/testkeys.c b/src/osd/sdl/testkeys.c index ce40c612add..d7ba3352e5b 100644 --- a/src/osd/sdl/testkeys.c +++ b/src/osd/sdl/testkeys.c @@ -19,13 +19,6 @@ #include "unicode.h" -// Check whether SDL has compat interface -#if defined(SDL_AllocSurface) || (!SDLMAME_SDL2) -#define SDL_HAS_COMPAT 1 -#else -#define SDL_HAS_COMPAT 0 -#endif - typedef struct _key_lookup_table key_lookup_table; struct _key_lookup_table @@ -34,7 +27,6 @@ struct _key_lookup_table const char *name; }; -#if SDL_HAS_COMPAT #if (SDLMAME_SDL2) #define KE(x) { SDL_SCANCODE_ ## x, "SDL_SCANCODE_" #x }, #define KE8(A, B, C, D, E, F, G, H) KE(A) KE(B) KE(C) KE(D) KE(E) KE(F) KE(G) KE(H) @@ -116,7 +108,6 @@ static const char * lookup_key_name(const key_lookup_table *kt, int kc) } return NULL; } -#endif // SDL_HAS_COMPAT #ifdef SDLMAME_WIN32 int utf8_main(int argc, char *argv[]) @@ -124,18 +115,25 @@ int utf8_main(int argc, char *argv[]) int main(int argc, char *argv[]) #endif { -#if SDL_HAS_COMPAT SDL_Event event; int quit = 0; +#if (SDLMAME_SDL2) + char lasttext[20] = ""; +#else char buf[20]; +#endif if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } +#if (SDLMAME_SDL2) + SDL_CreateWindow("Input Test", 0, 0, 100, 100,0 ); +#else SDL_SetVideoMode(100, 50, 16, SDL_ANYFORMAT); SDL_EnableUNICODE(1); +#endif while(SDL_PollEvent(&event) || !quit) { switch(event.type) { case SDL_QUIT: @@ -146,32 +144,46 @@ int main(int argc, char *argv[]) quit=1; else { - memset(buf, 0, ARRAY_LENGTH(buf)); - utf8_from_uchar(buf, sizeof(buf), event.key.keysym.unicode); - printf("ITEM_ID_XY %s 0x%x 0x%x %s \n", #if (SDLMAME_SDL2) - lookup_key_name(sdl_lookup, event.key.keysym.scancode), + printf("ITEM_ID_XY %s 0x%x 0x%x %s\n", + lookup_key_name(sdl_lookup, event.key.keysym.scancode), + (int) event.key.keysym.scancode, + (int) event.key.keysym.unicode, + ""); + lasttext[0] = 0; #else - lookup_key_name(sdl_lookup, event.key.keysym.sym), + memset(buf, 0, 19); + utf8_from_uchar(buf, sizeof(buf), event.key.keysym.unicode); + printf("ITEM_ID_XY %s 0x%x 0x%x %s\n", + lookup_key_name(sdl_lookup, event.key.keysym.sym), + (int) event.key.keysym.scancode, + (int) event.key.keysym.unicode, + buf); #endif - (int) event.key.keysym.scancode, - (int) event.key.keysym.unicode, - buf); } break; case SDL_KEYUP: - memset(buf, 0, 19); - utf8_from_uchar(buf, sizeof(buf), event.key.keysym.unicode); - printf("ITEM_ID_XY %s 0x%x 0x%x %s \n", #if (SDLMAME_SDL2) + printf("ITEM_ID_XY %s 0x%x 0x%x %s\n", lookup_key_name(sdl_lookup, event.key.keysym.scancode), + (int) event.key.keysym.scancode, + (int) event.key.keysym.unicode, + lasttext); #else + memset(buf, 0, 19); + utf8_from_uchar(buf, sizeof(buf), event.key.keysym.unicode); + printf("ITEM_ID_XY %s 0x%x 0x%x %s\n", lookup_key_name(sdl_lookup, event.key.keysym.sym), -#endif (int) event.key.keysym.scancode, (int) event.key.keysym.unicode, buf); +#endif + break; +#if (SDLMAME_SDL2) + case SDL_TEXTINPUT: + strcpy(lasttext, event.text.text); break; +#endif } event.type = 0; @@ -181,9 +193,5 @@ int main(int argc, char *argv[]) } SDL_Quit(); return(0); -#else - printf("This SDL Version does not support 1.2 compatibility interface.\n"); - return(1); -#endif } |