[syslinux:master] menu: add MENU HELP

syslinux-bot for H. Peter Anvin hpa at zytor.com
Sat Jun 26 20:30:06 PDT 2010


Commit-ID:  d8d22408627466d2ae5e594062d7f650d4a48476
Gitweb:     http://syslinux.zytor.com/commit/d8d22408627466d2ae5e594062d7f650d4a48476
Author:     H. Peter Anvin <hpa at zytor.com>
AuthorDate: Sat, 26 Jun 2010 20:28:45 -0700
Committer:  H. Peter Anvin <hpa at zytor.com>
CommitDate: Sat, 26 Jun 2010 20:28:45 -0700

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 <hpa at zytor.com>


---
 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



More information about the Syslinux-commits mailing list