Index: apps/gui/gwps-common.c =================================================================== --- apps/gui/gwps-common.c (revision 18432) +++ apps/gui/gwps-common.c (working copy) @@ -26,6 +26,7 @@ #include #include "system.h" #include "settings.h" +#include "settings_list.h" #include "rbunicode.h" #include "rtc.h" #include "audio.h" @@ -1396,6 +1397,53 @@ else return NULL; #endif + + case WPS_TOKEN_SETTING: + { + if (intval) + { + /* Handle contionals */ + const struct settings_list *s = settings+token->value.i; + switch (s->flags&F_T_MASK) + { + case F_T_INT: + case F_T_UINT: + if (s->flags&F_RGB) + /* %?St|name|<#000000|#000001|...|#FFFFFF> */ + /* shouldn't overflow since colors are stored + * on 16 bits ... + * but this is pretty useless anyway */ + *intval = *(int*)s->setting + 1; + else if (s->cfg_vals == NULL) + /* %?St|name|<1st choice|2nd choice|...> */ + *intval = (*(int*)s->setting-s->int_setting->min) + /s->int_setting->step + 1; + else + /* %?St|name|<1st choice|2nd choice|...> */ + /* Not sure about this one. cfg_name/vals are + * indexed from 0 right? */ + *intval = *(int*)s->setting + 1; + break; + case F_T_BOOL: + /* %?St|name| */ + *intval = *(bool*)s->setting?1:2; + break; + case F_T_CHARPTR: + /* %?St|name| + * The string's emptyness discards the setting's + * prefix and suffix */ + *intval = ((char*)s->setting)[0]?1:2; + break; + default: + /* This shouldn't happen ... but you never know */ + *intval = -1; + break; + } + } + cfg_to_string(token->value.i,buf,buf_size); + return buf; + } + default: return NULL; } Index: apps/gui/wps_parser.c =================================================================== --- apps/gui/wps_parser.c (revision 18432) +++ apps/gui/wps_parser.c (working copy) @@ -56,6 +56,7 @@ #include "gwps.h" #include "settings.h" +#include "settings_list.h" #ifdef HAVE_LCD_BITMAP #include "bmp.h" @@ -137,6 +138,8 @@ struct wps_token *token, struct wps_data *wps_data); static int parse_dir_level(const char *wps_bufptr, struct wps_token *token, struct wps_data *wps_data); +static int parse_setting(const char *wps_bufptr, + struct wps_token *token, struct wps_data *wps_data); #ifdef HAVE_LCD_BITMAP static int parse_viewport_display(const char *wps_bufptr, @@ -340,6 +343,8 @@ #endif #endif + { WPS_TOKEN_SETTING, "St", WPS_REFRESH_STATIC, parse_setting }, + { WPS_TOKEN_UNKNOWN, "", 0, NULL } /* the array MUST end with an empty string (first char is \0) */ }; @@ -724,7 +729,40 @@ return skip_end_of_line(wps_bufptr); } +static int parse_setting(const char *wps_bufptr, + struct wps_token *token, + struct wps_data *wps_data) +{ + (void)wps_data; + const char *ptr = wps_bufptr; + const char *end; + int i; + /* Find the setting's cfg_name */ + if (*ptr != '|') + return WPS_ERROR_INVALID_PARAM; + ptr++; + end = strchr(ptr,'|'); + if (!end) + return WPS_ERROR_INVALID_PARAM; + + /* Find the setting */ + for (i=0; ivalue.i = i; + + /* Skip the rest of the line */ + return end-ptr+2; +} + + #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)) static int parse_image_special(const char *wps_bufptr, struct wps_token *token, Index: apps/gui/gwps.h =================================================================== --- apps/gui/gwps.h (revision 18432) +++ apps/gui/gwps.h (working copy) @@ -292,7 +292,10 @@ #endif /* Viewport display */ - WPS_VIEWPORT_ENABLE + WPS_VIEWPORT_ENABLE, + + /* Setting option */ + WPS_TOKEN_SETTING, }; struct wps_token { Index: manual/appendix/wps_tags.tex =================================================================== --- manual/appendix/wps_tags.tex (revision 18432) +++ manual/appendix/wps_tags.tex (working copy) @@ -170,6 +170,15 @@ Example: \config{\%?mp{\textless}Stop{\textbar}Play{\textbar}Pause{\textbar}% Ffwd{\textbar}Rew{\textgreater}} +\section{Settings} +\begin{table} + \begin{tagmap}{}{} + \config{\%St{\textbar}{\textbar}} & Display the value of any Rockbox setting\\ + \end{tagmap} +\end{table} +Example: Can be used as a simple tag \config{\%St{\textbar}skip length{\textbar}} or with conditionals +\config{\%?St{\textbar}eq enabled{\textbar}{\textless}Equalizer is enabled{\textbar}Equalizer is disabled{\textgreater}}. + \section{Images} \begin{table} \begin{tagmap}{}{}