Implement hiddenmenu (not tested)

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-09-12 02:55:24 +02:00
parent 237a43b1c1
commit 6c6850ae13
4 changed files with 62 additions and 13 deletions

View file

@ -41,7 +41,8 @@ struct legacy_command
TYPE_REST_VERBATIM
} argt[4];
enum {
FLAG_IGNORE_REST = 1
FLAG_IGNORE_REST = 1,
FLAG_SUFFIX = 2
} flags;
const char *shortdesc;
const char *longdesc;
@ -108,7 +109,8 @@ struct legacy_command legacy_commands[] =
"Halt your system. If APM is available on it, turn off the power using"
" the APM BIOS, unless you specify the option `--no-apm'."},
/* FIXME: help unsupported. */ /* NUL_TERMINATE */
/* FIXME: hiddenmenu unsupported. */
{"hiddenmenu", "if sleep -i $timeout; then timeout=0; else timeout=-1; fi\n",
0, {}, FLAG_SUFFIX, "", "Hide the menu."},
{"hide", "parttool '%s' hidden+\n", 1, {TYPE_PARTITION}, 0, "PARTITION",
"Hide PARTITION by setting the \"hidden\" bit in"
" its partition type code."},
@ -354,12 +356,14 @@ is_option (enum arg_type opt, const char *curarg, grub_size_t len)
}
char *
grub_legacy_parse (const char *buf, char **entryname)
grub_legacy_parse (const char *buf, char **entryname, int *suffix)
{
const char *ptr;
const char *cmdname;
unsigned i, cmdnum;
*suffix = 0;
for (ptr = buf; *ptr && grub_isspace (*ptr); ptr++);
if (!*ptr || *ptr == '#')
return grub_strdup (buf);
@ -392,6 +396,8 @@ grub_legacy_parse (const char *buf, char **entryname)
if (cmdnum == ARRAY_SIZE (legacy_commands))
return grub_xasprintf ("# Unsupported legacy command: %s\n", buf);
*suffix = !!(legacy_commands[cmdnum].flags & FLAG_SUFFIX);
for (; grub_isspace (*ptr) || *ptr == '='; ptr++);
char *args[ARRAY_SIZE (legacy_commands[0].argt)];