From 60c35559f970676771aa0199fc5dff825a11c0b8 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Sun, 2 Mar 2003 21:42:43 +0000 Subject: [PATCH] Ascii foreign keyboard support Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@703 --- include/keyboard.h | 24 +++++++++++++----------- src/gui/sdlmain.cpp | 18 +++++++++++------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/include/keyboard.h b/include/keyboard.h index 0ff524e4..db7b0c13 100644 --- a/include/keyboard.h +++ b/include/keyboard.h @@ -19,17 +19,7 @@ #ifndef _KEYBOARD_H_ #define _KEYBOARD_H_ -typedef void(KEYBOARD_EventHandler)(void); -void KEYBOARD_AddCode(Bit8u code); -void KEYBOARD_AddKey(Bitu keytype,bool pressed); -void KEYBOARD_AddEvent(Bitu keytype,Bitu state,KEYBOARD_EventHandler * handler); - - -#define ALT_PRESSED 0x1 -#define CTRL_PRESSED 0x2 -#define SHIFT_PRESSED 0x4 - -enum { +enum KBD_KEYS { KBD_1, KBD_2, KBD_3, KBD_4, KBD_5, KBD_6, KBD_7, KBD_8, KBD_9, KBD_0, KBD_q, KBD_w, KBD_e, KBD_r, KBD_t, KBD_y, KBD_u, KBD_i, KBD_o, KBD_p, KBD_a, KBD_s, KBD_d, KBD_f, KBD_g, KBD_h, KBD_j, KBD_k, KBD_l, KBD_z, @@ -54,4 +44,16 @@ enum { KBD_LAST }; +typedef void(KEYBOARD_EventHandler)(void); + +void KEYBOARD_AddEvent(Bitu keytype,Bitu state,KEYBOARD_EventHandler * handler); +void KEYBOARD_AddKey(KBD_KEYS key,Bitu ascii,Bitu mod,bool pressed); +void KEYBOARD_ReadKey(Bitu & scancode,Bitu & ascii,Bitu & mod); + + +#define KBD_MOD_ALT 0x1 +#define KBD_MOD_CTRL 0x2 +#define KBD_MOD_SHIFT 0x4 + + #endif diff --git a/src/gui/sdlmain.cpp b/src/gui/sdlmain.cpp index b59538e2..7f32f2d2 100644 --- a/src/gui/sdlmain.cpp +++ b/src/gui/sdlmain.cpp @@ -250,14 +250,12 @@ static void GUI_StartUp(Section * sec) { /* Initialize screen for first time */ GFX_SetSize(640,400,8,0,0,0); SDL_EnableKeyRepeat(250,30); - + SDL_EnableUNICODE(1); /* Get some Keybinds */ - KEYBOARD_AddEvent(KBD_f10,CTRL_PRESSED,CaptureMouse); - KEYBOARD_AddEvent(KBD_enter,ALT_PRESSED,SwitchFullScreen); + KEYBOARD_AddEvent(KBD_f10,KBD_MOD_CTRL,CaptureMouse); + KEYBOARD_AddEvent(KBD_enter,KBD_MOD_ALT,SwitchFullScreen); } - - void Mouse_AutoLock(bool enable) { sdl.mouse.autolock=enable; if (enable && sdl.mouse.autoenable) sdl.mouse.requestlock=true; @@ -265,7 +263,7 @@ void Mouse_AutoLock(bool enable) { } static void HandleKey(SDL_KeyboardEvent * key) { - Bit32u code; + KBD_KEYS code; switch (key->keysym.sym) { case SDLK_1:code=KBD_1;break; case SDLK_2:code=KBD_2;break; @@ -386,7 +384,13 @@ static void HandleKey(SDL_KeyboardEvent * key) { //TODO maybe give warning for keypress unknown return; } - KEYBOARD_AddKey(code,(key->state==SDL_PRESSED)); + /* Check the modifiers */ + Bitu mod= + ((key->keysym.mod & KMOD_CTRL) ? KBD_MOD_CTRL : 0) | + ((key->keysym.mod & KMOD_ALT) ? KBD_MOD_ALT : 0) | + ((key->keysym.mod & KMOD_SHIFT) ? KBD_MOD_SHIFT : 0); + Bitu ascii=key->keysym.unicode<128 ? key->keysym.unicode : 0; + KEYBOARD_AddKey(code,ascii,mod,(key->state==SDL_PRESSED)); } static void HandleMouseMotion(SDL_MouseMotionEvent * motion) {