From d8d22408627466d2ae5e594062d7f650d4a48476 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Sat, 26 Jun 2010 20:28:45 -0700 Subject: [PATCH] menu: add MENU HELP Add a feature to display fullscreen help via menu selection entry (inspired by the Debian install disc menus.) Signed-off-by: H. Peter Anvin --- com32/menu/menu.h | 2 ++ com32/menu/menumain.c | 7 +++++++ com32/menu/readconfig.c | 23 +++++++++++++++++++++++ doc/menu.txt | 15 +++++++++++---- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/com32/menu/menu.h b/com32/menu/menu.h index 63e1859..36c5669 100644 --- a/com32/menu/menu.h +++ b/com32/menu/menu.h @@ -49,6 +49,7 @@ enum menu_action { MA_QUIT, /* Quit to CLI */ MA_EXIT, /* Exit to higher-level menu */ MA_EXIT_UNRES, /* Unresolved exit */ + MA_HELP, /* Show help text */ }; struct menu_entry { @@ -58,6 +59,7 @@ struct menu_entry { const char *passwd; char *helptext; const char *cmdline; + const char *background; struct menu *submenu; struct menu_entry *next; /* Linked list of all labels across menus */ int entry; /* Entry number inside menu */ diff --git a/com32/menu/menumain.c b/com32/menu/menumain.c index 5d85018..06725f3 100644 --- a/com32/menu/menumain.c +++ b/com32/menu/menumain.c @@ -921,6 +921,13 @@ static const char *run_menu(void) clear = 1; draw_row(entry - top + 4 + VSHIFT, -1, top, 0, 0); break; + case MA_HELP: + key = show_message_file(me->cmdline, me->background); + /* If the exit was an F-key, display that help screen */ + show_fkey(key); + done = 0; + clear = 1; + break; default: done = 0; break; diff --git a/com32/menu/readconfig.c b/com32/menu/readconfig.c index 5685e6f..ca9c35e 100644 --- a/com32/menu/readconfig.c +++ b/com32/menu/readconfig.c @@ -372,6 +372,11 @@ static void record(struct menu *m, struct labeldata *ld, const char *append) me->submenu = ld->submenu; break; + case MA_HELP: + me->cmdline = refstr_get(ld->kernel); + me->background = refstr_get(ld->append); + break; + default: break; } @@ -834,6 +839,24 @@ static void parse_config_file(FILE * f) } } else if (looking_at(p, "start")) { start_menu = m; + } else if (looking_at(p, "help")) { + if (ld.label) { + ld.action = MA_HELP; + p = skipspace(p + 4); + + refstr_put(ld.kernel); + ld.kernel = refdup_word(&p); + + if (ld.append) { + refstr_put(ld.append); + ld.append = NULL; + } + + if (*p) { + p = skipspace(p); + ld.append = refdup_word(&p); /* Background */ + } + } } else if ((ep = looking_at(p, "resolution"))) { int x, y; x = strtoul(ep, &ep, 0); diff --git a/doc/menu.txt b/doc/menu.txt index af93558..e2dd1e1 100644 --- a/doc/menu.txt +++ b/doc/menu.txt @@ -497,16 +497,23 @@ MENU VSHIFT 0 screen (25 for text mode, 28 for VESA graphics mode.) -F1 textfile background +F1 textfile [background] ... -F12 textfile background +F12 textfile [background] Displays full-screen help (also available at the command line.) The same control code sequences as in the command line interface are supported, although some are ignored. - Additionally, a second argument allows a different background - image (see MENU BACKGROUND for supported formats) to be displayed. + Additionally, a optional second argument allows a different + background image (see MENU BACKGROUND for supported formats) + to be displayed. + + +MENU HELP textfile [background] + + Creates a menu entry which, when selected, displays + full-screen help in the same way as the F-key help. The menu system honours the TIMEOUT command; if TIMEOUT is specified -- 2.7.4