From 5fda7b7084064ce5362b6c0db9f3f8ec66807308 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Mar 08 2009 21:56:05 +0000 Subject: - Fix build with GCC 4.4 - Fix key mapping with evdev driver (#473875) --- diff --git a/dosbox-0.72-evdev.patch b/dosbox-0.72-evdev.patch new file mode 100644 index 0000000..7f669d4 --- /dev/null +++ b/dosbox-0.72-evdev.patch @@ -0,0 +1,141 @@ +Fix support for evdev (#473875) +Following upstream commits: + +Author: c2woody +Date: Wed Dec 31 16:33:46 2008 +0000 + + add evdev-kbd compatible scancode remapping (disabled atm) + +Author: qbix79 +Date: Thu Jan 22 13:14:33 2009 +0000 + + Add experimental evdev detection. + +Author: qbix79 +Date: Thu Jan 22 21:44:14 2009 +0000 + + counting is hard + +diff -up dosbox-0.72/src/gui/sdl_mapper.cpp.evdev dosbox-0.72/src/gui/sdl_mapper.cpp +--- dosbox-0.72/src/gui/sdl_mapper.cpp.evdev 2007-08-17 14:49:56.000000000 -0400 ++++ dosbox-0.72/src/gui/sdl_mapper.cpp 2009-03-08 21:41:46.000000000 -0400 +@@ -1614,7 +1614,7 @@ static struct { + + + static void change_action_text(const char* text,Bit8u col) { +- bind_but.action->Change(text); ++ bind_but.action->Change(text,""); + bind_but.action->SetColor(col); + } + +@@ -2172,7 +2172,7 @@ static void CreateBindGroups(void) { + if (mapper.sticks.num) SDL_JoystickEventState(SDL_DISABLE); + #else + // enable joystick event handling +- if (numsticks) SDL_JoystickEventState(SDL_ENABLE); ++ if (mapper.sticks.num) SDL_JoystickEventState(SDL_ENABLE); + else return; + #endif + Bit8u joyno=0; +@@ -2276,6 +2276,11 @@ void MAPPER_Init(void) { + if (!MAPPER_LoadBinds()) CreateDefaultBinds(); + } + ++//Somehow including them at the top conflicts with something in setup.h ++#ifdef LINUX ++#include "SDL_syswm.h" ++#include ++#endif + void MAPPER_StartUp(Section * sec) { + Section_prop * section=static_cast(sec); + mapper.sticks.num=0; +@@ -2292,7 +2297,7 @@ void MAPPER_StartUp(Section * sec) { + virtual_joysticks[0].axis_pos[i]=0; + } + +- usescancodes=false; ++ usescancodes = false; + + if (section->Get_bool("usescancodes")) { + usescancodes=true; +@@ -2319,23 +2324,63 @@ void MAPPER_StartUp(Section * sec) { + sdlkey_map[0x5E]=SDLK_RALT; + sdlkey_map[0x40]=SDLK_KP5; + sdlkey_map[0x41]=SDLK_KP6; +-#elif !defined (WIN32) /* => Linux */ +- sdlkey_map[0x5a]=SDLK_UP; +- sdlkey_map[0x60]=SDLK_DOWN; +- sdlkey_map[0x5c]=SDLK_LEFT; +- sdlkey_map[0x5e]=SDLK_RIGHT; +- sdlkey_map[0x59]=SDLK_HOME; +- sdlkey_map[0x5f]=SDLK_END; +- sdlkey_map[0x5b]=SDLK_PAGEUP; +- sdlkey_map[0x61]=SDLK_PAGEDOWN; +- sdlkey_map[0x62]=SDLK_INSERT; +- sdlkey_map[0x63]=SDLK_DELETE; +- sdlkey_map[0x68]=SDLK_KP_DIVIDE; +- sdlkey_map[0x64]=SDLK_KP_ENTER; +- sdlkey_map[0x65]=SDLK_RCTRL; +- sdlkey_map[0x66]=SDLK_PAUSE; +- sdlkey_map[0x67]=SDLK_PRINT; +- sdlkey_map[0x69]=SDLK_RALT; ++#elif !defined (WIN32) /* => Linux & BSDs */ ++ //bool evdev_input = false; ++ bool evdev_input = true; ++#ifdef LINUX ++ SDL_SysWMinfo info; ++ SDL_VERSION(&info.version); ++ if (SDL_GetWMInfo(&info)) { ++ XkbDescPtr desc = NULL; ++ if((desc = XkbGetMap(info.info.x11.display,XkbAllComponentsMask,XkbUseCoreKbd))) { ++ if(XkbGetNames(info.info.x11.display,XkbAllNamesMask,desc) == 0) { ++ const char* keycodes = XGetAtomName(info.info.x11.display, desc->names->keycodes); ++// const char* geom = XGetAtomName(info.info.x11.display, desc->names->geometry); ++ if(keycodes) { ++ LOG(LOG_MISC,LOG_NORMAL)("keyboard type %s",keycodes); ++ if (strncmp(keycodes,"evdev",5) == 0) evdev_input = true; ++ } ++ XkbFreeNames(desc,XkbAllNamesMask,True); ++ } ++ XkbFreeClientMap(desc,0,True); ++ } ++ } ++#endif ++ if (evdev_input) { ++ sdlkey_map[0x67]=SDLK_UP; ++ sdlkey_map[0x6c]=SDLK_DOWN; ++ sdlkey_map[0x69]=SDLK_LEFT; ++ sdlkey_map[0x6a]=SDLK_RIGHT; ++ sdlkey_map[0x66]=SDLK_HOME; ++ sdlkey_map[0x6b]=SDLK_END; ++ sdlkey_map[0x68]=SDLK_PAGEUP; ++ sdlkey_map[0x6d]=SDLK_PAGEDOWN; ++ sdlkey_map[0x6e]=SDLK_INSERT; ++ sdlkey_map[0x6f]=SDLK_DELETE; ++ sdlkey_map[0x62]=SDLK_KP_DIVIDE; ++ sdlkey_map[0x60]=SDLK_KP_ENTER; ++ sdlkey_map[0x61]=SDLK_RCTRL; ++ sdlkey_map[0x77]=SDLK_PAUSE; ++ sdlkey_map[0x63]=SDLK_PRINT; ++ sdlkey_map[0x64]=SDLK_RALT; ++ } else { ++ sdlkey_map[0x5a]=SDLK_UP; ++ sdlkey_map[0x60]=SDLK_DOWN; ++ sdlkey_map[0x5c]=SDLK_LEFT; ++ sdlkey_map[0x5e]=SDLK_RIGHT; ++ sdlkey_map[0x59]=SDLK_HOME; ++ sdlkey_map[0x5f]=SDLK_END; ++ sdlkey_map[0x5b]=SDLK_PAGEUP; ++ sdlkey_map[0x61]=SDLK_PAGEDOWN; ++ sdlkey_map[0x62]=SDLK_INSERT; ++ sdlkey_map[0x63]=SDLK_DELETE; ++ sdlkey_map[0x68]=SDLK_KP_DIVIDE; ++ sdlkey_map[0x64]=SDLK_KP_ENTER; ++ sdlkey_map[0x65]=SDLK_RCTRL; ++ sdlkey_map[0x66]=SDLK_PAUSE; ++ sdlkey_map[0x67]=SDLK_PRINT; ++ sdlkey_map[0x69]=SDLK_RALT; ++ } + #else + sdlkey_map[0xc8]=SDLK_UP; + sdlkey_map[0xd0]=SDLK_DOWN; diff --git a/dosbox-0.72-gcc44.patch b/dosbox-0.72-gcc44.patch new file mode 100644 index 0000000..dd12709 --- /dev/null +++ b/dosbox-0.72-gcc44.patch @@ -0,0 +1,19 @@ +Fix build with GCC 4.4 + +Submitted upstream: +https://sourceforge.net/tracker/index.php?func=detail&aid=2673190&group_id=52551&atid=467234 + +Lubomir Rintel + +diff -up dosbox-0.72/src/gui/midi_alsa.h.gcc44 dosbox-0.72/src/gui/midi_alsa.h +--- dosbox-0.72/src/gui/midi_alsa.h.gcc44 2009-03-08 19:27:09.000000000 -0400 ++++ dosbox-0.72/src/gui/midi_alsa.h 2009-03-08 19:27:48.000000000 -0400 +@@ -51,7 +51,7 @@ private: + } + + int parse_addr(const char *arg, int *client, int *port) { +- char *p; ++ const char *p; + + if (isdigit(*arg)) { + if ((p = strpbrk(arg, ADDR_DELIM)) == NULL) diff --git a/dosbox.spec b/dosbox.spec index 949db78..4abd048 100644 --- a/dosbox.spec +++ b/dosbox.spec @@ -1,6 +1,6 @@ Name: dosbox Version: 0.72 -Release: 6%{?dist} +Release: 7%{?dist} Summary: x86/DOS emulator with sound and graphics @@ -11,6 +11,8 @@ Source0: http://dl.sourceforge.net/%{name}/%{name}-%{version}.tar.gz Source1: dosbox.desktop Source2: dosbox.png Patch0: dosbox-gcc43.patch +Patch1: dosbox-0.72-gcc44.patch +Patch2: dosbox-0.72-evdev.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: libpng-devel @@ -38,6 +40,8 @@ of the old classics that don't run on your new computer! %prep %setup -q %patch0 -p1 +%patch1 -p1 -b .gcc44 +%patch2 -p1 -b .evdev %build %configure --enable-core-inline @@ -75,6 +79,10 @@ rm -rf ${RPM_BUILD_ROOT} %changelog +* Sun Mar 08 2009 Lubomir Rintel - 0.72-7 +- Fix build with GCC 4.4 +- Fix key mapping with evdev driver (#473875) + * Tue Feb 24 2009 Fedora Release Engineering - 0.72-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild