qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] Keyboard portability
@ 2004-01-25 11:12 Chris Emerson
  0 siblings, 0 replies; only message in thread
From: Chris Emerson @ 2004-01-25 11:12 UTC (permalink / raw)
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 345 bytes --]

Here's a patch which makes the keyboard usable for me on Debian/PPC.
The translation to PC keycodes is done from the SDL keysym rather than
the original scancode.  It's likely that there could be problems with
different keyboard layouts, but I think it should work on the whole.

Not tested on anything but my PowerMac with USB keyboard.

Chris

[-- Attachment #2: sdl-kbd.diff --]
[-- Type: text/plain, Size: 3610 bytes --]

Index: sdl.c
===================================================================
RCS file: /cvsroot/qemu/qemu/sdl.c,v
retrieving revision 1.3
diff -u -r1.3 sdl.c
--- sdl.c	4 Jan 2004 18:15:01 -0000	1.3
+++ sdl.c	25 Jan 2004 11:03:55 -0000
@@ -137,21 +137,122 @@
    0x53,         /* 157 KP_Del */
 };
 
+static const uint32_t sdl_sym_to_pc_keycode[SDLK_LAST] = {
+    [SDLK_ESCAPE] =	0x01,
+    [SDLK_F1] =		0x3b,
+    [SDLK_F2] =		0x3c,
+    [SDLK_F3] =		0x3d,
+    [SDLK_F4] =		0x3e,
+    [SDLK_F5] =		0x3f,
+    [SDLK_F6] =		0x40,
+    [SDLK_F7] =		0x41,
+    [SDLK_F8] =		0x42,
+    [SDLK_F9] =		0x43,
+    [SDLK_F10] =	0x44,
+    [SDLK_F11] =	0x57,
+    [SDLK_F12] =	0x58,
+    [SDLK_PRINT] =	0x37e0,
+    [SDLK_SCROLLOCK] =	0x46,
+    [SDLK_PAUSE] =	0x451de1,
+    [SDLK_BACKQUOTE] =	0x29,
+    [SDLK_1] =		0x02,
+    [SDLK_2] =		0x03,
+    [SDLK_3] =		0x04,
+    [SDLK_4] =		0x05,
+    [SDLK_5] =		0x06,
+    [SDLK_6] =		0x07,
+    [SDLK_7] =		0x08,
+    [SDLK_8] =		0x09,
+    [SDLK_9] =		0x0a,
+    [SDLK_0] =		0x0b,
+    [SDLK_MINUS] =	0x0c,
+    [SDLK_EQUALS] =	0x0d,
+    [SDLK_BACKSPACE] =	0x0e,
+    [SDLK_TAB] =	0x0f,
+    [SDLK_q] =		0x10,
+    [SDLK_w] =		0x11,
+    [SDLK_e] =		0x12,
+    [SDLK_r] =		0x13,
+    [SDLK_t] =		0x14,
+    [SDLK_y] =		0x15,
+    [SDLK_u] =		0x16,
+    [SDLK_i] =		0x17,
+    [SDLK_o] =		0x18,
+    [SDLK_p] =		0x19,
+    [SDLK_LEFTBRACKET] =0x1a,
+    [SDLK_RIGHTBRACKET]=0x1b,
+    [SDLK_RETURN] =	0x1c,
+    [SDLK_CAPSLOCK] =	0x3a,
+    [SDLK_a] =		0x1e,
+    [SDLK_s] =		0x1f,
+    [SDLK_d] =		0x20,
+    [SDLK_f] =		0x21,
+    [SDLK_g] =		0x22,
+    [SDLK_h] =		0x23,
+    [SDLK_j] =		0x24,
+    [SDLK_k] =		0x25,
+    [SDLK_l] =		0x26,
+    [SDLK_SEMICOLON] =	0x27,
+    [SDLK_QUOTE] =	0x28,
+    [SDLK_HASH] =	0x2b,
+    [SDLK_LSHIFT] =	0x2a,
+    [SDLK_BACKSLASH] =	0x56,
+    [SDLK_z] =		0x2c,
+    [SDLK_x] =		0x2d,
+    [SDLK_c] =		0x2e,
+    [SDLK_v] =		0x2f,
+    [SDLK_b] =		0x30,
+    [SDLK_n] =		0x31,
+    [SDLK_m] =		0x32,
+    [SDLK_COMMA] =	0x33,
+    [SDLK_PERIOD] =	0x34,
+    [SDLK_SLASH] =	0x35,
+    [SDLK_RSHIFT] =	0x36,
+    [SDLK_LCTRL] =	0x1d,
+    [SDLK_LALT] =	0x38,
+    [SDLK_SPACE] =	0x39,
+    [SDLK_RALT] =	0x38e0,
+    [SDLK_RCTRL] =	0x1de0,
+    [SDLK_INSERT] =	0x52e0,
+    [SDLK_HOME] =	0x47e0,
+    [SDLK_PAGEUP] =	0x49e0,
+    [SDLK_DELETE] =	0x53e0,
+    [SDLK_END] =	0x4fe0,
+    [SDLK_HOME] =	0x51e0,
+    [SDLK_UP] =		0x48e0,
+    [SDLK_LEFT] =	0x4be0,
+    [SDLK_DOWN] =	0x50e0,
+    [SDLK_RIGHT] =	0x4de0,
+    [SDLK_NUMLOCK] =	0x45,
+    [SDLK_KP_DIVIDE] =	0x35e0,
+    [SDLK_KP_MULTIPLY] =0x37,
+    [SDLK_KP_MINUS] =	0x4a,
+    [SDLK_KP7] =	0x47,
+    [SDLK_KP8] =	0x48,
+    [SDLK_KP9] =	0x49,
+    [SDLK_KP_PLUS] =	0x4e,
+    [SDLK_KP4] =	0x4b,
+    [SDLK_KP5] =	0x4c,
+    [SDLK_KP6] =	0x4d,
+    [SDLK_KP1] =	0x4f,
+    [SDLK_KP2] =	0x50,
+    [SDLK_KP3] =	0x51,
+    [SDLK_KP_ENTER] =	0x1ce0,
+    [SDLK_KP0] =	0x52,
+    [SDLK_KP_PERIOD] =	0x52,
+};
+
 static void sdl_process_key(SDL_KeyboardEvent *ev)
 {
     int keycode, v;
+    SDLKey sym;
     
-    /* XXX: not portable, but avoids complicated mappings */
-    keycode = ev->keysym.scancode;
-    if (keycode < 9) {
-        keycode = 0;
-    } else if (keycode < 97) {
-        keycode -= 8; /* just an offset */
-    } else if (keycode < 158) {
-        /* use conversion table */
-        keycode = x_keycode_to_pc_keycode[keycode - 97];
+    sym = ev->keysym.sym;
+
+    if ((sym > SDLK_LAST) || (sym < 0)) {
+	keycode = 0;
     } else {
-        keycode = 0;
+	keycode = sdl_sym_to_pc_keycode[sym];
     }
     
     /* now send the key code */

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2004-01-25 11:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-25 11:12 [Qemu-devel] [PATCH] Keyboard portability Chris Emerson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).