summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Howard2006-10-23 18:32:26 +0000
committerSimon Howard2006-10-23 18:32:26 +0000
commit3e9f69932d1d7a42561cf903f4024e2cc1662ef9 (patch)
treeb2c5c8d6a7c40c9f80ce97524b6cce9439c0d71c
parentd57d467f53271502ebace92a3ff958ca695cd8e9 (diff)
downloadchocolate-doom-3e9f69932d1d7a42561cf903f4024e2cc1662ef9.tar.gz
chocolate-doom-3e9f69932d1d7a42561cf903f4024e2cc1662ef9.tar.bz2
chocolate-doom-3e9f69932d1d7a42561cf903f4024e2cc1662ef9.zip
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
-rw-r--r--setup/configfile.c126
-rw-r--r--src/m_misc.c128
2 files changed, 147 insertions, 107 deletions
diff --git a/setup/configfile.c b/setup/configfile.c
index 82a7963b..f37eb40c 100644
--- a/setup/configfile.c
+++ b/setup/configfile.c
@@ -151,10 +151,25 @@ typedef enum
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 @@ typedef struct
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},
-
- {"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_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},
-
- {"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_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},
-
- {"screenblocks",&screenblocks, DEFAULT_INT, 0},
- {"detaillevel",&detailLevel, DEFAULT_INT, 0},
-
- {"snd_channels",&numChannels, DEFAULT_INT, 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},
-
- {"usegamma", &usegamma, 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, 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, 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, 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, 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, 0},
+ {"detaillevel",&detailLevel, DEFAULT_INT, 0, 0},
+
+ {"snd_channels",&numChannels, DEFAULT_INT, 0, 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, 0},
{"chatmacro0", &chat_macros[0], DEFAULT_STRING, 0 },
{"chatmacro1", &chat_macros[1], DEFAULT_STRING, 0 },
@@ -229,17 +244,17 @@ static default_collection_t doom_defaults =
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 @@ static void SaveDefaultCollection(default_collection_t *collection)
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 @@ static void LoadDefaultCollection(default_collection_t *collection)
defaults[i].untranslated = intparm;
intparm = scantokey[intparm];
+ defaults[i].original_translated = intparm;
* (int *) def->location = intparm;
break;
diff --git a/src/m_misc.c b/src/m_misc.c
index 9f346212..bcf06f41 100644
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -253,10 +253,25 @@ typedef enum
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 @@ typedef struct
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},
-
- {"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_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},
-
- {"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_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},
-
- {"screenblocks",&screenblocks, DEFAULT_INT, 0},
- {"detaillevel",&detailLevel, DEFAULT_INT, 0},
-
- {"snd_channels",&numChannels, DEFAULT_INT, 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},
-
- {"usegamma", &usegamma, 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, 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, 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, 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, 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, 0},
+ {"detaillevel",&detailLevel, DEFAULT_INT, 0, 0},
+
+ {"snd_channels",&numChannels, DEFAULT_INT, 0, 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, 0},
{"chatmacro0", &chat_macros[0], DEFAULT_STRING, 0 },
{"chatmacro1", &chat_macros[1], DEFAULT_STRING, 0 },
@@ -331,19 +346,19 @@ static default_collection_t doom_defaults =
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 @@ static void SaveDefaultCollection(default_collection_t *collection)
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 @@ static void LoadDefaultCollection(default_collection_t *collection)
defaults[i].untranslated = intparm;
intparm = scantokey[intparm];
+ defaults[i].original_translated = intparm;
* (int *) def->location = intparm;
break;