Reverting parts of r19760 that was mistakenly committed.
[kugel-rb.git] / apps / plugins / settings_dumper.c
blobb9acdcf5fca4eead42983cd0d5925a5c09288231
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: helloworld.c 17847 2008-06-28 18:10:04Z bagder $
10 * Copyright (C) 2002 Björn Stenberg
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
21 #include "plugin.h"
23 PLUGIN_HEADER
25 static const struct plugin_api* rb;
26 #define FILENAME "/settings_dumper.txt"
27 static int setting_count = 0;
29 static void write_setting(const struct settings_list *setting, int fd, unsigned int group)
31 char text[1024];
32 if (setting->cfg_name == NULL)
33 return;
34 if (group && (setting->flags&group) == 0) /* not in the group we are dumping */
35 return;
36 else if (!group && (setting->flags&(F_THEMESETTING|
37 F_RECSETTING|
38 F_EQSETTING|
39 F_SOUNDSETTING)))
40 return;
41 setting_count++;
42 if (setting_count%10 == 0)
43 rb->fdprintf(fd, "\r\n");
44 switch (setting->flags&F_T_MASK)
46 case F_T_CUSTOM:
47 rb->strcpy(text, "No information available. Check the manual for valid values");
48 break;
49 case F_T_INT:
50 case F_T_UINT:
51 if (setting->flags&F_RGB)
52 rb->strcpy(text, "RGB colour value in the form RRGGBB (in hexadecimal)");
53 else if (setting->flags&F_T_SOUND)
54 rb->snprintf(text, sizeof(text), "Min: %d, Max %d",
55 rb->sound_min(setting->sound_setting->setting),
56 rb->sound_max(setting->sound_setting->setting));
57 else if (setting->flags&F_TABLE_SETTING)
59 char temp[8];
60 int i;
61 rb->snprintf(text, sizeof(text), "Setting allows the following values%s: ",
62 setting->flags&F_ALLOW_ARBITRARY_VALS? " (And any value between)":"");
63 for(i=0;i<setting->table_setting->count;i++)
65 rb->snprintf(temp, 8, "%d, ",
66 setting->table_setting->values[i]);
67 rb->strcat(text, temp);
70 else if (setting->flags&F_INT_SETTING)
72 int min = setting->int_setting->min,
73 max = setting->int_setting->max,
74 step = setting->int_setting->step;
75 rb->snprintf(text, sizeof(text), "Min: %d, Max: %d, Step size: %d",
76 min, max, step);
78 else if (setting->flags&F_CHOICE_SETTING &&
79 (setting->cfg_vals == NULL))
81 char temp[64];
82 int i;
83 temp[0] = '\0';
84 for(i=0;i<setting->choice_setting->count;i++)
86 rb->snprintf(temp, 64, "%s, ",
87 setting->choice_setting->desc[i]);
88 rb->strcat(text, temp);
91 else if (setting->cfg_vals != NULL)
93 rb->snprintf(text, sizeof(text), "%s", setting->cfg_vals);
95 break; /* F_T_*INT */
96 case F_T_BOOL:
97 rb->snprintf(text, sizeof(text), "on, off");
98 break;
99 case F_T_CHARPTR:
100 case F_T_UCHARPTR:
101 rb->snprintf(text, sizeof(text), "Text.. Up to %d characters. ",
102 setting->filename_setting->max_len-1);
103 if (setting->filename_setting->prefix &&
104 setting->filename_setting->suffix)
106 rb->strcat(text, "Should start with:\"");
107 rb->strcat(text, setting->filename_setting->prefix);
108 rb->strcat(text, "\" and end with:\"");
109 rb->strcat(text, setting->filename_setting->suffix);
110 rb->strcat(text, "\"");
112 break;
114 rb->fdprintf(fd, "%s: %s\r\n", setting->cfg_name, text);
119 /* this is the plugin entry point */
120 enum plugin_status plugin_start(const struct plugin_api* api,
121 const void* parameter)
123 const struct settings_list *list;
124 int setting_count, i;
125 int fd;
126 (void)parameter;
127 rb = api;
129 fd = rb->open(FILENAME, O_CREAT|O_TRUNC|O_WRONLY);
130 if (fd < 0)
131 return PLUGIN_ERROR;
132 list = rb->get_settings_list(&setting_count);
133 rb->fdprintf(fd, "# .cfg file created by rockbox %s - "
134 "http://www.rockbox.org\r\n\r\n", rb->appsversion);
136 rb->fdprintf(fd, "# -- Sound settings -- #\r\n");
137 for(i=0;i<setting_count;i++)
138 write_setting(&list[i], fd, F_SOUNDSETTING);
140 rb->fdprintf(fd, "\r\n\r\n# -- Theme settings -- #\r\n");
141 for(i=0;i<setting_count;i++)
142 write_setting(&list[i], fd, F_THEMESETTING);
143 #ifdef HAVE_RECORDING
144 rb->fdprintf(fd, "\r\n\r\n# -- Recording settings -- #\r\n");
145 for(i=0;i<setting_count;i++)
146 write_setting(&list[i], fd, F_RECSETTING);
147 #endif
148 rb->fdprintf(fd, "\r\n\r\n# -- EQ settings -- #\r\n");
149 for(i=0;i<setting_count;i++)
150 write_setting(&list[i], fd, F_EQSETTING);
152 rb->fdprintf(fd, "\r\n\r\n# -- Other settings -- #\r\n");
153 for(i=0;i<setting_count;i++)
154 write_setting(&list[i], fd, 0);
156 rb->fdprintf(fd, "\r\n\r\n# Total settings count: %d\r\n", setting_count);
157 rb->close(fd);
158 rb->splash(HZ, "Done!");
159 return PLUGIN_OK;