diff options
author | Steve Bavin <pondlife@pondlife.me> | 2008-03-25 15:24:03 +0000 |
---|---|---|
committer | Steve Bavin <pondlife@pondlife.me> | 2008-03-25 15:24:03 +0000 |
commit | cd88e2ad93881c9516c7c712b628b42450506f4f (patch) | |
tree | 90a5787cde4baddfdd6a6bb02285c7267671a855 /apps | |
parent | 222994f180a7cc6582864df8d13d1fb456e1d4f0 (diff) | |
download | rockbox-cd88e2ad93881c9516c7c712b628b42450506f4f.tar.gz rockbox-cd88e2ad93881c9516c7c712b628b42450506f4f.zip |
Code police raid on the settings code, consting and putting headers alongside their implementation.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16798 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/gui/option_select.h | 1 | ||||
-rw-r--r-- | apps/menu.c | 2 | ||||
-rw-r--r-- | apps/menus/settings_menu.c | 3 | ||||
-rw-r--r-- | apps/plugin.h | 27 | ||||
-rw-r--r-- | apps/settings.c | 141 | ||||
-rw-r--r-- | apps/settings.h | 51 | ||||
-rw-r--r-- | apps/talk.c | 14 | ||||
-rw-r--r-- | apps/talk.h | 1 |
8 files changed, 158 insertions, 82 deletions
diff --git a/apps/gui/option_select.h b/apps/gui/option_select.h index e46570f303..fa2f3660b6 100644 --- a/apps/gui/option_select.h +++ b/apps/gui/option_select.h @@ -65,4 +65,5 @@ extern void option_select_next(struct option_select * opt); */ extern void option_select_prev(struct option_select * opt); + #endif /* _GUI_OPTION_SELECT_H_ */ diff --git a/apps/menu.c b/apps/menu.c index 6ab57ad061..2c2e4ab0d0 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -275,7 +275,7 @@ static int talk_menu_item(int selected_item, void *data) } return 0; } -#define MAX_OPTIONS 32 + bool do_setting_from_menu(const struct menu_item_ex *temp) { int setting_id; diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c index 08fd071a36..c55695333c 100644 --- a/apps/menus/settings_menu.c +++ b/apps/menus/settings_menu.c @@ -41,6 +41,9 @@ #if CONFIG_TUNER #include "radio.h" #endif +#if CONFIG_RTC
+#include "screens.h"
+#endif
/***********************************/ /* TAGCACHE MENU */ diff --git a/apps/plugin.h b/apps/plugin.h index 57624739c7..1283751fe9 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -119,12 +119,12 @@ #define PLUGIN_MAGIC 0x526F634B /* RocK */ /* increase this every time the api struct changes */ -#define PLUGIN_API_VERSION 101 +#define PLUGIN_API_VERSION 102 /* update this to latest version if a change to the api struct breaks backwards compatibility (and please take the opportunity to sort in any new function which are "waiting" at the end of the function table) */ -#define PLUGIN_MIN_API_VERSION 101 +#define PLUGIN_MIN_API_VERSION 102 /* plugin return codes */ enum plugin_status { @@ -562,20 +562,21 @@ struct plugin_api { void (*gui_syncstatusbar_draw)(struct gui_syncstatusbar * bars, bool force_redraw); /* options */ - const struct settings_list* (*find_setting)(void* variable, int *id); + const struct settings_list* (*find_setting)(const void* variable, int *id); bool (*option_screen)(struct settings_list *setting, bool use_temp_var, unsigned char* option_title); - bool (*set_option)(const char* string, void* variable, - enum optiontype type, const struct opt_items* options, - int numoptions, void (*function)(int)); - bool (*set_bool_options)(const char* string, bool* variable, - const char* yes_str, int yes_voice, - const char* no_str, int no_voice, + bool (*set_option)(const char* string, const void* variable, + const enum optiontype type, const struct opt_items* options, + const int numoptions, void (*function)(int)); + bool (*set_bool_options)(const char* string, const bool* variable, + const char* yes_str, const int yes_voice, + const char* no_str, const int no_voice, void (*function)(bool)); - bool (*set_int)(const unsigned char* string, const char* unit, int voice_unit, - int* variable, void (*function)(int), int step, int min, - int max, void (*formatter)(char*, size_t, int, const char*) ); - bool (*set_bool)(const char* string, bool* variable ); + bool (*set_int)(const unsigned char* string, const char* unit, const int voice_unit, + const int* variable, void (*function)(int), const int step, + const int min, const int max, + void (*formatter)(char*, size_t, int, const char*) ); + bool (*set_bool)(const char* string, const bool* variable ); #ifdef HAVE_LCD_COLOR bool (*set_color)(struct screen *display, char *title, unsigned *color, diff --git a/apps/settings.c b/apps/settings.c index 449a38b96f..9374c2e372 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -7,7 +7,7 @@ * \/ \/ \/ \/ \/ * $Id$ * - * Copyright (C) 2002 by wavey@wavey.org + * Copyright (C) 2002 by Stuart Martin * RTC config saving code (C) 2002 by hessu@hes.iki.fi * * All files in this archive are subject to the GNU General Public License. @@ -62,6 +62,7 @@ #include "list.h" #include "settings_list.h" #include "filetypes.h" +#include "option_select.h" #if (LCD_DEPTH > 1) || (defined(HAVE_LCD_REMOTE) && (LCD_REMOTE_DEPTH > 1)) #include "backdrop.h" @@ -112,7 +113,7 @@ long lasttime = 0; #define NVRAM_FILE ROCKBOX_DIR "/nvram.bin" static char nvram_buffer[NVRAM_BLOCK_SIZE]; -static bool read_nvram_data(char* buf, int max_len) +static bool read_nvram_data(char* buf, const int max_len) { unsigned crc32 = 0xffffffff; int var_count = 0, i = 0, buf_pos = 0; @@ -162,7 +163,7 @@ static bool read_nvram_data(char* buf, int max_len) } return true; } -static bool write_nvram_data(char* buf, int max_len) +static bool write_nvram_data(char* buf, const int max_len) { unsigned crc32 = 0xffffffff; int i = 0, buf_pos = 0; @@ -220,7 +221,7 @@ static bool write_nvram_data(char* buf, int max_len) /* * load settings from disk or RTC RAM */ -void settings_load(int which) +void settings_load(const int which) { DEBUGF( "reload_all_settings()\n" ); if (which&SETTINGS_RTC) @@ -232,7 +233,7 @@ void settings_load(int which) } } -static bool cfg_string_to_int(int setting_id, int* out, char* str) +static bool cfg_string_to_int(const int setting_id, int* out, const char* str) { const char* start = settings[setting_id].cfg_vals; char* end = NULL; @@ -263,7 +264,7 @@ static bool cfg_string_to_int(int setting_id, int* out, char* str) return false; } -bool settings_load_config(const char* file, bool apply) +bool settings_load_config(const char* file, const bool apply) { int fd; char line[128]; @@ -361,7 +362,7 @@ bool settings_load_config(const char* file, bool apply) /** Writing to a config file and saving settings **/ -bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len) +bool cfg_int_to_string(const int setting_id, const int val, char* buf, const int buf_len) { int flags = settings[setting_id].flags; const char* start = settings[setting_id].cfg_vals; @@ -416,7 +417,9 @@ bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len) } return true; } -static bool is_changed(int setting_id) + + +static bool is_changed(const int setting_id) { const struct settings_list *setting = &settings[setting_id]; switch (setting->flags&F_T_MASK) @@ -450,7 +453,7 @@ static bool is_changed(int setting_id) return true; } -static bool settings_write_config(char* filename, int options) +static bool settings_write_config(const char* filename, const int options) { int i; int fd; @@ -581,7 +584,7 @@ static void update_runtime(void) global_status.topruntime = global_status.runtime; } -void status_save( void ) +void status_save(void) { update_runtime(); #ifdef HAVE_RTC_RAM @@ -593,7 +596,7 @@ void status_save( void ) #endif } -int settings_save( void ) +int settings_save(void) { update_runtime(); #ifdef HAVE_RTC_RAM @@ -604,7 +607,8 @@ int settings_save( void ) register_ata_idle_func(flush_config_block_callback); return 0; } -bool settings_save_config(int options) + +bool settings_save_config(const int options) { char filename[MAX_PATH]; char *folder; @@ -714,7 +718,7 @@ void sound_settings_apply(void) #endif } -void settings_apply(bool read_disk) +void settings_apply(const bool read_disk) { char buf[64]; #if CONFIG_CODEC == SWCODEC @@ -945,8 +949,8 @@ void settings_apply(bool read_disk) /* * reset all settings to their default value */ -void settings_reset(void) { - +void settings_reset(void) +{ int i; DEBUGF( "settings_reset()\n" ); @@ -979,7 +983,7 @@ void settings_reset(void) { } /** Changing setting values **/ -const struct settings_list* find_setting(void* variable, int *id) +const struct settings_list* find_setting(const void* variable, int *id) { int i; for(i=0;i<nb_settings;i++) @@ -994,19 +998,7 @@ const struct settings_list* find_setting(void* variable, int *id) return NULL; } -void talk_setting(void *global_settings_variable) -{ - const struct settings_list *setting; - if (!global_settings.talk_menu) - return; - setting = find_setting(global_settings_variable, NULL); - if (setting == NULL) - return; - if (setting->lang_id) - talk_id(setting->lang_id,false); -} - -bool set_bool(const char* string, bool* variable ) +bool set_bool(const char* string, const bool* variable ) { return set_bool_options(string, variable, (char *)STR(LANG_SET_BOOL_YES), @@ -1015,14 +1007,14 @@ bool set_bool(const char* string, bool* variable ) } -bool set_bool_options(const char* string, bool* variable, - const char* yes_str, int yes_voice, - const char* no_str, int no_voice, +bool set_bool_options(const char* string, const bool* variable, + const char* yes_str, const int yes_voice, + const char* no_str, const int no_voice, void (*function)(bool)) { struct opt_items names[] = { - {(unsigned char *)no_str, no_voice}, - {(unsigned char *)yes_str, yes_voice} + {(unsigned const char *)no_str, no_voice}, + {(unsigned const char *)yes_str, yes_voice} }; bool result; @@ -1033,22 +1025,89 @@ bool set_bool_options(const char* string, bool* variable, bool set_int(const unsigned char* string, const char* unit, - int voice_unit, - int* variable, + const int voice_unit, + const int* variable, void (*function)(int), - int step, - int min, - int max, + const int step, + const int min, + const int max, void (*formatter)(char*, size_t, int, const char*) ) { return set_int_ex(string, unit, voice_unit, variable, function, step, min, max, formatter, NULL); } +bool set_int_ex(const unsigned char* string, + const char* unit, + const int voice_unit, + const int* variable, + void (*function)(int), + const int step, + const int min, + const int max, + void (*formatter)(char*, size_t, int, const char*), + int32_t (*get_talk_id)(int, int)) +{ + (void)unit; + struct settings_list item; + struct int_setting data = { + function, voice_unit, min, max, step, + formatter, get_talk_id + }; + item.int_setting = &data; + item.flags = F_INT_SETTING|F_T_INT; + item.lang_id = -1; + item.cfg_vals = (char*)string; + item.setting = (void *)variable; + return option_screen(&item, false, NULL); +} + + +static const struct opt_items *set_option_options; +static void set_option_formatter(char* buf, size_t size, int item, const char* unit) +{ + (void)unit; + const unsigned char *text = set_option_options[item].string; + snprintf(buf, size, "%s", P2STR(text)); +} +static int32_t set_option_get_talk_id(int value, int unit) +{ + (void)unit; + return set_option_options[value].voice_id; +} +bool set_option(const char* string, const void* variable, const enum optiontype type, + const struct opt_items* options, + const int numoptions, void (*function)(int)) +{ + int temp; + struct settings_list item; + struct int_setting data = { + function, UNIT_INT, 0, numoptions-1, 1, + set_option_formatter, set_option_get_talk_id + }; + set_option_options = options; + item.int_setting = &data; + item.flags = F_INT_SETTING|F_T_INT; + item.lang_id = -1; + item.cfg_vals = (char*)string; + item.setting = &temp; + if (type == BOOL) + temp = *(bool*)variable? 1: 0; + else + temp = *(int*)variable; + if (!option_screen(&item, false, NULL)) + { + if (type == BOOL) + *(bool*)variable = (temp == 1? true: false); + else + *(int*)variable = temp; + return false; + } + return true; +} -/** extra stuff which is probably misplaced **/ -void set_file(char* filename, char* setting, int maxlen) +void set_file(const char* filename, char* setting, const int maxlen) { char* fptr = strrchr(filename,'/'); int len; diff --git a/apps/settings.h b/apps/settings.h index 1a2c2ee444..3523bca0dd 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -7,7 +7,7 @@ * \/ \/ \/ \/ \/ * $Id$ * - * Copyright (C) 2002 by wavey@wavey.org + * Copyright (C) 2002 by Stuart Martin * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. @@ -195,10 +195,10 @@ extern unsigned char vp_dummy[VIRT_SIZE]; #define SETTINGS_RTC 1 /* only the settings from the RTC nonvolatile RAM */ #define SETTINGS_HD 2 /* only the settings from the disk sector */ #define SETTINGS_ALL 3 /* both */ -void settings_load(int which); -bool settings_load_config(const char* file, bool apply); +void settings_load(const int which); +bool settings_load_config(const char* file, const bool apply); -void status_save( void ); +void status_save(void); int settings_save(void); /* defines for the options paramater */ enum { @@ -213,44 +213,41 @@ enum { SETTINGS_SAVE_EQPRESET, #endif }; -bool settings_save_config(int options); +bool settings_save_config(const int options); void settings_reset(void); void sound_settings_apply(void); -void settings_apply(bool read_disk); +void settings_apply(const bool read_disk); void settings_apply_pm_range(void); void settings_display(void); enum optiontype { INT, BOOL }; -const struct settings_list* find_setting(void* variable, int *id); -bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len); -void talk_setting(void *global_settings_variable); -bool set_sound(const unsigned char * string, - int* variable, int setting); -bool set_bool_options(const char* string, bool* variable, - const char* yes_str, int yes_voice, - const char* no_str, int no_voice, +const struct settings_list* find_setting(const void* variable, int *id); +bool cfg_int_to_string(const int setting_id, const int val, char* buf, const int buf_len); +bool set_bool_options(const char* string, const bool* variable, + const char* yes_str, const int yes_voice, + const char* no_str, const int no_voice, void (*function)(bool)); -bool set_bool(const char* string, bool* variable ); -bool set_option(const char* string, void* variable, enum optiontype type, - const struct opt_items* options, int numoptions, void (*function)(int)); -bool set_int(const unsigned char* string, const char* unit, int voice_unit, - int* variable, - void (*function)(int), int step, int min, int max, +bool set_bool(const char* string, const bool* variable); +bool set_int(const unsigned char* string, const char* unit, const int voice_unit, + const int* variable, + void (*function)(int), const int step, const int min, const int max, void (*formatter)(char*, size_t, int, const char*) ); + /* use this one if you need to create a lang from the value (i.e with TALK_ID()) */ -bool set_int_ex(const unsigned char* string, const char* unit, int voice_unit, - int* variable, - void (*function)(int), int step, int min, int max, +bool set_int_ex(const unsigned char* string, const char* unit, const int voice_unit, + const int* variable, + void (*function)(int), const int step, const int min, const int max, void (*formatter)(char*, size_t, int, const char*), int32_t (*get_talk_id)(int, int)); -/* the following are either not in setting.c or shouldnt be */ -bool set_time_screen(const char* string, struct tm *tm); -int read_line(int fd, char* buffer, int buffer_size); -void set_file(char* filename, char* setting, int maxlen); +void set_file(const char* filename, char* setting, const int maxlen); + +bool set_option(const char* string, const void* variable, const enum optiontype type, + const struct opt_items* options, const int numoptions, void (*function)(int)); + /** global_settings and global_status struct definitions **/ diff --git a/apps/talk.c b/apps/talk.c index a4f253dadc..8286ff61c8 100644 --- a/apps/talk.c +++ b/apps/talk.c @@ -29,6 +29,7 @@ #include "system.h" #include "kernel.h" #include "settings.h" +#include "settings_list.h" #include "mp3_playback.h" #include "audio.h" #include "lang.h" @@ -876,6 +877,19 @@ void talk_disable(bool disable) talk_temp_disable_count--; } +void talk_setting(const void *global_settings_variable) +{ + const struct settings_list *setting; + if (!global_settings.talk_menu) + return; + setting = find_setting(global_settings_variable, NULL); + if (setting == NULL) + return; + if (setting->lang_id) + talk_id(setting->lang_id,false); +} + + #if CONFIG_RTC void talk_date(struct tm *tm, bool enqueue) { diff --git a/apps/talk.h b/apps/talk.h index af74af6edd..97b8c5889b 100644 --- a/apps/talk.h +++ b/apps/talk.h @@ -78,6 +78,7 @@ int talk_file(const char* filename, bool enqueue); /* play a thumbnail from file int talk_number(long n, bool enqueue); /* say a number */ int talk_value(long n, int unit, bool enqueue); /* say a numeric value */ int talk_spell(const char* spell, bool enqueue); /* spell a string */ +void talk_setting(const void *global_settings_variable); /* read a setting */ void talk_disable(bool disable); /* temporarily disable (or re-enable) talking (temporarily, not persisted) */ void talk_force_shutup(void); /* kill voice unconditionally */ void talk_shutup(void); /* Interrupt voice, as when enqueue is false */ |