diff --git a/apps/gui/skin_engine/skin_tokens.h b/apps/gui/skin_engine/skin_tokens.h index 9df2137ece..bfca7b7f8d 100644 --- a/apps/gui/skin_engine/skin_tokens.h +++ b/apps/gui/skin_engine/skin_tokens.h @@ -26,18 +26,17 @@ #include "tag_table.h" struct wps_token { - enum skin_token_type type; /* enough to store the token type */ - - /* Whether the tag (e.g. track name or the album) refers the - current or the next song (false=current, true=next) */ - bool next; - union { char c; unsigned short i; long l; void* data; } value; + + enum skin_token_type type; /* enough to store the token type */ + /* Whether the tag (e.g. track name or the album) refers the + current or the next song (false=current, true=next) */ + bool next; }; struct skin_token_list { diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h index c16191c41d..ed09ad0938 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h @@ -135,7 +135,7 @@ struct align_pos { #define WPS_MAX_VIEWPORTS 24 #define WPS_MAX_LINES ((LCD_HEIGHT/5+1) * 2) #define WPS_MAX_SUBLINES (WPS_MAX_LINES*3) -#define WPS_MAX_TOKENS 1024 +#define WPS_MAX_TOKENS 1150 #define WPS_MAX_STRINGS 128 #define STRING_BUFFER_SIZE 1024 #define WPS_MAX_COND_LEVEL 10 diff --git a/lib/skin_parser/skin_parser.h b/lib/skin_parser/skin_parser.h index 6f1af25a05..3e0634976c 100644 --- a/lib/skin_parser/skin_parser.h +++ b/lib/skin_parser/skin_parser.h @@ -86,15 +86,15 @@ struct skin_tag_parameter }; -/* Defines an element of a SKIN file */ +/* Defines an element of a SKIN file, + * + * This is allocated a lot, so it's optimized for size */ struct skin_element { - /* Defines what type of element it is */ - enum skin_element_type type; - - /* The line on which it's defined in the source file */ - int line; - + /* Link to the next element */ + struct skin_element* next; + /* Pointer to an array of children */ + struct skin_element** children; /* Placeholder for element data * TEXT and COMMENT uses it for the text string * TAG, VIEWPORT, LINE, etc may use it for post parse extra storage @@ -104,16 +104,17 @@ struct skin_element /* The tag or conditional name */ const struct tag_info *tag; - /* Pointer to and size of an array of parameters */ - int params_count; + /* Pointer to an array of parameters */ struct skin_tag_parameter* params; - /* Pointer to and size of an array of children */ - int children_count; - struct skin_element** children; - - /* Link to the next element */ - struct skin_element* next; + /* Number of elements in the children array */ + short children_count; + /* The line on which it's defined in the source file */ + short line; + /* Defines what type of element it is */ + enum skin_element_type type; + /* Number of elements in the params array */ + char params_count; }; enum skin_cb_returnvalue