summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/settings.c108
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
262static 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
263bool settings_write_config(char* filename) 286bool 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}
719static 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
721bool settings_load_config(const char* file, bool apply) 750bool 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 {