diff --git a/src/ui/menu_defs.inc b/src/ui/menu_defs.inc
index 9e33e458d..9f1555e60 100644
--- a/src/ui/menu_defs.inc
+++ b/src/ui/menu_defs.inc
@@ -1698,8 +1698,409 @@ global Menu Menus[] = {
 	NULL,
     },
 };
+
+/**
+**	Initialize the old style menu data
+*/
+local void InitOldMenuData(void)
+{
+    // There go all my Gnuish compile time inits -
+    // Why is ANSI C so dumb that it cannot
+    // even initialize unions sanely?
+    InitGameMenuItems();
+    InitVictoryMenuItems();
+    InitLostMenuItems();
+    InitTipsMenuItems();
+    InitObjectivesMenuItems();
+    InitEndScenarioMenuItems();
+    InitScenSelectMenuItems();
+    InitPrgStartMenuItems();
+    InitCustomGameMenuItems();
+    InitEnterNameMenuItems();
+    InitEnterServerIPMenuItems();
+    InitNetCreateJoinMenuItems();
+    InitNetMultiSetupMenuItems();
+    InitNetMultiClientMenuItems();
+    InitNetErrorMenuItems();
+    InitConnectingMenuItems();
+    InitCampaignSelectMenuItems();
+    InitCampaignContMenuItems();
+    InitSoundOptionsMenuItems();
+    InitPreferencesMenuItems();
+    InitSpeedSettingsMenuItems();
+    InitGameOptionsMenuItems();
+    InitHelpMenuItems();
+    InitKeystrokeHelpMenuItems();
+    InitSaveGameMenuItems();
+    InitLoadGameMenuItems();
+    InitConfirmSaveMenuItems();
+    InitConfirmDeleteMenuItems();
+    InitEditorSelectMenuItems();
+    InitEditorLoadMapMenuItems();
+    InitEditorMenuItems();
+    InitEditorMapPropertiesMenuItems();
+    InitEditorPlayerPropertiesMenuItems();
+
+    *(Menu **)hash_add(MenuHash,"menu-game") = Menus + 0;
+    *(Menu **)hash_add(MenuHash,"menu-victory") = Menus + 1;
+    *(Menu **)hash_add(MenuHash,"menu-defeated") = Menus + 2;
+    *(Menu **)hash_add(MenuHash,"menu-select-scenario") = Menus + 3;
+    *(Menu **)hash_add(MenuHash,"menu-program-start") = Menus + 4;
+    *(Menu **)hash_add(MenuHash,"menu-custom-game") = Menus + 5;
+    *(Menu **)hash_add(MenuHash,"menu-enter-name") = Menus + 6;
+    *(Menu **)hash_add(MenuHash,"menu-create-join-menu") = Menus + 7;
+    *(Menu **)hash_add(MenuHash,"menu-multi-setup") = Menus + 8;
+    *(Menu **)hash_add(MenuHash,"menu-enter-server") = Menus + 9;
+    *(Menu **)hash_add(MenuHash,"menu-net-multi-client") = Menus + 10;
+    *(Menu **)hash_add(MenuHash,"menu-net-connecting") = Menus + 11;
+    *(Menu **)hash_add(MenuHash,"menu-campaign-select") = Menus + 12;
+    *(Menu **)hash_add(MenuHash,"menu-campaign-continue") = Menus + 13;
+    *(Menu **)hash_add(MenuHash,"menu-objectives") = Menus + 14;
+    *(Menu **)hash_add(MenuHash,"menu-end-scenario") = Menus + 15;
+    *(Menu **)hash_add(MenuHash,"menu-sound-options") = Menus + 16;
+    *(Menu **)hash_add(MenuHash,"menu-preferences") = Menus + 17;
+    *(Menu **)hash_add(MenuHash,"menu-settings-speed") = Menus + 18;
+    *(Menu **)hash_add(MenuHash,"menu-game-options") = Menus + 19;
+    *(Menu **)hash_add(MenuHash,"menu-net-error") = Menus + 20;
+    *(Menu **)hash_add(MenuHash,"menu-tips") = Menus + 21;
+    *(Menu **)hash_add(MenuHash,"menu-help") = Menus + 22;
+    *(Menu **)hash_add(MenuHash,"menu-keystroke-help") = Menus + 23;
+    *(Menu **)hash_add(MenuHash,"menu-save-game") = Menus + 24;
+    *(Menu **)hash_add(MenuHash,"menu-load-game") = Menus + 25;
+    *(Menu **)hash_add(MenuHash,"menu-save-confirm") = Menus + 26;
+    *(Menu **)hash_add(MenuHash,"menu-delete-confirm") = Menus + 27;
+    *(Menu **)hash_add(MenuHash,"menu-editor-select") = Menus + 28;
+    *(Menu **)hash_add(MenuHash,"menu-editor-load-map") = Menus + 29;
+    *(Menu **)hash_add(MenuHash,"menu-editor") = Menus + 30;
+    *(Menu **)hash_add(MenuHash,"menu-editor-map-properties") = Menus + 31;
+    *(Menu **)hash_add(MenuHash,"menu-editor-player-properties") = Menus + 32;
+}
 #endif	/// OLD_MENU
 
+
+#ifdef SAVE_MENU_CCL
+char *menu_names[] = {
+    "menu-game",
+    "menu-victory",
+    "menu-defeated",
+    "menu-select-scenario",
+    "menu-program-start",
+    "menu-global-options",
+    "menu-custom-game",
+    "menu-enter-name",
+    "menu-create-join-menu",
+    "menu-multi-setup",
+    "menu-enter-server",
+    "menu-net-multi-client",
+    "menu-net-connecting",
+    "menu-campaign-select",
+    "menu-campaign-continue",
+    "menu-objectives",
+    "menu-end-scenario",
+    "menu-sound-options",
+    "menu-preferences",
+    "menu-settings-speed",
+    "menu-game-options",
+    "menu-net-error",
+    "menu-tips",
+    "menu-help",
+    "menu-keystroke-help",
+    "menu-save-game",
+    "menu-load-game",
+    "menu-save-confirm",
+    "menu-delete-confirm",
+    "menu-editor-select",
+    "menu-editor-load-map",
+    "menu-editor",
+    "menu-editor-map-properties",
+    "menu-editor-player-properties",
+};
+
+char *menu_flags[] = {
+    "",
+    "'flags '(active)",
+    "'flags '(clicked)",
+    "",
+    "'flags '(selected)",
+    "",
+    "",
+    "",
+    "'flags '(disabled)",
+};
+
+char *images[] = {
+    "none",
+    "panel1",
+    "panel2",
+    "panel3",
+    "panel4",
+    "panel5",
+};
+
+char *font_names[] = {
+    "small",
+    "game",
+    "large",
+    "smallTitle",
+    "largeTitle",
+};
+
+char *text_flags[] = {
+    "none",
+    "center",
+    "right",
+    "",
+    "left",
+};
+
+char *gem_state[] = {
+    "unchecked",
+    "passive",
+    "invisible",
+    "",
+    "checked",
+};
+
+local char *hotkey2str(int key, char *buf)
+{
+    if (!key) {
+	buf[0] = '\0';
+    } else if (('a' <= key && key <= 'z') || ('A' <= key && key <= 'Z')) {
+	buf[0] = key;
+	buf[1] = '\0';
+    } else if (KeyCodeF1 <= key && key <= KeyCodeF12) {
+	buf[0] = 'f';
+	if (key >= KeyCodeF10) {
+	    buf[1] = '1';
+	    buf[2] = key-10-KeyCodeF1+1 + '0';
+	    buf[3] = '\0';
+	} else {
+	    buf[1] = key-KeyCodeF1+1 + '0';
+	    buf[2] = '\0';
+	}
+    } else if (key == '\033') {
+	strcpy(buf,"esc");
+    }
+    return buf;
+}
+
+local char *button_style(int style)
+{
+    switch (style) {
+	case MBUTTON_MAIN:
+	    return "main";
+	case MBUTTON_GM_HALF:
+	    return "gm-half";
+	case MBUTTON_132:
+	    return "132";
+	case MBUTTON_GM_FULL:
+	    return "gm-full";
+	case MBUTTON_GEM_ROUND:
+	    return "gem-round";
+	case MBUTTON_GEM_SQUARE:
+	    return "gem-square";
+	case MBUTTON_UP_ARROW:
+	    return "up-arrow";
+	case MBUTTON_DOWN_ARROW:
+	    return "down-arrow";
+	case MBUTTON_LEFT_ARROW:
+	    return "left-arrow";
+	case MBUTTON_RIGHT_ARROW:
+	    return "right-arrow";
+	case MBUTTON_S_KNOB:
+	    return "s-knob";
+	case MBUTTON_S_VCONT:
+	    return "s-vcont";
+	case MBUTTON_S_HCONT:
+	    return "s-hcont";
+	case MBUTTON_PULLDOWN:
+	    return "pulldown";
+	case MBUTTON_VTHIN:
+	    return "vthin";
+	case MBUTTON_FOLDER:
+	    return "folder";
+    }
+    fprintf(stderr,"button_style not found: %d\n", style);
+    return "";
+}
+
+global void SaveMenus(FILE* file)
+{
+    Menu *menu;
+    int i, j, n;
+    int OffsetX, OffsetY;
+    char hotkey[10];
+    char func[10];
+    char func2[10];
+    char func3[10];
+    char initfunc[40];
+    char exitfunc[40];
+    char netaction[40];
+
+    OffsetX = (VideoWidth - 640) / 2;
+    OffsetY = (VideoHeight - 480) / 2;
+
+    fprintf(file,"\n;;; -----------------------------------------\n");
+    fprintf(file,";;; $Id$\n\n");
+
+    for (i=0; i<sizeof(menu_names)/sizeof(*menu_names); ++i) {
+	menu = FindMenu(menu_names[i]);
+	if (!menu) {
+	    abort();
+	}
+	fprintf(file,";;\n;; %s\n;;\n", menu_names[i]);
+	if (menu->netaction) {
+	    sprintf(func,"%p",menu->netaction);
+	    sprintf(netaction," 'netaction '%s",(char*)hash_find(MenuFuncHash2,func));
+	} else {
+	    netaction[0] = '\0';
+	}
+	fprintf(file,"(define-menu 'name '%s 'geometry '(%d %d %d %d)\n"
+		     "    'image '%s 'default '%d%s)\n",
+		     menu_names[i],
+		     menu->x - OffsetX, menu->y - OffsetY,
+		     menu->xsize, menu->ysize,
+		     images[menu->image],
+		     menu->defsel,
+		     netaction);
+	for (j=0; j<menu->nitems; ++j) {
+	    if (menu->items[j].initfunc) {
+		sprintf(func,"%p",menu->items[j].initfunc);
+		sprintf(initfunc," 'init '%s",(char*)hash_find(MenuFuncHash2,func));
+	    } else {
+		initfunc[0] = '\0';
+	    }
+	    if (menu->items[j].exitfunc) {
+		sprintf(func,"%p",menu->items[j].exitfunc);
+		sprintf(exitfunc," 'exit '%s",(char*)hash_find(MenuFuncHash2,func));
+	    } else {
+		exitfunc[0] = '\0';
+	    }
+
+	    fprintf(file,"(define-menu-item 'pos (list %d %d) 'font '%s %s%s%s\n",
+			 menu->items[j].xofs, menu->items[j].yofs,
+			 font_names[menu->items[j].font],
+			 menu_flags[menu->items[j].flags],
+			 initfunc,
+			 exitfunc);
+	    switch (menu->items[j].mitype) {
+		case MI_TYPE_TEXT:
+		    fprintf(file,"    'text '(\"%s\" %s)\n",
+			    menu->items[j].d.text.text ? (char*)menu->items[j].d.text.text : "null",
+			    text_flags[menu->items[j].d.text.tflags]);
+		    break;
+		case MI_TYPE_BUTTON:
+		    sprintf(func,"%p",menu->items[j].d.button.handler);
+		    fprintf(file,"    'button '(size (%d %d)\n"
+			         "            caption \"%s\"\n"
+				 "            hotkey \"%s\"\n"
+				 "            func %s\n"
+				 "            style %s)\n",
+				 menu->items[j].d.button.xsize,
+				 menu->items[j].d.button.ysize,
+				 menu->items[j].d.button.text ? menu->items[j].d.button.text : "null",
+				 hotkey2str(menu->items[j].d.button.hotkey,hotkey),
+				 (char*)hash_find(MenuFuncHash2,func),
+				 button_style(menu->items[j].d.button.button));
+		    break;
+		case MI_TYPE_PULLDOWN:
+		    sprintf(func,"%p",menu->items[j].d.pulldown.action);
+		    fprintf(file,"    'pulldown '(size (%d %d)\n"
+			         "              style %s\n"
+				 "              func %s\n",
+				 menu->items[j].d.pulldown.xsize,
+				 menu->items[j].d.pulldown.ysize,
+				 button_style(menu->items[j].d.pulldown.button),
+				 (char*)hash_find(MenuFuncHash2,func));
+		    fprintf(file,"              options (");
+		    for (n=0; n<menu->items[j].d.pulldown.noptions; ++n) {
+			fprintf(file,"\"%s\" ", menu->items[j].d.pulldown.options[n]);
+		    }
+
+		    fprintf(file,")\n"
+				 "              default %d\n"
+				 "              current %d)\n",
+				 menu->items[j].d.pulldown.defopt,
+				 menu->items[j].d.pulldown.curopt);
+		    break;
+		case MI_TYPE_LISTBOX:
+		    sprintf(func,"%p",menu->items[j].d.listbox.action);
+		    sprintf(func2,"%p",menu->items[j].d.listbox.retrieveopt);
+		    sprintf(func3,"%p",menu->items[j].d.listbox.handler);
+		    fprintf(file,"    'listbox '(size (%d %d)\n"
+				 "             style %s\n"
+				 "             func %s\n"
+				 "             retopt %s\n"
+				 "             handler %s\n"
+				 "             nlines %d)\n",
+				 menu->items[j].d.listbox.xsize,
+				 menu->items[j].d.listbox.ysize,
+				 button_style(menu->items[j].d.listbox.button),
+				 (char*)hash_find(MenuFuncHash2,func),
+				 (char*)hash_find(MenuFuncHash2,func2),
+				 (char*)hash_find(MenuFuncHash2,func3),
+				 menu->items[j].d.listbox.nlines);
+		    break;
+		case MI_TYPE_VSLIDER:
+		    sprintf(func,"%p",menu->items[j].d.vslider.action);
+		    sprintf(func2,"%p",menu->items[j].d.vslider.handler);
+		    fprintf(file,"    'vslider '(size (%d %d)\n"
+			         "             func %s\n"
+				 "             handler %s)\n",
+				 menu->items[j].d.vslider.xsize,
+				 menu->items[j].d.vslider.ysize,
+				 (char*)hash_find(MenuFuncHash2,func),
+				 (char*)hash_find(MenuFuncHash2,func2));
+		    break;
+		case MI_TYPE_DRAWFUNC:
+		    sprintf(func,"%p",menu->items[j].d.drawfunc.draw);
+		    fprintf(file,"    'drawfunc '%s\n",
+			         (char*)hash_find(MenuFuncHash2,func));
+		    break;
+		case MI_TYPE_INPUT:
+		    sprintf(func,"%p",menu->items[j].d.input.action);
+		    fprintf(file,"    'input '(size (%d %d)\n"
+			         "           func %s\n"
+				 "           style %s)\n",
+				 menu->items[j].d.input.xsize,
+				 menu->items[j].d.input.ysize,
+				 (char*)hash_find(MenuFuncHash2,func),
+				 button_style(menu->items[j].d.input.button));
+		    break;
+		case MI_TYPE_GEM:
+		    sprintf(func,"%p",menu->items[j].d.gem.action);
+		    fprintf(file,"    'gem '(size (%d %d)\n"
+			         "         state %s\n"
+				 "         func %s\n"
+				 "         style %s)\n",
+				 menu->items[j].d.gem.xsize,
+				 menu->items[j].d.gem.ysize,
+				 gem_state[menu->items[j].d.gem.state],
+				 (char*)hash_find(MenuFuncHash2,func),
+				 button_style(menu->items[j].d.gem.button));
+		    break;
+		case MI_TYPE_HSLIDER:
+		    sprintf(func,"%p",menu->items[j].d.hslider.action);
+		    sprintf(func2,"%p",menu->items[j].d.hslider.handler);
+		    fprintf(file,"    'hslider '(size (%d %d)\n"
+			         "             func %s\n"
+				 "             handler %s)\n",
+				 menu->items[j].d.hslider.xsize,
+				 menu->items[j].d.hslider.ysize,
+				 (char*)hash_find(MenuFuncHash2,func),
+				 (char*)hash_find(MenuFuncHash2,func2));
+		    break;
+		default:
+		    abort();
+	    }
+	    fprintf(file,"    'menu '%s)\n",menu_names[i]);
+	}
+	fprintf(file,"\n\n");
+    }
+}
+#endif /// SAVE_MENU_CCL
+
+
 /// Offsets into NetMultiSetupMenuItems
 #define SERVER_PLAYER_STATE	5
 #define SERVER_PLAYER_READY	30
diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp
index 3ecaf4bad..149cba975 100644
--- a/src/ui/menus.cpp
+++ b/src/ui/menus.cpp
@@ -255,8 +255,6 @@ local void EditorEnterMapDescriptionAction(Menuitem *mi, int key);
 local void EditorMapPropertiesOk(void);
 local void EditorQuitMenu(void);
 
-global void SaveMenus(FILE* file);
-
 /*----------------------------------------------------------------------------
 --	Variables
 ----------------------------------------------------------------------------*/
@@ -4847,84 +4845,15 @@ local void MoveButtons(void)
 global void InitMenuData(void)
 {
 #ifdef OLD_MENU
-    // There go all my Gnuish compile time inits -
-    // Why is ANSI C so dumb that it cannot
-    // even initialize unions sanely?
-    InitGameMenuItems();
-    InitVictoryMenuItems();
-    InitLostMenuItems();
-    InitTipsMenuItems();
-    InitObjectivesMenuItems();
-    InitEndScenarioMenuItems();
-    InitScenSelectMenuItems();
-    InitPrgStartMenuItems();
-    InitCustomGameMenuItems();
-    InitEnterNameMenuItems();
-    InitEnterServerIPMenuItems();
-    InitNetCreateJoinMenuItems();
-    InitNetMultiSetupMenuItems();
-    InitNetMultiClientMenuItems();
-    InitNetErrorMenuItems();
-    InitConnectingMenuItems();
-    InitCampaignSelectMenuItems();
-    InitCampaignContMenuItems();
-    InitSoundOptionsMenuItems();
-    InitPreferencesMenuItems();
-    InitSpeedSettingsMenuItems();
-    InitGameOptionsMenuItems();
-    InitHelpMenuItems();
-    InitKeystrokeHelpMenuItems();
-    InitSaveGameMenuItems();
-    InitLoadGameMenuItems();
-    InitConfirmSaveMenuItems();
-    InitConfirmDeleteMenuItems();
-    InitEditorSelectMenuItems();
-    InitEditorLoadMapMenuItems();
-    InitEditorMenuItems();
-    InitEditorMapPropertiesMenuItems();
-    InitEditorPlayerPropertiesMenuItems();
+    InitOldMenuData();
 #endif
+
+    // FIXME: Get rid of this..
     InitNetMultiButtonStorage();
 
     if (VideoWidth != 640) {
 	MoveButtons();
     }
-
-#ifdef OLD_MENU
-    *(Menu **)hash_add(MenuHash,"menu-game") = Menus + 0;
-    *(Menu **)hash_add(MenuHash,"menu-victory") = Menus + 1;
-    *(Menu **)hash_add(MenuHash,"menu-defeated") = Menus + 2;
-    *(Menu **)hash_add(MenuHash,"menu-select-scenario") = Menus + 3;
-    *(Menu **)hash_add(MenuHash,"menu-program-start") = Menus + 4;
-    *(Menu **)hash_add(MenuHash,"menu-custom-game") = Menus + 5;
-    *(Menu **)hash_add(MenuHash,"menu-enter-name") = Menus + 6;
-    *(Menu **)hash_add(MenuHash,"menu-create-join-menu") = Menus + 7;
-    *(Menu **)hash_add(MenuHash,"menu-multi-setup") = Menus + 8;
-    *(Menu **)hash_add(MenuHash,"menu-enter-server") = Menus + 9;
-    *(Menu **)hash_add(MenuHash,"menu-net-multi-client") = Menus + 10;
-    *(Menu **)hash_add(MenuHash,"menu-net-connecting") = Menus + 11;
-    *(Menu **)hash_add(MenuHash,"menu-campaign-select") = Menus + 12;
-    *(Menu **)hash_add(MenuHash,"menu-campaign-continue") = Menus + 13;
-    *(Menu **)hash_add(MenuHash,"menu-objectives") = Menus + 14;
-    *(Menu **)hash_add(MenuHash,"menu-end-scenario") = Menus + 15;
-    *(Menu **)hash_add(MenuHash,"menu-sound-options") = Menus + 16;
-    *(Menu **)hash_add(MenuHash,"menu-preferences") = Menus + 17;
-    *(Menu **)hash_add(MenuHash,"menu-settings-speed") = Menus + 18;
-    *(Menu **)hash_add(MenuHash,"menu-game-options") = Menus + 19;
-    *(Menu **)hash_add(MenuHash,"menu-net-error") = Menus + 20;
-    *(Menu **)hash_add(MenuHash,"menu-tips") = Menus + 21;
-    *(Menu **)hash_add(MenuHash,"menu-help") = Menus + 22;
-    *(Menu **)hash_add(MenuHash,"menu-keystroke-help") = Menus + 23;
-    *(Menu **)hash_add(MenuHash,"menu-save-game") = Menus + 24;
-    *(Menu **)hash_add(MenuHash,"menu-load-game") = Menus + 25;
-    *(Menu **)hash_add(MenuHash,"menu-save-confirm") = Menus + 26;
-    *(Menu **)hash_add(MenuHash,"menu-delete-confirm") = Menus + 27;
-    *(Menu **)hash_add(MenuHash,"menu-editor-select") = Menus + 28;
-    *(Menu **)hash_add(MenuHash,"menu-editor-load-map") = Menus + 29;
-    *(Menu **)hash_add(MenuHash,"menu-editor") = Menus + 30;
-    *(Menu **)hash_add(MenuHash,"menu-editor-map-properties") = Menus + 31;
-    *(Menu **)hash_add(MenuHash,"menu-editor-player-properties") = Menus + 32;
-#endif
 }
 
 /**
@@ -4970,326 +4899,4 @@ global void InitMenuFunctions(void)
 #endif
 }
 
-#ifdef SAVE_MENU_CCL
-char *menu_names[] = {
-    "menu-game",
-    "menu-victory",
-    "menu-defeated",
-    "menu-select-scenario",
-    "menu-program-start",
-    "menu-global-options",
-    "menu-custom-game",
-    "menu-enter-name",
-    "menu-create-join-menu",
-    "menu-multi-setup",
-    "menu-enter-server",
-    "menu-net-multi-client",
-    "menu-net-connecting",
-    "menu-campaign-select",
-    "menu-campaign-continue",
-    "menu-objectives",
-    "menu-end-scenario",
-    "menu-sound-options",
-    "menu-preferences",
-    "menu-settings-speed",
-    "menu-game-options",
-    "menu-net-error",
-    "menu-tips",
-    "menu-help",
-    "menu-keystroke-help",
-    "menu-save-game",
-    "menu-load-game",
-    "menu-save-confirm",
-    "menu-delete-confirm",
-    "menu-editor-select",
-    "menu-editor-load-map",
-    "menu-editor",
-    "menu-editor-map-properties",
-    "menu-editor-player-properties",
-};
-
-char *menu_flags[] = {
-    "",
-    "'flags '(active)",
-    "'flags '(clicked)",
-    "",
-    "'flags '(selected)",
-    "",
-    "",
-    "",
-    "'flags '(disabled)",
-};
-
-char *images[] = {
-    "none",
-    "panel1",
-    "panel2",
-    "panel3",
-    "panel4",
-    "panel5",
-};
-
-char *font_names[] = {
-    "small",
-    "game",
-    "large",
-    "smallTitle",
-    "largeTitle",
-};
-
-char *text_flags[] = {
-    "none",
-    "center",
-    "right",
-    "",
-    "left",
-};
-
-char *gem_state[] = {
-    "unchecked",
-    "passive",
-    "invisible",
-    "",
-    "checked",
-};
-
-local char *hotkey2str(int key, char *buf)
-{
-    if (!key) {
-	buf[0] = '\0';
-    } else if (('a' <= key && key <= 'z') || ('A' <= key && key <= 'Z')) {
-	buf[0] = key;
-	buf[1] = '\0';
-    } else if (KeyCodeF1 <= key && key <= KeyCodeF12) {
-	buf[0] = 'f';
-	if (key >= KeyCodeF10) {
-	    buf[1] = '1';
-	    buf[2] = key-10-KeyCodeF1+1 + '0';
-	    buf[3] = '\0';
-	} else {
-	    buf[1] = key-KeyCodeF1+1 + '0';
-	    buf[2] = '\0';
-	}
-    } else if (key == '\033') {
-	strcpy(buf,"esc");
-    }
-    return buf;
-}
-
-local char *button_style(int style)
-{
-    switch (style) {
-	case MBUTTON_MAIN:
-	    return "main";
-	case MBUTTON_GM_HALF:
-	    return "gm-half";
-	case MBUTTON_132:
-	    return "132";
-	case MBUTTON_GM_FULL:
-	    return "gm-full";
-	case MBUTTON_GEM_ROUND:
-	    return "gem-round";
-	case MBUTTON_GEM_SQUARE:
-	    return "gem-square";
-	case MBUTTON_UP_ARROW:
-	    return "up-arrow";
-	case MBUTTON_DOWN_ARROW:
-	    return "down-arrow";
-	case MBUTTON_LEFT_ARROW:
-	    return "left-arrow";
-	case MBUTTON_RIGHT_ARROW:
-	    return "right-arrow";
-	case MBUTTON_S_KNOB:
-	    return "s-knob";
-	case MBUTTON_S_VCONT:
-	    return "s-vcont";
-	case MBUTTON_S_HCONT:
-	    return "s-hcont";
-	case MBUTTON_PULLDOWN:
-	    return "pulldown";
-	case MBUTTON_VTHIN:
-	    return "vthin";
-	case MBUTTON_FOLDER:
-	    return "folder";
-    }
-    fprintf(stderr,"button_style not found: %d\n", style);
-    return "";
-}
-
-global void SaveMenus(FILE* file)
-{
-    Menu *menu;
-    int i, j, n;
-    int OffsetX, OffsetY;
-    char hotkey[10];
-    char func[10];
-    char func2[10];
-    char func3[10];
-    char initfunc[40];
-    char exitfunc[40];
-    char netaction[40];
-
-    OffsetX = (VideoWidth - 640) / 2;
-    OffsetY = (VideoHeight - 480) / 2;
-
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; $Id$\n\n");
-
-    for (i=0; i<sizeof(menu_names)/sizeof(*menu_names); ++i) {
-	menu = FindMenu(menu_names[i]);
-	if (!menu) {
-	    abort();
-	}
-	fprintf(file,";;\n;; %s\n;;\n", menu_names[i]);
-	if (menu->netaction) {
-	    sprintf(func,"%p",menu->netaction);
-	    sprintf(netaction," 'netaction '%s",(char*)hash_find(MenuFuncHash2,func));
-	} else {
-	    netaction[0] = '\0';
-	}
-	fprintf(file,"(define-menu 'name '%s 'geometry '(%d %d %d %d)\n"
-		     "    'image '%s 'default '%d%s)\n",
-		     menu_names[i],
-		     menu->x - OffsetX, menu->y - OffsetY,
-		     menu->xsize, menu->ysize,
-		     images[menu->image],
-		     menu->defsel,
-		     netaction);
-	for (j=0; j<menu->nitems; ++j) {
-	    if (menu->items[j].initfunc) {
-		sprintf(func,"%p",menu->items[j].initfunc);
-		sprintf(initfunc," 'init '%s",(char*)hash_find(MenuFuncHash2,func));
-	    } else {
-		initfunc[0] = '\0';
-	    }
-	    if (menu->items[j].exitfunc) {
-		sprintf(func,"%p",menu->items[j].exitfunc);
-		sprintf(exitfunc," 'exit '%s",(char*)hash_find(MenuFuncHash2,func));
-	    } else {
-		exitfunc[0] = '\0';
-	    }
-
-	    fprintf(file,"(define-menu-item 'pos (list %d %d) 'font '%s %s%s%s\n",
-			 menu->items[j].xofs, menu->items[j].yofs,
-			 font_names[menu->items[j].font],
-			 menu_flags[menu->items[j].flags],
-			 initfunc,
-			 exitfunc);
-	    switch (menu->items[j].mitype) {
-		case MI_TYPE_TEXT:
-		    fprintf(file,"    'text '(\"%s\" %s)\n",
-			    menu->items[j].d.text.text ? (char*)menu->items[j].d.text.text : "null",
-			    text_flags[menu->items[j].d.text.tflags]);
-		    break;
-		case MI_TYPE_BUTTON:
-		    sprintf(func,"%p",menu->items[j].d.button.handler);
-		    fprintf(file,"    'button '(size (%d %d)\n"
-			         "            caption \"%s\"\n"
-				 "            hotkey \"%s\"\n"
-				 "            func %s\n"
-				 "            style %s)\n",
-				 menu->items[j].d.button.xsize,
-				 menu->items[j].d.button.ysize,
-				 menu->items[j].d.button.text ? menu->items[j].d.button.text : "null",
-				 hotkey2str(menu->items[j].d.button.hotkey,hotkey),
-				 (char*)hash_find(MenuFuncHash2,func),
-				 button_style(menu->items[j].d.button.button));
-		    break;
-		case MI_TYPE_PULLDOWN:
-		    sprintf(func,"%p",menu->items[j].d.pulldown.action);
-		    fprintf(file,"    'pulldown '(size (%d %d)\n"
-			         "              style %s\n"
-				 "              func %s\n",
-				 menu->items[j].d.pulldown.xsize,
-				 menu->items[j].d.pulldown.ysize,
-				 button_style(menu->items[j].d.pulldown.button),
-				 (char*)hash_find(MenuFuncHash2,func));
-		    fprintf(file,"              options (");
-		    for (n=0; n<menu->items[j].d.pulldown.noptions; ++n) {
-			fprintf(file,"\"%s\" ", menu->items[j].d.pulldown.options[n]);
-		    }
-
-		    fprintf(file,")\n"
-				 "              default %d\n"
-				 "              current %d)\n",
-				 menu->items[j].d.pulldown.defopt,
-				 menu->items[j].d.pulldown.curopt);
-		    break;
-		case MI_TYPE_LISTBOX:
-		    sprintf(func,"%p",menu->items[j].d.listbox.action);
-		    sprintf(func2,"%p",menu->items[j].d.listbox.retrieveopt);
-		    sprintf(func3,"%p",menu->items[j].d.listbox.handler);
-		    fprintf(file,"    'listbox '(size (%d %d)\n"
-				 "             style %s\n"
-				 "             func %s\n"
-				 "             retopt %s\n"
-				 "             handler %s\n"
-				 "             nlines %d)\n",
-				 menu->items[j].d.listbox.xsize,
-				 menu->items[j].d.listbox.ysize,
-				 button_style(menu->items[j].d.listbox.button),
-				 (char*)hash_find(MenuFuncHash2,func),
-				 (char*)hash_find(MenuFuncHash2,func2),
-				 (char*)hash_find(MenuFuncHash2,func3),
-				 menu->items[j].d.listbox.nlines);
-		    break;
-		case MI_TYPE_VSLIDER:
-		    sprintf(func,"%p",menu->items[j].d.vslider.action);
-		    sprintf(func2,"%p",menu->items[j].d.vslider.handler);
-		    fprintf(file,"    'vslider '(size (%d %d)\n"
-			         "             func %s\n"
-				 "             handler %s)\n",
-				 menu->items[j].d.vslider.xsize,
-				 menu->items[j].d.vslider.ysize,
-				 (char*)hash_find(MenuFuncHash2,func),
-				 (char*)hash_find(MenuFuncHash2,func2));
-		    break;
-		case MI_TYPE_DRAWFUNC:
-		    sprintf(func,"%p",menu->items[j].d.drawfunc.draw);
-		    fprintf(file,"    'drawfunc '%s\n",
-			         (char*)hash_find(MenuFuncHash2,func));
-		    break;
-		case MI_TYPE_INPUT:
-		    sprintf(func,"%p",menu->items[j].d.input.action);
-		    fprintf(file,"    'input '(size (%d %d)\n"
-			         "           func %s\n"
-				 "           style %s)\n",
-				 menu->items[j].d.input.xsize,
-				 menu->items[j].d.input.ysize,
-				 (char*)hash_find(MenuFuncHash2,func),
-				 button_style(menu->items[j].d.input.button));
-		    break;
-		case MI_TYPE_GEM:
-		    sprintf(func,"%p",menu->items[j].d.gem.action);
-		    fprintf(file,"    'gem '(size (%d %d)\n"
-			         "         state %s\n"
-				 "         func %s\n"
-				 "         style %s)\n",
-				 menu->items[j].d.gem.xsize,
-				 menu->items[j].d.gem.ysize,
-				 gem_state[menu->items[j].d.gem.state],
-				 (char*)hash_find(MenuFuncHash2,func),
-				 button_style(menu->items[j].d.gem.button));
-		    break;
-		case MI_TYPE_HSLIDER:
-		    sprintf(func,"%p",menu->items[j].d.hslider.action);
-		    sprintf(func2,"%p",menu->items[j].d.hslider.handler);
-		    fprintf(file,"    'hslider '(size (%d %d)\n"
-			         "             func %s\n"
-				 "             handler %s)\n",
-				 menu->items[j].d.hslider.xsize,
-				 menu->items[j].d.hslider.ysize,
-				 (char*)hash_find(MenuFuncHash2,func),
-				 (char*)hash_find(MenuFuncHash2,func2));
-		    break;
-		default:
-		    abort();
-	    }
-	    fprintf(file,"    'menu '%s)\n",menu_names[i]);
-	}
-	fprintf(file,"\n\n");
-    }
-}
-#endif /// SAVE_MENU_CCL
-
 //@}