1
0
Fork 0
forked from len0rd/rockbox

Fixed a number of .cfg loader bugs

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3280 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Björn Stenberg 2003-02-17 09:53:11 +00:00
parent 5eb6384878
commit bda4ec10fc
4 changed files with 95 additions and 65 deletions

View file

@ -762,6 +762,35 @@ static bool settings_parseline(char* line, char** name, char** value)
return true; return true;
} }
void set_file(char* filename, char* setting, int maxlen)
{
char* fptr = strrchr(filename,'/');
int len;
int extlen = 0;
char* ptr;
if (!fptr)
return;
*fptr = 0;
fptr++;
len = strlen(fptr);
ptr = fptr + len;
while (*ptr != '.') {
extlen++;
ptr--;
}
if (strcmp(ROCKBOX_DIR, filename) || (len-extlen > maxlen))
return;
strncpy(setting, fptr, len-extlen);
setting[len-extlen]=0;
settings_save();
}
static void set_sound(char* value, int type, int* setting) static void set_sound(char* value, int type, int* setting)
{ {
int num = atoi(value); int num = atoi(value);
@ -842,12 +871,20 @@ bool settings_load_config(char* file)
set_sound(value, SOUND_TREBLE, &global_settings.treble); set_sound(value, SOUND_TREBLE, &global_settings.treble);
else if (!strcasecmp(name, "balance")) else if (!strcasecmp(name, "balance"))
set_sound(value, SOUND_BALANCE, &global_settings.balance); set_sound(value, SOUND_BALANCE, &global_settings.balance);
else if (!strcasecmp(name, "channels")) else if (!strcasecmp(name, "channels")) {
set_sound(value, SOUND_CHANNELS, &global_settings.channel_config); static char* options[] = {
else if (!strcasecmp(name, "wps")) "stereo","mono","mono left","mono right"};
strncpy(global_settings.wps_file, value, MAX_FILENAME); set_cfg_option(&global_settings.channel_config, value,
else if (!strcasecmp(name, "lang")) options, 4);
strncpy(global_settings.lang_file, value, MAX_FILENAME); }
else if (!strcasecmp(name, "wps")) {
if (wps_load(value,true))
set_file(value, global_settings.wps_file, MAX_FILENAME);
}
else if (!strcasecmp(name, "lang")) {
if (!lang_load(value))
set_file(value, global_settings.lang_file, MAX_FILENAME);
}
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
else if (!strcasecmp(name, "font")) else if (!strcasecmp(name, "font"))
strncpy(global_settings.font_file, value, MAX_FILENAME); strncpy(global_settings.font_file, value, MAX_FILENAME);
@ -884,25 +921,6 @@ bool settings_load_config(char* file)
set_cfg_int(&global_settings.peak_meter_max, value, 0, 100); set_cfg_int(&global_settings.peak_meter_max, value, 0, 100);
else if (!strcasecmp(name, "peak meter busy")) else if (!strcasecmp(name, "peak meter busy"))
set_cfg_bool(&global_settings.peak_meter_performance, value); set_cfg_bool(&global_settings.peak_meter_performance, value);
#endif
else if (!strcasecmp(name, "shuffle"))
set_cfg_bool(&global_settings.playlist_shuffle, value);
else if (!strcasecmp(name, "repeat")) {
static char* options[] = {"off", "all", "one"};
set_cfg_option(&global_settings.repeat_mode, value, options, 3);
}
else if (!strcasecmp(name, "resume"))
set_cfg_int(&global_settings.resume, value, 0, 3);
else if (!strcasecmp(name, "sort case"))
set_cfg_bool(&global_settings.sort_case, value);
else if (!strcasecmp(name, "show files")) {
static char* options[] = {"all", "supported","music"};
set_cfg_option(&global_settings.dirfilter, value, options, 3);
}
else if (!strcasecmp(name, "follow playlist"))
set_cfg_bool(&global_settings.browse_current, value);
else if (!strcasecmp(name, "play selected"))
set_cfg_bool(&global_settings.play_selected, value);
else if (!strcasecmp(name, "volume display")) { else if (!strcasecmp(name, "volume display")) {
static char* options[] = {"graphic", "numeric"}; static char* options[] = {"graphic", "numeric"};
set_cfg_option(&global_settings.volume_type, value, options, 2); set_cfg_option(&global_settings.volume_type, value, options, 2);
@ -915,21 +933,43 @@ bool settings_load_config(char* file)
static char* options[] = {"24hour", "12hour"}; static char* options[] = {"24hour", "12hour"};
set_cfg_option(&global_settings.timeformat, value, options, 2); set_cfg_option(&global_settings.timeformat, value, options, 2);
} }
else if (!strcasecmp(name, "scrollbar"))
set_cfg_bool(&global_settings.scrollbar, value);
#endif
else if (!strcasecmp(name, "shuffle"))
set_cfg_bool(&global_settings.playlist_shuffle, value);
else if (!strcasecmp(name, "repeat")) {
static char* options[] = {"off", "all", "one"};
set_cfg_option(&global_settings.repeat_mode, value, options, 3);
}
else if (!strcasecmp(name, "resume")) {
static char* options[] = {"off", "ask", "ask once", "on"};
set_cfg_option(&global_settings.resume, value, options, 4);
}
else if (!strcasecmp(name, "sort case"))
set_cfg_bool(&global_settings.sort_case, value);
else if (!strcasecmp(name, "show files")) {
static char* options[] = {"all", "supported","music", "playlists"};
set_cfg_option(&global_settings.dirfilter, value, options, 4);
}
else if (!strcasecmp(name, "follow playlist"))
set_cfg_bool(&global_settings.browse_current, value);
else if (!strcasecmp(name, "play selected"))
set_cfg_bool(&global_settings.play_selected, value);
else if (!strcasecmp(name, "contrast")) else if (!strcasecmp(name, "contrast"))
set_cfg_int(&global_settings.contrast, value, set_cfg_int(&global_settings.contrast, value,
0, MAX_CONTRAST_SETTING); 0, MAX_CONTRAST_SETTING);
else if (!strcasecmp(name, "scrollbar"))
set_cfg_bool(&global_settings.scrollbar, value);
else if (!strcasecmp(name, "scroll speed")) else if (!strcasecmp(name, "scroll speed"))
set_cfg_int(&global_settings.scroll_speed, value, 1, 10); set_cfg_int(&global_settings.scroll_speed, value, 1, 10);
else if (!strcasecmp(name, "scan min step")) { else if (!strcasecmp(name, "scan min step")) {
static char* options[] = static char* options[] =
{"1","2","3","4","5","6","8","10","15","20","25"}; {"1","2","3","4","5","6","8","10",
"15","20","25","30","45","60"};
set_cfg_option(&global_settings.ff_rewind_min_step, value, set_cfg_option(&global_settings.ff_rewind_min_step, value,
options, 11); options, 14);
} }
else if (!strcasecmp(name, "scan accel")) else if (!strcasecmp(name, "scan accel"))
set_cfg_int(&global_settings.ff_rewind_min_step, value, 0, 15); set_cfg_int(&global_settings.ff_rewind_accel, value, 0, 15);
else if (!strcasecmp(name, "scroll delay")) else if (!strcasecmp(name, "scroll delay"))
set_cfg_int(&global_settings.scroll_delay, value, 0, 250); set_cfg_int(&global_settings.scroll_delay, value, 0, 250);
else if (!strcasecmp(name, "backlight timeout")) { else if (!strcasecmp(name, "backlight timeout")) {
@ -977,8 +1017,11 @@ bool settings_load_config(char* file)
set_cfg_option(&global_settings.rec_channels, value, options, 2); set_cfg_option(&global_settings.rec_channels, value, options, 2);
} }
#endif #endif
else if (!strcasecmp(name, "poweroff")) else if (!strcasecmp(name, "idle poweroff")) {
set_cfg_int(&global_settings.poweroff, value, 0, 15); static char* options[] = {"off","1","2","3","4","5","6","7","8",
"9","10","15","30","45","60"};
set_cfg_option(&global_settings.poweroff, value, options, 15);
}
else if (!strcasecmp(name, "battery capacity")) else if (!strcasecmp(name, "battery capacity"))
set_cfg_int(&global_settings.battery_capacity, value, set_cfg_int(&global_settings.battery_capacity, value,
1500, BATTERY_CAPACITY_MAX); 1500, BATTERY_CAPACITY_MAX);

View file

@ -171,6 +171,7 @@ bool set_option(char* string, int* variable, char* options[],
bool set_int(char* string, char* unit, int* variable, bool set_int(char* string, char* unit, int* variable,
void (*function)(int), int step, int min, int max ); void (*function)(int), int step, int min, int max );
bool set_time(char* string, int timedate[]); bool set_time(char* string, int timedate[]);
void set_file(char* filename, char* setting, int maxlen);
/* global settings */ /* global settings */
extern struct user_settings global_settings; extern struct user_settings global_settings;

View file

@ -947,26 +947,6 @@ static bool handle_on(int* ds, int* dc, int numentries, int tree_max_on_screen)
return used; return used;
} }
static void storefile(char* filename, char* setting, int maxlen)
{
int len = strlen(filename);
int extlen = 0;
char* ptr = filename + len;
while (*ptr != '.') {
extlen++;
ptr--;
}
if (strcmp(ROCKBOX_DIR, currdir) || (len-extlen > maxlen))
return;
strncpy(setting, filename, len-extlen);
setting[len-extlen]=0;
settings_save();
}
bool dirbrowse(char *root) bool dirbrowse(char *root)
{ {
int numentries=0; int numentries=0;
@ -1117,8 +1097,8 @@ bool dirbrowse(char *root)
/* wps config file */ /* wps config file */
case TREE_ATTR_WPS: case TREE_ATTR_WPS:
wps_load(buf,true); wps_load(buf,true);
storefile(file->name, global_settings.wps_file, set_file(buf, global_settings.wps_file,
MAX_FILENAME); MAX_FILENAME);
restore = true; restore = true;
break; break;
@ -1152,10 +1132,10 @@ bool dirbrowse(char *root)
case TREE_ATTR_LNG: case TREE_ATTR_LNG:
if(!lang_load(buf)) { if(!lang_load(buf)) {
storefile(file->name, set_file(file->name,
global_settings.lang_file, global_settings.lang_file,
MAX_FILENAME); MAX_FILENAME);
lcd_clear_display(); lcd_clear_display();
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
lcd_puts(0, 0, str(LANG_LANGUAGE_LOADED)); lcd_puts(0, 0, str(LANG_LANGUAGE_LOADED));
@ -1179,8 +1159,8 @@ bool dirbrowse(char *root)
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
case TREE_ATTR_FONT: case TREE_ATTR_FONT:
font_load(buf); font_load(buf);
storefile(file->name, global_settings.font_file, set_file(file->name, global_settings.font_file,
MAX_FILENAME); MAX_FILENAME);
lcd_getstringsize("A", &fw, &fh); lcd_getstringsize("A", &fw, &fh);
tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh; tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;

View file

@ -18,23 +18,24 @@ volume (0 - 100)
bass (-15 - 15) bass (-15 - 15)
treble (-15 - 15) treble (-15 - 15)
balance (-100 - 100) balance (-100 - 100)
channels (stereo, mono, mono left, mono right)
shuffle (on, off) shuffle (on, off)
repeat (off, all, one) repeat (off, all, one)
play selected (on, off) play selected (on, off)
resume (off, ask, on) resume (off, ask, ask once, on)
scan min step (1, 2, 3, 4, 5, 6, 8, 10, 15, 20, 25) [seconds] scan min step (1, 2, 3, 4, 5, 6, 8, 10, 15, 20, 25, 30, 45, 60) [seconds]
scan accel (0 - 15) [double scan speed every X seconds] scan accel (0 - 15) [double scan speed every X seconds]
antiskip (0 - 7) [seconds] antiskip (0 - 7) [seconds]
volume fade (on, off) volume fade (on, off)
sort case (on, off) sort case (on, off)
show files (all, supported, music) show files (all, supported, music, playlists)
follow playlist (on, off) follow playlist (on, off)
scroll speed (1 - 10) [Hz] scroll speed (1 - 10) [Hz]
start delay (0 - 250) [1/10s] start delay (0 - 250) [1/10s]
scroll step (1 - 112) [pixel] scroll step (1 - 112) [pixels]
bidir limit (0 - 200) [% of screen width] bidir limit (0 - 200) [% of screen width]
contrast (0 - 63) contrast (0 - 63)
backlight timeout (off, on, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, backlight timeout (off, on, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
@ -42,11 +43,13 @@ backlight timeout (off, on, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
backlight when plugged (on, off) backlight when plugged (on, off)
disk spindown (3 - 254) [seconds] disk spindown (3 - 254) [seconds]
disk poweroff (on, off)
battery capacity (1500 - 2400) [mAh] battery capacity (1500 - 2400) [mAh]
idle poweroff (off, 1, 2, 3, 4, 5, 6, 7, 8, 9, idle poweroff (off, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 15, 30, 45, 60) [minutes] 10, 15, 30, 45, 60) [minutes]
lang (/path/filename.lng)
wps (/path/filename.wps)
Recorder-specific settings (allowed values) [unit] Recorder-specific settings (allowed values) [unit]
--------------------------------------------------- ---------------------------------------------------
loudness (0 - 17) loudness (0 - 17)
@ -66,12 +69,15 @@ peak meter dbfs (on, off) (on = dbfs, off = linear)
peak meter min (0 - 89) [dB] or (0 - 100) [%] peak meter min (0 - 89) [dB] or (0 - 100) [%]
peak meter max (0 - 89) [dB] or (0 - 100) [%] peak meter max (0 - 89) [dB] or (0 - 100) [%]
statusbar (on, off)
scrollbar (on, off)
volume display (graphic, numeric) volume display (graphic, numeric)
battery display (graphic, numeric) battery display (graphic, numeric)
time format (12hour, 24hour) time format (12hour, 24hour)
deep discharge (on, off) deep discharge (on, off)
trickle charge (on, off) trickle charge (on, off)
disk poweroff (on, off)
rec quality (0 - 7) (0=smallest size, 7=highest quality) rec quality (0 - 7) (0=smallest size, 7=highest quality)
rec frequency (48, 44, 32, 24, 22, 16) [kHz] rec frequency (48, 44, 32, 24, 22, 16) [kHz]