summaryrefslogtreecommitdiff
path: root/apps/settings.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2007-02-08 10:28:42 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2007-02-08 10:28:42 +0000
commitfe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab (patch)
tree996bf94f160d31eb8879295efb3b159ebdea0042 /apps/settings.c
parente645e2dcf2cc03c7e4c9a9d26ac93bbf82e8414b (diff)
downloadrockbox-fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab.zip
rockbox-fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab.tar.gz
rockbox-fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab.tar.bz2
rockbox-fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab.tar.xz
Convert the sound menu to the new system
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12230 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/settings.c')
-rw-r--r--apps/settings.c57
1 files changed, 49 insertions, 8 deletions
diff --git a/apps/settings.c b/apps/settings.c
index 4d4a96c..42a66ac 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -395,7 +395,7 @@ bool settings_load_config(const char* file, bool apply)
/** Writing to a config file and saving settings **/
-static bool cfg_int_to_string(int setting_id, int val, char* buf)
+bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len)
{
const char* start = settings[setting_id].cfg_vals;
char* end = NULL;
@@ -410,11 +410,12 @@ static bool cfg_int_to_string(int setting_id, int val, char* buf)
}
end = strchr(start,',');
if (end == NULL)
- strcpy(buf,start);
+ strncpy(buf, start, buf_len);
else
{
- strncpy(buf, start, end-start);
- buf[end-start] = '\0';
+ int len = (buf_len > (end-start))? end-start: buf_len;
+ strncpy(buf, start, len);
+ buf[len] = '\0';
}
return true;
}
@@ -496,12 +497,13 @@ static bool settings_write_config(char* filename, int options)
}
else
{
- cfg_int_to_string(i,*(int*)settings[i].setting,value);
+ cfg_int_to_string(i, *(int*)settings[i].setting,
+ value, MAX_PATH);
}
break;
case F_T_BOOL:
cfg_int_to_string(i,
- *(bool*)settings[i].setting==false?0:1,value);
+ *(bool*)settings[i].setting==false?0:1, value, MAX_PATH);
break;
case F_T_CHARPTR:
case F_T_UCHARPTR:
@@ -923,13 +925,17 @@ void settings_reset(void) {
}
/** Changing setting values **/
-const struct settings_list* find_setting(void* variable)
+const struct settings_list* find_setting(void* variable, int *id)
{
int i;
for(i=0;i<nb_settings;i++)
{
if (settings[i].setting == variable)
+ {
+ if (id)
+ *id = i;
return &settings[i];
+ }
}
return NULL;
}
@@ -939,7 +945,7 @@ void talk_setting(void *global_settings_variable)
const struct settings_list *setting;
if (global_settings.talk_menu == 0)
return;
- setting = find_setting(global_settings_variable);
+ setting = find_setting(global_settings_variable, NULL);
if (setting == NULL)
return;
if (setting->lang_id)
@@ -1173,6 +1179,37 @@ static bool do_set_setting(const unsigned char* string, void *variable,
return false;
}
+static const char *unit_strings[] =
+{
+ [UNIT_INT]
+ = "",
+ [UNIT_MS]
+ = "ms",
+ [UNIT_SEC]
+ = "s",
+ [UNIT_MIN]
+ = "min",
+ [UNIT_HOUR]
+ = "hr",
+ [UNIT_KHZ]
+ = "KHz",
+ [UNIT_DB]
+ = "dB",
+ [UNIT_PERCENT]
+ = "%",
+ [UNIT_MAH]
+ = "mAh",
+ [UNIT_PIXEL]
+ = "px",
+ [UNIT_PER_SEC]
+ = "per sec",
+ [UNIT_HERTZ]
+ = "Hz",
+ [UNIT_MB]
+ = "MB",
+ [UNIT_KBIT]
+ = "kb/s",
+};
bool set_int(const unsigned char* string,
const char* unit,
int voice_unit,
@@ -1186,12 +1223,16 @@ bool set_int(const unsigned char* string,
#if CONFIG_KEYPAD != PLAYER_PAD
struct value_setting_data data = {
INT,max, step, voice_unit,unit,formatter,NULL };
+ if (unit == NULL)
+ data.unit = unit_strings[voice_unit];
return do_set_setting(string,variable,(max-min)/step + 1,
(max-*variable)/step, &data,function);
#else
int count = (max-min)/step + 1;
struct value_setting_data data = {
INT,min, -step, voice_unit,unit,formatter,NULL };
+ if (unit == NULL)
+ data.unit = unit_strings[voice_unit];
return do_set_setting(string,variable,count,
count - ((max-*variable)/step), &data,function);
#endif