diff options
Diffstat (limited to 'apps/settings.c')
-rw-r--r-- | apps/settings.c | 108 |
1 files changed, 63 insertions, 45 deletions
diff --git a/apps/settings.c b/apps/settings.c index 302ea58aec..ed104d9b82 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -259,6 +259,29 @@ static int hex_to_rgb(const char* hex) | |||
259 | return 0; | 259 | return 0; |
260 | } | 260 | } |
261 | #endif | 261 | #endif |
262 | static bool cfg_int_to_string(int setting_id, int val, char* buf) | ||
263 | { | ||
264 | const char* start = settings[setting_id].cfg_vals; | ||
265 | char* end = NULL; | ||
266 | int count = 0; | ||
267 | while (count < val) | ||
268 | { | ||
269 | start = strchr(start,','); | ||
270 | if (!start) | ||
271 | return false; | ||
272 | count++; | ||
273 | start++; | ||
274 | } | ||
275 | end = strchr(start,','); | ||
276 | if (end == NULL) | ||
277 | strcpy(buf,start); | ||
278 | else | ||
279 | { | ||
280 | strncpy(buf, start, end-start); | ||
281 | buf[end-start] = '\0'; | ||
282 | } | ||
283 | return true; | ||
284 | } | ||
262 | 285 | ||
263 | bool settings_write_config(char* filename) | 286 | bool settings_write_config(char* filename) |
264 | { | 287 | { |
@@ -274,6 +297,7 @@ bool settings_write_config(char* filename) | |||
274 | { | 297 | { |
275 | if (settings[i].cfg_name == NULL) | 298 | if (settings[i].cfg_name == NULL) |
276 | continue; | 299 | continue; |
300 | value[0] = '\0'; | ||
277 | switch (settings[i].flags&F_T_MASK) | 301 | switch (settings[i].flags&F_T_MASK) |
278 | { | 302 | { |
279 | case F_T_INT: | 303 | case F_T_INT: |
@@ -295,36 +319,12 @@ bool settings_write_config(char* filename) | |||
295 | } | 319 | } |
296 | else | 320 | else |
297 | { | 321 | { |
298 | const char *s; | 322 | cfg_int_to_string(i,*(int*)settings[i].setting,value); |
299 | const char *end; | ||
300 | int val = 0; | ||
301 | |||
302 | end = s = settings[i].cfg_vals; | ||
303 | |||
304 | do | ||
305 | { | ||
306 | while (*end != 0 && *end != ',') | ||
307 | { | ||
308 | end++; | ||
309 | } | ||
310 | |||
311 | if (val == *(int*)settings[i].setting) | ||
312 | { | ||
313 | strncpy(value, s, end - s); | ||
314 | value[end - s] = 0; | ||
315 | break; | ||
316 | } | ||
317 | else | ||
318 | { | ||
319 | s = end + 1; | ||
320 | val++; | ||
321 | } | ||
322 | } | ||
323 | while (*end++); | ||
324 | } | 323 | } |
325 | break; | 324 | break; |
326 | case F_T_BOOL: | 325 | case F_T_BOOL: |
327 | strcpy(value,*(bool*)settings[i].setting == true?"on":"off"); | 326 | cfg_int_to_string(i, |
327 | *(bool*)settings[i].setting==false?0:1,value); | ||
328 | break; | 328 | break; |
329 | case F_T_CHARPTR: | 329 | case F_T_CHARPTR: |
330 | case F_T_UCHARPTR: | 330 | case F_T_UCHARPTR: |
@@ -343,7 +343,6 @@ bool settings_write_config(char* filename) | |||
343 | } /* switch () */ | 343 | } /* switch () */ |
344 | if (value[0]) | 344 | if (value[0]) |
345 | fdprintf(fd,"%s: %s\r\n",settings[i].cfg_name,value); | 345 | fdprintf(fd,"%s: %s\r\n",settings[i].cfg_name,value); |
346 | value[0] = '\0'; | ||
347 | } /* for(...) */ | 346 | } /* for(...) */ |
348 | close(fd); | 347 | close(fd); |
349 | return true; | 348 | return true; |
@@ -717,6 +716,36 @@ void set_file(char* filename, char* setting, int maxlen) | |||
717 | 716 | ||
718 | settings_save(); | 717 | settings_save(); |
719 | } | 718 | } |
719 | static bool cfg_string_to_int(int setting_id, int* out, char* str) | ||
720 | { | ||
721 | const char* start = settings[setting_id].cfg_vals; | ||
722 | char* end = NULL; | ||
723 | char temp[MAX_PATH]; | ||
724 | int count = 0; | ||
725 | while (1) | ||
726 | { | ||
727 | end = strchr(start, ','); | ||
728 | if (!end) | ||
729 | { | ||
730 | if (!strcmp(str, start)) | ||
731 | { | ||
732 | *out = count; | ||
733 | return true; | ||
734 | } | ||
735 | else return false; | ||
736 | } | ||
737 | strncpy(temp, start, end-start); | ||
738 | temp[end-start] = '\0'; | ||
739 | if (!strcmp(str, temp)) | ||
740 | { | ||
741 | *out = count; | ||
742 | return true; | ||
743 | } | ||
744 | start = end +1; | ||
745 | count++; | ||
746 | } | ||
747 | return false; | ||
748 | } | ||
720 | 749 | ||
721 | bool settings_load_config(const char* file, bool apply) | 750 | bool settings_load_config(const char* file, bool apply) |
722 | { | 751 | { |
@@ -754,27 +783,16 @@ bool settings_load_config(const char* file, bool apply) | |||
754 | } | 783 | } |
755 | else | 784 | else |
756 | { | 785 | { |
757 | char *s,*end; | 786 | cfg_string_to_int(i,(int*)settings[i].setting,value); |
758 | char vals[MAX_PATH]; | ||
759 | int val = 0; | ||
760 | strncpy(vals,settings[i].cfg_vals,MAX_PATH); | ||
761 | s = strtok_r(vals,",",&end); | ||
762 | while (s) | ||
763 | { | ||
764 | if (!strcmp(value,s)) | ||
765 | { | ||
766 | *(int*)settings[i].setting = val; | ||
767 | break; | ||
768 | } | ||
769 | val++; | ||
770 | s = strtok_r(NULL,",",&end); | ||
771 | } | ||
772 | } | 787 | } |
773 | break; | 788 | break; |
774 | case F_T_BOOL: | 789 | case F_T_BOOL: |
775 | *(bool*)settings[i].setting = | 790 | { |
776 | !strncmp(value,"off",3)?false:true; | 791 | int temp; |
792 | if (cfg_string_to_int(i,&temp,value)) | ||
793 | *(bool*)settings[i].setting = (temp==0?false:true); | ||
777 | break; | 794 | break; |
795 | } | ||
778 | case F_T_CHARPTR: | 796 | case F_T_CHARPTR: |
779 | case F_T_UCHARPTR: | 797 | case F_T_UCHARPTR: |
780 | { | 798 | { |