New way of defining menus and options allows to declare them static const, which saves the code to runtime-assemble them. Rockbox just got 6 KB smaller.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4931 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/menu.c b/apps/menu.c
index e47523d..72e4289 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -33,6 +33,7 @@
 #include "status.h"
 #include "screens.h"
 #include "talk.h"
+#include "lang.h"
 
 #ifdef HAVE_LCD_BITMAP
 #include "icons.h"
@@ -177,12 +178,12 @@
 #ifdef HAVE_LCD_BITMAP
             if (global_settings.invert_cursor)
                 lcd_puts_scroll_style(LINE_X, i-menus[m].top,
-                                       menus[m].items[i].desc, STYLE_INVERT);
+                                       P2STR(menus[m].items[i].desc), STYLE_INVERT);
             else
 #endif
-                lcd_puts_scroll(LINE_X, i-menus[m].top, menus[m].items[i].desc);
+                lcd_puts_scroll(LINE_X, i-menus[m].top, P2STR(menus[m].items[i].desc));
         else
-            lcd_puts(LINE_X, i-menus[m].top, menus[m].items[i].desc);
+            lcd_puts(LINE_X, i-menus[m].top, P2STR(menus[m].items[i].desc));
     }
 
     /* place the cursor */
@@ -216,13 +217,13 @@
     /* "say" the entry under the cursor */
     if(global_settings.talk_menu)
     {
-        voice_id = menus[m].items[menus[m].cursor].voice_id;
+        voice_id = P2ID(menus[m].items[menus[m].cursor].desc);
         if (voice_id >= 0) /* valid ID given? */
             talk_id(voice_id, false); /* say it */
     }
 }
 
-int menu_init(struct menu_item* mitems, int count, int (*callback)(int, int),
+int menu_init(const struct menu_item* mitems, int count, int (*callback)(int, int),
               char *button1, char *button2, char *button3)
 {
     int i;
@@ -237,7 +238,7 @@
         DEBUGF("Out of menus!\n");
         return -1;
     }
-    menus[i].items = mitems;
+    menus[i].items = (struct menu_item*)mitems; /* de-const */
     menus[i].itemcount = count;
     menus[i].top = 0;
     menus[i].cursor = 0;
@@ -417,7 +418,7 @@
 
 char* menu_description(int menu, int position)
 {
-    return menus[menu].items[position].desc;
+    return P2STR(menus[menu].items[position].desc);
 }
 
 /*  
@@ -440,8 +441,7 @@
         menus[menu].cursor = menus[menu].itemcount - 1;
 }
 
-void menu_insert(int menu, int position, char *desc, int voice_id,
-                 bool (*function) (void))
+void menu_insert(int menu, int position, char *desc, bool (*function) (void))
 {
     int i;
 
@@ -457,7 +457,6 @@
     
     /* Update the current item */
     menus[menu].items[position].desc = desc;
-    menus[menu].items[position].voice_id = voice_id;
     menus[menu].items[position].function = function;
 }