summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2003-02-17 09:53:11 +0000
committerBjörn Stenberg <bjorn@haxx.se>2003-02-17 09:53:11 +0000
commitbda4ec10fcc5a02bf440cc5392f80c958cfd16bd (patch)
tree3751e54753283e004f09c9e54cc014df074a50d4
parent5eb63848781842b09963017a2cae34d3b8c0f00c (diff)
downloadrockbox-bda4ec10fcc5a02bf440cc5392f80c958cfd16bd.tar.gz
rockbox-bda4ec10fcc5a02bf440cc5392f80c958cfd16bd.zip
Fixed a number of .cfg loader bugs
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3280 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/settings.c101
-rw-r--r--apps/settings.h1
-rw-r--r--apps/tree.c36
-rw-r--r--docs/CUSTOM_CFG_FORMAT16
4 files changed, 92 insertions, 62 deletions
diff --git a/apps/settings.c b/apps/settings.c
index 0a00fc71ad..40513bf4b3 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -762,6 +762,35 @@ static bool settings_parseline(char* line, char** name, char** value)
762 return true; 762 return true;
763} 763}
764 764
765void set_file(char* filename, char* setting, int maxlen)
766{
767 char* fptr = strrchr(filename,'/');
768 int len;
769 int extlen = 0;
770 char* ptr;
771
772 if (!fptr)
773 return;
774
775 *fptr = 0;
776 fptr++;
777
778 len = strlen(fptr);
779 ptr = fptr + len;
780 while (*ptr != '.') {
781 extlen++;
782 ptr--;
783 }
784
785 if (strcmp(ROCKBOX_DIR, filename) || (len-extlen > maxlen))
786 return;
787
788 strncpy(setting, fptr, len-extlen);
789 setting[len-extlen]=0;
790
791 settings_save();
792}
793
765static void set_sound(char* value, int type, int* setting) 794static void set_sound(char* value, int type, int* setting)
766{ 795{
767 int num = atoi(value); 796 int num = atoi(value);
@@ -842,12 +871,20 @@ bool settings_load_config(char* file)
842 set_sound(value, SOUND_TREBLE, &global_settings.treble); 871 set_sound(value, SOUND_TREBLE, &global_settings.treble);
843 else if (!strcasecmp(name, "balance")) 872 else if (!strcasecmp(name, "balance"))
844 set_sound(value, SOUND_BALANCE, &global_settings.balance); 873 set_sound(value, SOUND_BALANCE, &global_settings.balance);
845 else if (!strcasecmp(name, "channels")) 874 else if (!strcasecmp(name, "channels")) {
846 set_sound(value, SOUND_CHANNELS, &global_settings.channel_config); 875 static char* options[] = {
847 else if (!strcasecmp(name, "wps")) 876 "stereo","mono","mono left","mono right"};
848 strncpy(global_settings.wps_file, value, MAX_FILENAME); 877 set_cfg_option(&global_settings.channel_config, value,
849 else if (!strcasecmp(name, "lang")) 878 options, 4);
850 strncpy(global_settings.lang_file, value, MAX_FILENAME); 879 }
880 else if (!strcasecmp(name, "wps")) {
881 if (wps_load(value,true))
882 set_file(value, global_settings.wps_file, MAX_FILENAME);
883 }
884 else if (!strcasecmp(name, "lang")) {
885 if (!lang_load(value))
886 set_file(value, global_settings.lang_file, MAX_FILENAME);
887 }
851#ifdef HAVE_LCD_BITMAP 888#ifdef HAVE_LCD_BITMAP
852 else if (!strcasecmp(name, "font")) 889 else if (!strcasecmp(name, "font"))
853 strncpy(global_settings.font_file, value, MAX_FILENAME); 890 strncpy(global_settings.font_file, value, MAX_FILENAME);
@@ -884,6 +921,20 @@ bool settings_load_config(char* file)
884 set_cfg_int(&global_settings.peak_meter_max, value, 0, 100); 921 set_cfg_int(&global_settings.peak_meter_max, value, 0, 100);
885 else if (!strcasecmp(name, "peak meter busy")) 922 else if (!strcasecmp(name, "peak meter busy"))
886 set_cfg_bool(&global_settings.peak_meter_performance, value); 923 set_cfg_bool(&global_settings.peak_meter_performance, value);
924 else if (!strcasecmp(name, "volume display")) {
925 static char* options[] = {"graphic", "numeric"};
926 set_cfg_option(&global_settings.volume_type, value, options, 2);
927 }
928 else if (!strcasecmp(name, "battery display")) {
929 static char* options[] = {"graphic", "numeric"};
930 set_cfg_option(&global_settings.battery_type, value, options, 2);
931 }
932 else if (!strcasecmp(name, "time format")) {
933 static char* options[] = {"24hour", "12hour"};
934 set_cfg_option(&global_settings.timeformat, value, options, 2);
935 }
936 else if (!strcasecmp(name, "scrollbar"))
937 set_cfg_bool(&global_settings.scrollbar, value);
887#endif 938#endif
888 else if (!strcasecmp(name, "shuffle")) 939 else if (!strcasecmp(name, "shuffle"))
889 set_cfg_bool(&global_settings.playlist_shuffle, value); 940 set_cfg_bool(&global_settings.playlist_shuffle, value);
@@ -891,45 +942,34 @@ bool settings_load_config(char* file)
891 static char* options[] = {"off", "all", "one"}; 942 static char* options[] = {"off", "all", "one"};
892 set_cfg_option(&global_settings.repeat_mode, value, options, 3); 943 set_cfg_option(&global_settings.repeat_mode, value, options, 3);
893 } 944 }
894 else if (!strcasecmp(name, "resume")) 945 else if (!strcasecmp(name, "resume")) {
895 set_cfg_int(&global_settings.resume, value, 0, 3); 946 static char* options[] = {"off", "ask", "ask once", "on"};
947 set_cfg_option(&global_settings.resume, value, options, 4);
948 }
896 else if (!strcasecmp(name, "sort case")) 949 else if (!strcasecmp(name, "sort case"))
897 set_cfg_bool(&global_settings.sort_case, value); 950 set_cfg_bool(&global_settings.sort_case, value);
898 else if (!strcasecmp(name, "show files")) { 951 else if (!strcasecmp(name, "show files")) {
899 static char* options[] = {"all", "supported","music"}; 952 static char* options[] = {"all", "supported","music", "playlists"};
900 set_cfg_option(&global_settings.dirfilter, value, options, 3); 953 set_cfg_option(&global_settings.dirfilter, value, options, 4);
901 } 954 }
902 else if (!strcasecmp(name, "follow playlist")) 955 else if (!strcasecmp(name, "follow playlist"))
903 set_cfg_bool(&global_settings.browse_current, value); 956 set_cfg_bool(&global_settings.browse_current, value);
904 else if (!strcasecmp(name, "play selected")) 957 else if (!strcasecmp(name, "play selected"))
905 set_cfg_bool(&global_settings.play_selected, value); 958 set_cfg_bool(&global_settings.play_selected, value);
906 else if (!strcasecmp(name, "volume display")) {
907 static char* options[] = {"graphic", "numeric"};
908 set_cfg_option(&global_settings.volume_type, value, options, 2);
909 }
910 else if (!strcasecmp(name, "battery display")) {
911 static char* options[] = {"graphic", "numeric"};
912 set_cfg_option(&global_settings.battery_type, value, options, 2);
913 }
914 else if (!strcasecmp(name, "time format")) {
915 static char* options[] = {"24hour", "12hour"};
916 set_cfg_option(&global_settings.timeformat, value, options, 2);
917 }
918 else if (!strcasecmp(name, "contrast")) 959 else if (!strcasecmp(name, "contrast"))
919 set_cfg_int(&global_settings.contrast, value, 960 set_cfg_int(&global_settings.contrast, value,
920 0, MAX_CONTRAST_SETTING); 961 0, MAX_CONTRAST_SETTING);
921 else if (!strcasecmp(name, "scrollbar"))
922 set_cfg_bool(&global_settings.scrollbar, value);
923 else if (!strcasecmp(name, "scroll speed")) 962 else if (!strcasecmp(name, "scroll speed"))
924 set_cfg_int(&global_settings.scroll_speed, value, 1, 10); 963 set_cfg_int(&global_settings.scroll_speed, value, 1, 10);
925 else if (!strcasecmp(name, "scan min step")) { 964 else if (!strcasecmp(name, "scan min step")) {
926 static char* options[] = 965 static char* options[] =
927 {"1","2","3","4","5","6","8","10","15","20","25"}; 966 {"1","2","3","4","5","6","8","10",
967 "15","20","25","30","45","60"};
928 set_cfg_option(&global_settings.ff_rewind_min_step, value, 968 set_cfg_option(&global_settings.ff_rewind_min_step, value,
929 options, 11); 969 options, 14);
930 } 970 }
931 else if (!strcasecmp(name, "scan accel")) 971 else if (!strcasecmp(name, "scan accel"))
932 set_cfg_int(&global_settings.ff_rewind_min_step, value, 0, 15); 972 set_cfg_int(&global_settings.ff_rewind_accel, value, 0, 15);
933 else if (!strcasecmp(name, "scroll delay")) 973 else if (!strcasecmp(name, "scroll delay"))
934 set_cfg_int(&global_settings.scroll_delay, value, 0, 250); 974 set_cfg_int(&global_settings.scroll_delay, value, 0, 250);
935 else if (!strcasecmp(name, "backlight timeout")) { 975 else if (!strcasecmp(name, "backlight timeout")) {
@@ -977,8 +1017,11 @@ bool settings_load_config(char* file)
977 set_cfg_option(&global_settings.rec_channels, value, options, 2); 1017 set_cfg_option(&global_settings.rec_channels, value, options, 2);
978 } 1018 }
979#endif 1019#endif
980 else if (!strcasecmp(name, "poweroff")) 1020 else if (!strcasecmp(name, "idle poweroff")) {
981 set_cfg_int(&global_settings.poweroff, value, 0, 15); 1021 static char* options[] = {"off","1","2","3","4","5","6","7","8",
1022 "9","10","15","30","45","60"};
1023 set_cfg_option(&global_settings.poweroff, value, options, 15);
1024 }
982 else if (!strcasecmp(name, "battery capacity")) 1025 else if (!strcasecmp(name, "battery capacity"))
983 set_cfg_int(&global_settings.battery_capacity, value, 1026 set_cfg_int(&global_settings.battery_capacity, value,
984 1500, BATTERY_CAPACITY_MAX); 1027 1500, BATTERY_CAPACITY_MAX);
diff --git a/apps/settings.h b/apps/settings.h
index bfdf12b593..6f127e05dc 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -171,6 +171,7 @@ bool set_option(char* string, int* variable, char* options[],
171bool set_int(char* string, char* unit, int* variable, 171bool set_int(char* string, char* unit, int* variable,
172 void (*function)(int), int step, int min, int max ); 172 void (*function)(int), int step, int min, int max );
173bool set_time(char* string, int timedate[]); 173bool set_time(char* string, int timedate[]);
174void set_file(char* filename, char* setting, int maxlen);
174 175
175/* global settings */ 176/* global settings */
176extern struct user_settings global_settings; 177extern struct user_settings global_settings;
diff --git a/apps/tree.c b/apps/tree.c
index d39c279763..d8ecfb243e 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -947,26 +947,6 @@ static bool handle_on(int* ds, int* dc, int numentries, int tree_max_on_screen)
947 return used; 947 return used;
948} 948}
949 949
950static void storefile(char* filename, char* setting, int maxlen)
951{
952 int len = strlen(filename);
953 int extlen = 0;
954 char* ptr = filename + len;
955
956 while (*ptr != '.') {
957 extlen++;
958 ptr--;
959 }
960
961 if (strcmp(ROCKBOX_DIR, currdir) || (len-extlen > maxlen))
962 return;
963
964 strncpy(setting, filename, len-extlen);
965 setting[len-extlen]=0;
966
967 settings_save();
968}
969
970bool dirbrowse(char *root) 950bool dirbrowse(char *root)
971{ 951{
972 int numentries=0; 952 int numentries=0;
@@ -1117,8 +1097,8 @@ bool dirbrowse(char *root)
1117 /* wps config file */ 1097 /* wps config file */
1118 case TREE_ATTR_WPS: 1098 case TREE_ATTR_WPS:
1119 wps_load(buf,true); 1099 wps_load(buf,true);
1120 storefile(file->name, global_settings.wps_file, 1100 set_file(buf, global_settings.wps_file,
1121 MAX_FILENAME); 1101 MAX_FILENAME);
1122 restore = true; 1102 restore = true;
1123 break; 1103 break;
1124 1104
@@ -1152,10 +1132,10 @@ bool dirbrowse(char *root)
1152 1132
1153 case TREE_ATTR_LNG: 1133 case TREE_ATTR_LNG:
1154 if(!lang_load(buf)) { 1134 if(!lang_load(buf)) {
1155 storefile(file->name, 1135 set_file(file->name,
1156 global_settings.lang_file, 1136 global_settings.lang_file,
1157 MAX_FILENAME); 1137 MAX_FILENAME);
1158 1138
1159 lcd_clear_display(); 1139 lcd_clear_display();
1160#ifdef HAVE_LCD_CHARCELLS 1140#ifdef HAVE_LCD_CHARCELLS
1161 lcd_puts(0, 0, str(LANG_LANGUAGE_LOADED)); 1141 lcd_puts(0, 0, str(LANG_LANGUAGE_LOADED));
@@ -1179,8 +1159,8 @@ bool dirbrowse(char *root)
1179#ifdef HAVE_LCD_BITMAP 1159#ifdef HAVE_LCD_BITMAP
1180 case TREE_ATTR_FONT: 1160 case TREE_ATTR_FONT:
1181 font_load(buf); 1161 font_load(buf);
1182 storefile(file->name, global_settings.font_file, 1162 set_file(file->name, global_settings.font_file,
1183 MAX_FILENAME); 1163 MAX_FILENAME);
1184 1164
1185 lcd_getstringsize("A", &fw, &fh); 1165 lcd_getstringsize("A", &fw, &fh);
1186 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh; 1166 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
diff --git a/docs/CUSTOM_CFG_FORMAT b/docs/CUSTOM_CFG_FORMAT
index 3bb599f1e2..845a9df8c4 100644
--- a/docs/CUSTOM_CFG_FORMAT
+++ b/docs/CUSTOM_CFG_FORMAT
@@ -18,23 +18,24 @@ volume (0 - 100)
18bass (-15 - 15) 18bass (-15 - 15)
19treble (-15 - 15) 19treble (-15 - 15)
20balance (-100 - 100) 20balance (-100 - 100)
21channels (stereo, mono, mono left, mono right)
21 22
22shuffle (on, off) 23shuffle (on, off)
23repeat (off, all, one) 24repeat (off, all, one)
24play selected (on, off) 25play selected (on, off)
25resume (off, ask, on) 26resume (off, ask, ask once, on)
26scan min step (1, 2, 3, 4, 5, 6, 8, 10, 15, 20, 25) [seconds] 27scan min step (1, 2, 3, 4, 5, 6, 8, 10, 15, 20, 25, 30, 45, 60) [seconds]
27scan accel (0 - 15) [double scan speed every X seconds] 28scan accel (0 - 15) [double scan speed every X seconds]
28antiskip (0 - 7) [seconds] 29antiskip (0 - 7) [seconds]
29volume fade (on, off) 30volume fade (on, off)
30 31
31sort case (on, off) 32sort case (on, off)
32show files (all, supported, music) 33show files (all, supported, music, playlists)
33follow playlist (on, off) 34follow playlist (on, off)
34 35
35scroll speed (1 - 10) [Hz] 36scroll speed (1 - 10) [Hz]
36start delay (0 - 250) [1/10s] 37start delay (0 - 250) [1/10s]
37scroll step (1 - 112) [pixel] 38scroll step (1 - 112) [pixels]
38bidir limit (0 - 200) [% of screen width] 39bidir limit (0 - 200) [% of screen width]
39contrast (0 - 63) 40contrast (0 - 63)
40backlight timeout (off, on, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 41backlight 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,
42backlight when plugged (on, off) 43backlight when plugged (on, off)
43 44
44disk spindown (3 - 254) [seconds] 45disk spindown (3 - 254) [seconds]
45disk poweroff (on, off)
46battery capacity (1500 - 2400) [mAh] 46battery capacity (1500 - 2400) [mAh]
47idle poweroff (off, 1, 2, 3, 4, 5, 6, 7, 8, 9, 47idle poweroff (off, 1, 2, 3, 4, 5, 6, 7, 8, 9,
48 10, 15, 30, 45, 60) [minutes] 48 10, 15, 30, 45, 60) [minutes]
49 49
50lang (/path/filename.lng)
51wps (/path/filename.wps)
52
50Recorder-specific settings (allowed values) [unit] 53Recorder-specific settings (allowed values) [unit]
51--------------------------------------------------- 54---------------------------------------------------
52loudness (0 - 17) 55loudness (0 - 17)
@@ -66,12 +69,15 @@ peak meter dbfs (on, off) (on = dbfs, off = linear)
66peak meter min (0 - 89) [dB] or (0 - 100) [%] 69peak meter min (0 - 89) [dB] or (0 - 100) [%]
67peak meter max (0 - 89) [dB] or (0 - 100) [%] 70peak meter max (0 - 89) [dB] or (0 - 100) [%]
68 71
72statusbar (on, off)
73scrollbar (on, off)
69volume display (graphic, numeric) 74volume display (graphic, numeric)
70battery display (graphic, numeric) 75battery display (graphic, numeric)
71time format (12hour, 24hour) 76time format (12hour, 24hour)
72 77
73deep discharge (on, off) 78deep discharge (on, off)
74trickle charge (on, off) 79trickle charge (on, off)
80disk poweroff (on, off)
75 81
76rec quality (0 - 7) (0=smallest size, 7=highest quality) 82rec quality (0 - 7) (0=smallest size, 7=highest quality)
77rec frequency (48, 44, 32, 24, 22, 16) [kHz] 83rec frequency (48, 44, 32, 24, 22, 16) [kHz]