aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-02-19 16:37:50 -0800
committerH. Peter Anvin <hpa@zytor.com>2008-02-19 16:51:24 -0800
commit93a9bb39ba16c67f4782621675ee3cc5edf2ad18 (patch)
tree55bd24af96fb6ec824bbe58a19cf4003f2a2359d
parent8f6e112074e1b189bb229583e29270248be36989 (diff)
downloadsyslinux-elf-93a9bb39ba16c67f4782621675ee3cc5edf2ad18.tar.gz
syslinux-elf-93a9bb39ba16c67f4782621675ee3cc5edf2ad18.tar.xz
syslinux-elf-93a9bb39ba16c67f4782621675ee3cc5edf2ad18.zip
Allow an included file to be treated as a submenu.
-rw-r--r--com32/menu/readconfig.c22
-rw-r--r--doc/menu.doc8
2 files changed, 24 insertions, 6 deletions
diff --git a/com32/menu/readconfig.c b/com32/menu/readconfig.c
index c3f2da4b..e94fddfe 100644
--- a/com32/menu/readconfig.c
+++ b/com32/menu/readconfig.c
@@ -599,8 +599,7 @@ static void parse_config_file(FILE *f)
m->menu_master_passwd = refstrdup(skipspace(p+6));
}
} else if ( (ep = looking_at(p, "include")) ) {
- p = skipspace(ep);
- parse_one_config(p);
+ goto do_include;
} else if ( (ep = looking_at(p, "background")) ) {
p = skipspace(ep);
refstr_put(m->menu_background);
@@ -781,8 +780,23 @@ static void parse_config_file(FILE *f)
m->fkeyhelp[fkeyno].background = refdup_word(&p);
}
} else if ( (ep = looking_at(p, "include")) ) {
- p = skipspace(ep);
- parse_one_config(p);
+ do_include:
+ {
+ const char *file;
+ p = skipspace(ep);
+ file = refdup_word(&p);
+ p = skipspace(p);
+ if (*p) {
+ record(m, &ld, append);
+ m = current_menu = begin_submenu(p);
+ parse_one_config(file);
+ record(m, &ld, append);
+ m = current_menu = end_submenu();
+ } else {
+ parse_one_config(file);
+ }
+ refstr_put(file);
+ }
} else if ( looking_at(p, "append") ) {
const char *a = refstrdup(skipspace(p+6));
if ( ld.label ) {
diff --git a/doc/menu.doc b/doc/menu.doc
index d3c211fd..3b95a031 100644
--- a/doc/menu.doc
+++ b/doc/menu.doc
@@ -225,8 +225,8 @@ MENU QUIT
PASSWD can of course be set for this label.
-INCLUDE filename
-MENU INCLUDE filename
+INCLUDE filename [tagname]
+MENU INCLUDE filename [tagname]
Include the contents of the configuration file filename at
this point.
@@ -235,6 +235,10 @@ MENU INCLUDE filename
the menu system; the core syslinux code does not parse this
command, so any labels defined in it are unavailable.
+ If a tagname is included, the whole file is considered to have
+ been bracketed with a MENU BEGIN tagname ... MENU END pair,
+ and will therefore show up as a submenu.
+
MENU AUTOBOOT message