summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Howard2009-06-12 19:07:55 +0000
committerSimon Howard2009-06-12 19:07:55 +0000
commitd4863b4c4ac47766b5fd3b8b0949be7af792e3d0 (patch)
treea1163a33377e61377d844fc8e972f6bd864702fc
parenta3b1c4e95cf3d8196858f5c98a92565eedbc1e48 (diff)
downloadchocolate-doom-d4863b4c4ac47766b5fd3b8b0949be7af792e3d0.tar.gz
chocolate-doom-d4863b4c4ac47766b5fd3b8b0949be7af792e3d0.tar.bz2
chocolate-doom-d4863b4c4ac47766b5fd3b8b0949be7af792e3d0.zip
On Windows CE systems without a keyboard, patch the default settings to
use hardware keys. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1600
-rw-r--r--setup/configfile.c76
-rw-r--r--setup/configfile.h2
-rw-r--r--setup/mainmenu.c2
-rw-r--r--src/d_main.c1
-rw-r--r--src/m_config.c78
-rw-r--r--src/m_config.h1
6 files changed, 160 insertions, 0 deletions
diff --git a/setup/configfile.c b/setup/configfile.c
index 3b6007f5..fe3c13de 100644
--- a/setup/configfile.c
+++ b/setup/configfile.c
@@ -35,6 +35,8 @@
#ifdef _WIN32
#include <io.h>
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
#else
#include <sys/stat.h>
#include <sys/types.h>
@@ -647,3 +649,77 @@ void M_SaveExtraDefaults(char *filename)
extra_defaults.filename = main_filename;
}
+#ifdef _WIN32_WCE
+
+static int SystemHasKeyboard(void)
+{
+ HKEY key;
+ DWORD valtype;
+ DWORD valsize;
+ DWORD result;
+
+ if (RegOpenKeyExW(HKEY_CURRENT_USER,
+ L"\\Software\\Microsoft\\Shell", 0,
+ KEY_READ, &key) != ERROR_SUCCESS)
+ {
+ return 0;
+ }
+
+ valtype = REG_SZ;
+ valsize = sizeof(DWORD);
+
+ if (RegQueryValueExW(key, L"HasKeyboard", NULL, &valtype,
+ (LPBYTE) &result, &valsize) != ERROR_SUCCESS)
+ {
+ result = 0;
+ }
+
+ // Close the key
+
+ RegCloseKey(key);
+
+ return result;
+}
+
+//
+// Apply custom defaults for Windows CE.
+//
+
+static void M_ApplyWindowsCEDefaults(void)
+{
+ // If the system doesn't have a keyboard, patch the default
+ // configuration to use the hardware keys.
+
+ if (!SystemHasKeyboard())
+ {
+ key_use = KEY_F1;
+ key_fire = KEY_F2;
+ key_menu_activate = KEY_F3;
+ key_map_toggle = KEY_F4;
+
+ key_menu_help = 0;
+ key_menu_save = 0;
+ key_menu_load = 0;
+ key_menu_volume = 0;
+
+ key_menu_confirm = KEY_ENTER;
+ key_menu_back = KEY_F2;
+ key_menu_abort = KEY_F2;
+ }
+}
+
+
+#endif
+
+//
+// Apply custom patches to the default values depending on the
+// platform we are running on.
+//
+
+void M_ApplyPlatformDefaults(void)
+{
+#ifdef _WIN32_WCE
+ M_ApplyWindowsCEDefaults();
+#endif
+}
+
diff --git a/setup/configfile.h b/setup/configfile.h
index f7c6156e..3ef2cf9b 100644
--- a/setup/configfile.h
+++ b/setup/configfile.h
@@ -38,5 +38,7 @@ void M_SetConfigDir(void);
void M_SaveMainDefaults(char *filename);
void M_SaveExtraDefaults(char *filename);
+void M_ApplyPlatformDefaults(void);
+
#endif
diff --git a/setup/mainmenu.c b/setup/mainmenu.c
index 6a1f01c2..c7e4f48d 100644
--- a/setup/mainmenu.c
+++ b/setup/mainmenu.c
@@ -143,6 +143,8 @@ void MainMenu(void)
static void InitConfig(void)
{
+ M_ApplyPlatformDefaults();
+
SetChatMacroDefaults();
SetPlayerNameDefault();
diff --git a/src/d_main.c b/src/d_main.c
index 29a366a1..c59a8fb7 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -974,6 +974,7 @@ void D_DoomMain (void)
V_Init ();
printf (DEH_String("M_LoadDefaults: Load system defaults.\n"));
+ M_ApplyPlatformDefaults();
M_LoadDefaults (); // load before initing other systems
printf (DEH_String("W_Init: Init WADfiles.\n"));
diff --git a/src/m_config.c b/src/m_config.c
index 9e770e48..4f789845 100644
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -31,6 +31,11 @@
#include <ctype.h>
#include <errno.h>
+#ifdef _WIN32
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#endif
+
#include "config.h"
#include "deh_main.h"
#include "doomdef.h"
@@ -1380,3 +1385,76 @@ void M_SetConfigDir(void)
}
}
+#ifdef _WIN32_WCE
+
+static int SystemHasKeyboard(void)
+{
+ HKEY key;
+ DWORD valtype;
+ DWORD valsize;
+ DWORD result;
+
+ if (RegOpenKeyExW(HKEY_CURRENT_USER,
+ L"\\Software\\Microsoft\\Shell", 0,
+ KEY_READ, &key) != ERROR_SUCCESS)
+ {
+ return 0;
+ }
+
+ valtype = REG_SZ;
+ valsize = sizeof(DWORD);
+
+ if (RegQueryValueExW(key, L"HasKeyboard", NULL, &valtype,
+ (LPBYTE) &result, &valsize) != ERROR_SUCCESS)
+ {
+ result = 0;
+ }
+
+ // Close the key
+
+ RegCloseKey(key);
+
+ return result;
+}
+
+//
+// Apply custom defaults for Windows CE.
+//
+
+static void M_ApplyWindowsCEDefaults(void)
+{
+ // If the system doesn't have a keyboard, patch the default
+ // configuration to use the hardware keys.
+
+ if (!SystemHasKeyboard())
+ {
+ key_use = KEY_F1;
+ key_fire = KEY_F2;
+ key_menu_activate = KEY_F3;
+ key_map_toggle = KEY_F4;
+
+ key_menu_help = 0;
+ key_menu_save = 0;
+ key_menu_load = 0;
+ key_menu_volume = 0;
+
+ key_menu_confirm = KEY_ENTER;
+ key_menu_back = KEY_F2;
+ key_menu_abort = KEY_F2;
+ }
+}
+
+#endif
+
+//
+// Apply custom patches to the default values depending on the
+// platform we are running on.
+//
+
+void M_ApplyPlatformDefaults(void)
+{
+#ifdef _WIN32_WCE
+ M_ApplyWindowsCEDefaults();
+#endif
+}
+
diff --git a/src/m_config.h b/src/m_config.h
index 747569cd..ff11e6d6 100644
--- a/src/m_config.h
+++ b/src/m_config.h
@@ -31,6 +31,7 @@
void M_LoadDefaults(void);
void M_SaveDefaults(void);
void M_SetConfigDir(void);
+void M_ApplyPlatformDefaults(void);
extern char *configdir;