summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd
diff options
context:
space:
mode:
author Couriersud <couriersud@users.noreply.github.com>2012-02-16 01:38:13 +0000
committer Couriersud <couriersud@users.noreply.github.com>2012-02-16 01:38:13 +0000
commitebe89a47d3653294795abeda63701823ef194746 (patch)
tree6d3d50f612dc2e202b1d99bbb1b6b677e30ee31b /src/osd
parent1ea68a18b1deec0e7f42c189b7e733d7728e877d (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.c58
-rw-r--r--src/osd/sdl/keymaps/km-de.txt12
-rw-r--r--src/osd/sdl/testkeys.c60
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
}