shithub: choc

Download patch

ref: 3e9f69932d1d7a42561cf903f4024e2cc1662ef9
parent: d57d467f53271502ebace92a3ff958ca695cd8e9
author: Simon Howard <[email protected]>
date: Mon Oct 23 14:32:26 EDT 2006

Detect when keyboard variables are changed and convert back so that the
new values are saved to the config file.

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 721

--- a/setup/configfile.c
+++ b/setup/configfile.c
@@ -151,10 +151,25 @@
 
 typedef struct
 {
+    // Name of the variable
     char *         name;
+
+    // Pointer to the location in memory of the variable
     void *         location;
+
+    // Type of the variable
     default_type_t type;
+
+    // If this is a key value, the original integer scancode we read from
+    // the config file before translating it to the internal key value.
+    // If zero, we didn't read this value from a config file.
     int            untranslated;
+
+    // The value we translated the scancode into when we read the 
+    // config file on startup.  If the variable value is different from
+    // this, it has been changed and needs to be converted; otherwise,
+    // use the 'untranslated' value.
+    int            original_translated;
 } default_t;
 
 typedef struct
@@ -166,47 +181,47 @@
 
 static default_t	doom_defaults_list[] =
 {
-    {"mouse_sensitivity", &mouseSensitivity, DEFAULT_INT, 0},
-    {"sfx_volume",&sfxVolume, DEFAULT_INT, 0},
-    {"music_volume",&musicVolume, DEFAULT_INT, 0},
-    {"show_messages",&showMessages, DEFAULT_INT, 0},
+    {"mouse_sensitivity", &mouseSensitivity, DEFAULT_INT, 0, 0},
+    {"sfx_volume",&sfxVolume, DEFAULT_INT, 0, 0},
+    {"music_volume",&musicVolume, DEFAULT_INT, 0, 0},
+    {"show_messages",&showMessages, DEFAULT_INT, 0, 0},
 
-    {"key_right",&key_right, DEFAULT_KEY, 0},
-    {"key_left",&key_left, DEFAULT_KEY, 0},
-    {"key_up",&key_up, DEFAULT_KEY, 0},
-    {"key_down",&key_down, DEFAULT_KEY, 0},
-    {"key_strafeleft",&key_strafeleft, DEFAULT_KEY, 0},
-    {"key_straferight",&key_straferight, DEFAULT_KEY, 0},
+    {"key_right",&key_right, DEFAULT_KEY, 0, 0},
+    {"key_left",&key_left, DEFAULT_KEY, 0, 0},
+    {"key_up",&key_up, DEFAULT_KEY, 0, 0},
+    {"key_down",&key_down, DEFAULT_KEY, 0, 0},
+    {"key_strafeleft",&key_strafeleft, DEFAULT_KEY, 0, 0},
+    {"key_straferight",&key_straferight, DEFAULT_KEY, 0, 0},
 
-    {"key_fire",&key_fire, DEFAULT_KEY, 0},
-    {"key_use",&key_use, DEFAULT_KEY, 0},
-    {"key_strafe",&key_strafe, DEFAULT_KEY, 0},
-    {"key_speed",&key_speed, DEFAULT_KEY, 0},
+    {"key_fire",&key_fire, DEFAULT_KEY, 0, 0},
+    {"key_use",&key_use, DEFAULT_KEY, 0, 0},
+    {"key_strafe",&key_strafe, DEFAULT_KEY, 0, 0},
+    {"key_speed",&key_speed, DEFAULT_KEY, 0, 0},
 
-    {"use_mouse",&usemouse, DEFAULT_INT, 0},
-    {"mouseb_fire",&mousebfire, DEFAULT_INT, 0},
-    {"mouseb_strafe",&mousebstrafe, DEFAULT_INT, 0},
-    {"mouseb_forward",&mousebforward, DEFAULT_INT, 0},
+    {"use_mouse",&usemouse, DEFAULT_INT, 0, 0},
+    {"mouseb_fire",&mousebfire, DEFAULT_INT, 0, 0},
+    {"mouseb_strafe",&mousebstrafe, DEFAULT_INT, 0, 0},
+    {"mouseb_forward",&mousebforward, DEFAULT_INT, 0, 0},
 
-    {"use_joystick",&usejoystick, DEFAULT_INT, 0},
-    {"joyb_fire",&joybfire, DEFAULT_INT, 0},
-    {"joyb_strafe",&joybstrafe, DEFAULT_INT, 0},
-    {"joyb_use",&joybuse, DEFAULT_INT, 0},
-    {"joyb_speed",&joybspeed, DEFAULT_INT, 0},
+    {"use_joystick",&usejoystick, DEFAULT_INT, 0, 0},
+    {"joyb_fire",&joybfire, DEFAULT_INT, 0, 0},
+    {"joyb_strafe",&joybstrafe, DEFAULT_INT, 0, 0},
+    {"joyb_use",&joybuse, DEFAULT_INT, 0, 0},
+    {"joyb_speed",&joybspeed, DEFAULT_INT, 0, 0},
 
-    {"screenblocks",&screenblocks, DEFAULT_INT, 0},
-    {"detaillevel",&detailLevel, DEFAULT_INT, 0},
+    {"screenblocks",&screenblocks, DEFAULT_INT, 0, 0},
+    {"detaillevel",&detailLevel, DEFAULT_INT, 0, 0},
 
-    {"snd_channels",&numChannels, DEFAULT_INT, 0},
+    {"snd_channels",&numChannels, DEFAULT_INT, 0, 0},
 
-    {"snd_musicdevice", &snd_musicdevice, DEFAULT_INT, 0},
-    {"snd_sfxdevice", &snd_sfxdevice, DEFAULT_INT, 0},
-    {"snd_sbport", &snd_sbport, DEFAULT_INT, 0},
-    {"snd_sbirq", &snd_sbirq, DEFAULT_INT, 0},
-    {"snd_sbdma", &snd_sbdma, DEFAULT_INT, 0},
-    {"snd_mport", &snd_mport, DEFAULT_INT, 0},
+    {"snd_musicdevice", &snd_musicdevice, DEFAULT_INT, 0, 0},
+    {"snd_sfxdevice", &snd_sfxdevice, DEFAULT_INT, 0, 0},
+    {"snd_sbport", &snd_sbport, DEFAULT_INT, 0, 0},
+    {"snd_sbirq", &snd_sbirq, DEFAULT_INT, 0, 0},
+    {"snd_sbdma", &snd_sbdma, DEFAULT_INT, 0, 0},
+    {"snd_mport", &snd_mport, DEFAULT_INT, 0, 0},
 
-    {"usegamma", &usegamma, DEFAULT_INT, 0},
+    {"usegamma", &usegamma, DEFAULT_INT, 0, 0},
 
     {"chatmacro0", &chat_macros[0], DEFAULT_STRING, 0 },
     {"chatmacro1", &chat_macros[1], DEFAULT_STRING, 0 },
@@ -229,17 +244,17 @@
 
 static default_t extra_defaults_list[] = 
 {
-    {"autoadjust_video_settings",   &autoadjust_video_settings, 0, 0},
-    {"fullscreen",                  &fullscreen, 0, 0},
-    {"startup_delay",               &startup_delay, 0, 0},
-    {"screenmultiply",              &screenmultiply, 0, 0},
-    {"grabmouse",                   &grabmouse, 0, 0},
-    {"novert",                      &novert, 0, 0},
-    {"mouse_acceleration",          &mouse_acceleration,       DEFAULT_FLOAT, 0},
-    {"mouse_threshold",             &mouse_threshold, 0, 0},
-    {"show_endoom",                 &show_endoom, 0, 0},
-    {"vanilla_savegame_limit",      &vanilla_savegame_limit, 0, 0},
-    {"vanilla_demo_limit",          &vanilla_demo_limit, 0, 0},
+    {"autoadjust_video_settings",   &autoadjust_video_settings, DEFAULT_INT, 0, 0},
+    {"fullscreen",                  &fullscreen, DEFAULT_INT, 0, 0},
+    {"startup_delay",               &startup_delay, DEFAULT_INT, 0, 0},
+    {"screenmultiply",              &screenmultiply, DEFAULT_INT, 0, 0},
+    {"grabmouse",                   &grabmouse, DEFAULT_INT, 0, 0},
+    {"novert",                      &novert, DEFAULT_INT, 0, 0},
+    {"mouse_acceleration",          &mouse_acceleration, DEFAULT_FLOAT, 0, 0},
+    {"mouse_threshold",             &mouse_threshold, DEFAULT_INT, 0, 0},
+    {"show_endoom",                 &show_endoom, DEFAULT_INT, 0, 0},
+    {"vanilla_savegame_limit",      &vanilla_savegame_limit, DEFAULT_INT, 0, 0},
+    {"vanilla_demo_limit",          &vanilla_demo_limit, DEFAULT_INT, 0, 0},
 #ifdef FEATURE_MULTIPLAYER
     {"player_name",                 &net_player_name,          DEFAULT_STRING, 0},
 #endif
@@ -308,8 +323,12 @@
                 
                 v = * (int *) defaults[i].location;
 
-                if (defaults[i].untranslated)
+                if (defaults[i].untranslated
+                 && v == defaults[i].original_translated)
                 {
+                    // Has not been changed since the last time we
+                    // read the config file.
+
                     v = defaults[i].untranslated;
                 }
                 else
@@ -437,6 +456,7 @@
                     defaults[i].untranslated = intparm;
                     intparm = scantokey[intparm];
 
+                    defaults[i].original_translated = intparm;
                     * (int *) def->location = intparm;
                     break;
 
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -253,10 +253,25 @@
 
 typedef struct
 {
+    // Name of the variable
     char *         name;
+
+    // Pointer to the location in memory of the variable
     void *         location;
+
+    // Type of the variable
     default_type_t type;
+
+    // If this is a key value, the original integer scancode we read from
+    // the config file before translating it to the internal key value.
+    // If zero, we didn't read this value from a config file.
     int            untranslated;
+
+    // The value we translated the scancode into when we read the 
+    // config file on startup.  If the variable value is different from
+    // this, it has been changed and needs to be converted; otherwise,
+    // use the 'untranslated' value.
+    int            original_translated;
 } default_t;
 
 typedef struct
@@ -268,47 +283,47 @@
 
 static default_t	doom_defaults_list[] =
 {
-    {"mouse_sensitivity", &mouseSensitivity, DEFAULT_INT, 0},
-    {"sfx_volume",&sfxVolume, DEFAULT_INT, 0},
-    {"music_volume",&musicVolume, DEFAULT_INT, 0},
-    {"show_messages",&showMessages, DEFAULT_INT, 0},
+    {"mouse_sensitivity", &mouseSensitivity, DEFAULT_INT, 0, 0},
+    {"sfx_volume",&sfxVolume, DEFAULT_INT, 0, 0},
+    {"music_volume",&musicVolume, DEFAULT_INT, 0, 0},
+    {"show_messages",&showMessages, DEFAULT_INT, 0, 0},
 
-    {"key_right",&key_right, DEFAULT_KEY, 0},
-    {"key_left",&key_left, DEFAULT_KEY, 0},
-    {"key_up",&key_up, DEFAULT_KEY, 0},
-    {"key_down",&key_down, DEFAULT_KEY, 0},
-    {"key_strafeleft",&key_strafeleft, DEFAULT_KEY, 0},
-    {"key_straferight",&key_straferight, DEFAULT_KEY, 0},
+    {"key_right",&key_right, DEFAULT_KEY, 0, 0},
+    {"key_left",&key_left, DEFAULT_KEY, 0, 0},
+    {"key_up",&key_up, DEFAULT_KEY, 0, 0},
+    {"key_down",&key_down, DEFAULT_KEY, 0, 0},
+    {"key_strafeleft",&key_strafeleft, DEFAULT_KEY, 0, 0},
+    {"key_straferight",&key_straferight, DEFAULT_KEY, 0, 0},
 
-    {"key_fire",&key_fire, DEFAULT_KEY, 0},
-    {"key_use",&key_use, DEFAULT_KEY, 0},
-    {"key_strafe",&key_strafe, DEFAULT_KEY, 0},
-    {"key_speed",&key_speed, DEFAULT_KEY, 0},
+    {"key_fire",&key_fire, DEFAULT_KEY, 0, 0},
+    {"key_use",&key_use, DEFAULT_KEY, 0, 0},
+    {"key_strafe",&key_strafe, DEFAULT_KEY, 0, 0},
+    {"key_speed",&key_speed, DEFAULT_KEY, 0, 0},
 
-    {"use_mouse",&usemouse, DEFAULT_INT, 0},
-    {"mouseb_fire",&mousebfire, DEFAULT_INT, 0},
-    {"mouseb_strafe",&mousebstrafe, DEFAULT_INT, 0},
-    {"mouseb_forward",&mousebforward, DEFAULT_INT, 0},
+    {"use_mouse",&usemouse, DEFAULT_INT, 0, 0},
+    {"mouseb_fire",&mousebfire, DEFAULT_INT, 0, 0},
+    {"mouseb_strafe",&mousebstrafe, DEFAULT_INT, 0, 0},
+    {"mouseb_forward",&mousebforward, DEFAULT_INT, 0, 0},
 
-    {"use_joystick",&usejoystick, DEFAULT_INT, 0},
-    {"joyb_fire",&joybfire, DEFAULT_INT, 0},
-    {"joyb_strafe",&joybstrafe, DEFAULT_INT, 0},
-    {"joyb_use",&joybuse, DEFAULT_INT, 0},
-    {"joyb_speed",&joybspeed, DEFAULT_INT, 0},
+    {"use_joystick",&usejoystick, DEFAULT_INT, 0, 0},
+    {"joyb_fire",&joybfire, DEFAULT_INT, 0, 0},
+    {"joyb_strafe",&joybstrafe, DEFAULT_INT, 0, 0},
+    {"joyb_use",&joybuse, DEFAULT_INT, 0, 0},
+    {"joyb_speed",&joybspeed, DEFAULT_INT, 0, 0},
 
-    {"screenblocks",&screenblocks, DEFAULT_INT, 0},
-    {"detaillevel",&detailLevel, DEFAULT_INT, 0},
+    {"screenblocks",&screenblocks, DEFAULT_INT, 0, 0},
+    {"detaillevel",&detailLevel, DEFAULT_INT, 0, 0},
 
-    {"snd_channels",&numChannels, DEFAULT_INT, 0},
+    {"snd_channels",&numChannels, DEFAULT_INT, 0, 0},
 
-    {"snd_musicdevice", &snd_musicdevice, DEFAULT_INT, 0},
-    {"snd_sfxdevice", &snd_sfxdevice, DEFAULT_INT, 0},
-    {"snd_sbport", &snd_sbport, DEFAULT_INT, 0},
-    {"snd_sbirq", &snd_sbirq, DEFAULT_INT, 0},
-    {"snd_sbdma", &snd_sbdma, DEFAULT_INT, 0},
-    {"snd_mport", &snd_mport, DEFAULT_INT, 0},
+    {"snd_musicdevice", &snd_musicdevice, DEFAULT_INT, 0, 0},
+    {"snd_sfxdevice", &snd_sfxdevice, DEFAULT_INT, 0, 0},
+    {"snd_sbport", &snd_sbport, DEFAULT_INT, 0, 0},
+    {"snd_sbirq", &snd_sbirq, DEFAULT_INT, 0, 0},
+    {"snd_sbdma", &snd_sbdma, DEFAULT_INT, 0, 0},
+    {"snd_mport", &snd_mport, DEFAULT_INT, 0, 0},
 
-    {"usegamma", &usegamma, DEFAULT_INT, 0},
+    {"usegamma", &usegamma, DEFAULT_INT, 0, 0},
 
     {"chatmacro0", &chat_macros[0], DEFAULT_STRING, 0 },
     {"chatmacro1", &chat_macros[1], DEFAULT_STRING, 0 },
@@ -331,19 +346,19 @@
 
 static default_t extra_defaults_list[] = 
 {
-    {"autoadjust_video_settings",   &autoadjust_video_settings, 0, 0},
-    {"fullscreen",                  &fullscreen, 0, 0},
-    {"startup_delay",               &startup_delay, 0, 0},
-    {"screenmultiply",              &screenmultiply, 0, 0},
-    {"grabmouse",                   &grabmouse, 0, 0},
-    {"novert",                      &novert, 0, 0},
-    {"mouse_acceleration",          &mouse_acceleration,       DEFAULT_FLOAT, 0},
-    {"mouse_threshold",             &mouse_threshold, 0, 0},
-    {"show_endoom",                 &show_endoom, 0, 0},
-    {"vanilla_savegame_limit",      &vanilla_savegame_limit, 0, 0},
-    {"vanilla_demo_limit",          &vanilla_demo_limit, 0, 0},
+    {"autoadjust_video_settings",   &autoadjust_video_settings, DEFAULT_INT, 0, 0},
+    {"fullscreen",                  &fullscreen, DEFAULT_INT, 0, 0},
+    {"startup_delay",               &startup_delay, DEFAULT_INT, 0, 0},
+    {"screenmultiply",              &screenmultiply, DEFAULT_INT, 0, 0},
+    {"grabmouse",                   &grabmouse, DEFAULT_INT, 0, 0},
+    {"novert",                      &novert, DEFAULT_INT, 0, 0},
+    {"mouse_acceleration",          &mouse_acceleration, DEFAULT_FLOAT, 0, 0},
+    {"mouse_threshold",             &mouse_threshold, DEFAULT_INT, 0, 0},
+    {"show_endoom",                 &show_endoom, DEFAULT_INT, 0, 0},
+    {"vanilla_savegame_limit",      &vanilla_savegame_limit, DEFAULT_INT, 0, 0},
+    {"vanilla_demo_limit",          &vanilla_demo_limit, DEFAULT_INT, 0, 0},
 #ifdef FEATURE_MULTIPLAYER
-    {"player_name",                 &net_player_name,          DEFAULT_STRING, 0},
+    {"player_name",                 &net_player_name,          DEFAULT_STRING, 0, 0},
 #endif
 };
 
@@ -410,8 +425,12 @@
                 
                 v = * (int *) defaults[i].location;
 
-                if (defaults[i].untranslated)
+                if (defaults[i].untranslated
+                 && v == defaults[i].original_translated)
                 {
+                    // Has not been changed since the last time we
+                    // read the config file.
+
                     v = defaults[i].untranslated;
                 }
                 else
@@ -539,6 +558,7 @@
                     defaults[i].untranslated = intparm;
                     intparm = scantokey[intparm];
 
+                    defaults[i].original_translated = intparm;
                     * (int *) def->location = intparm;
                     break;