summaryrefslogtreecommitdiffstats
path: root/qemu/roms/ipxe/src/hci/commands/menu_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/ipxe/src/hci/commands/menu_cmd.c')
-rw-r--r--qemu/roms/ipxe/src/hci/commands/menu_cmd.c294
1 files changed, 0 insertions, 294 deletions
diff --git a/qemu/roms/ipxe/src/hci/commands/menu_cmd.c b/qemu/roms/ipxe/src/hci/commands/menu_cmd.c
deleted file mode 100644
index 76bce8695..000000000
--- a/qemu/roms/ipxe/src/hci/commands/menu_cmd.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright (C) 2012 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * You can also choose to distribute this program under the terms of
- * the Unmodified Binary Distribution Licence (as given in the file
- * COPYING.UBDL), provided that you have satisfied its requirements.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
-/** @file
- *
- * Menu commands
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <getopt.h>
-#include <ipxe/menu.h>
-#include <ipxe/command.h>
-#include <ipxe/parseopt.h>
-#include <ipxe/settings.h>
-#include <ipxe/features.h>
-
-FEATURE ( FEATURE_MISC, "Menu", DHCP_EB_FEATURE_MENU, 1 );
-
-/** "menu" options */
-struct menu_options {
- /** Name */
- char *name;
- /** Delete */
- int delete;
-};
-
-/** "menu" option list */
-static struct option_descriptor menu_opts[] = {
- OPTION_DESC ( "name", 'n', required_argument,
- struct menu_options, name, parse_string ),
- OPTION_DESC ( "delete", 'd', no_argument,
- struct menu_options, delete, parse_flag ),
-};
-
-/** "menu" command descriptor */
-static struct command_descriptor menu_cmd =
- COMMAND_DESC ( struct menu_options, menu_opts, 0, MAX_ARGUMENTS,
- "[<title>]" );
-
-/**
- * The "menu" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Return status code
- */
-static int menu_exec ( int argc, char **argv ) {
- struct menu_options opts;
- struct menu *menu;
- char *title;
- int rc;
-
- /* Parse options */
- if ( ( rc = parse_options ( argc, argv, &menu_cmd, &opts ) ) != 0 )
- goto err_parse_options;
-
- /* Parse title */
- title = concat_args ( &argv[optind] );
- if ( ! title ) {
- rc = -ENOMEM;
- goto err_parse_title;
- }
-
- /* Create menu */
- menu = create_menu ( opts.name, title );
- if ( ! menu ) {
- rc = -ENOMEM;
- goto err_create_menu;
- }
-
- /* Destroy menu, if applicable */
- if ( opts.delete )
- destroy_menu ( menu );
-
- /* Success */
- rc = 0;
-
- err_create_menu:
- free ( title );
- err_parse_title:
- err_parse_options:
- return rc;
-}
-
-/** "item" options */
-struct item_options {
- /** Menu name */
- char *menu;
- /** Shortcut key */
- unsigned int key;
- /** Use as default */
- int is_default;
- /** Use as a separator */
- int is_gap;
-};
-
-/** "item" option list */
-static struct option_descriptor item_opts[] = {
- OPTION_DESC ( "menu", 'm', required_argument,
- struct item_options, menu, parse_string ),
- OPTION_DESC ( "key", 'k', required_argument,
- struct item_options, key, parse_key ),
- OPTION_DESC ( "default", 'd', no_argument,
- struct item_options, is_default, parse_flag ),
- OPTION_DESC ( "gap", 'g', no_argument,
- struct item_options, is_gap, parse_flag ),
-};
-
-/** "item" command descriptor */
-static struct command_descriptor item_cmd =
- COMMAND_DESC ( struct item_options, item_opts, 0, MAX_ARGUMENTS,
- "[<label> [<text>]]" );
-
-/**
- * The "item" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Return status code
- */
-static int item_exec ( int argc, char **argv ) {
- struct item_options opts;
- struct menu *menu;
- struct menu_item *item;
- char *label = NULL;
- char *text = NULL;
- int rc;
-
- /* Parse options */
- if ( ( rc = parse_options ( argc, argv, &item_cmd, &opts ) ) != 0 )
- goto err_parse_options;
-
- /* Parse label, if present */
- if ( ! opts.is_gap )
- label = argv[optind++]; /* May be NULL */
-
- /* Parse text, if present */
- if ( optind < argc ) {
- text = concat_args ( &argv[optind] );
- if ( ! text ) {
- rc = -ENOMEM;
- goto err_parse_text;
- }
- }
-
- /* Identify menu */
- if ( ( rc = parse_menu ( opts.menu, &menu ) ) != 0 )
- goto err_parse_menu;
-
- /* Add menu item */
- item = add_menu_item ( menu, label, ( text ? text : "" ),
- opts.key, opts.is_default );
- if ( ! item ) {
- rc = -ENOMEM;
- goto err_add_menu_item;
- }
-
- /* Success */
- rc = 0;
-
- err_add_menu_item:
- err_parse_menu:
- free ( text );
- err_parse_text:
- err_parse_options:
- return rc;
-}
-
-/** "choose" options */
-struct choose_options {
- /** Menu name */
- char *menu;
- /** Timeout */
- unsigned long timeout;
- /** Default selection */
- char *select;
- /** Keep menu */
- int keep;
-};
-
-/** "choose" option list */
-static struct option_descriptor choose_opts[] = {
- OPTION_DESC ( "menu", 'm', required_argument,
- struct choose_options, menu, parse_string ),
- OPTION_DESC ( "default", 'd', required_argument,
- struct choose_options, select, parse_string ),
- OPTION_DESC ( "timeout", 't', required_argument,
- struct choose_options, timeout, parse_timeout ),
- OPTION_DESC ( "keep", 'k', no_argument,
- struct choose_options, keep, parse_flag ),
-};
-
-/** "choose" command descriptor */
-static struct command_descriptor choose_cmd =
- COMMAND_DESC ( struct choose_options, choose_opts, 1, 1, "<setting>" );
-
-/**
- * The "choose" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Return status code
- */
-static int choose_exec ( int argc, char **argv ) {
- struct choose_options opts;
- struct named_setting setting;
- struct menu *menu;
- struct menu_item *item;
- int rc;
-
- /* Parse options */
- if ( ( rc = parse_options ( argc, argv, &choose_cmd, &opts ) ) != 0 )
- goto err_parse_options;
-
- /* Parse setting name */
- if ( ( rc = parse_autovivified_setting ( argv[optind],
- &setting ) ) != 0 )
- goto err_parse_setting;
-
- /* Identify menu */
- if ( ( rc = parse_menu ( opts.menu, &menu ) ) != 0 )
- goto err_parse_menu;
-
- /* Show menu */
- if ( ( rc = show_menu ( menu, opts.timeout, opts.select, &item ) ) != 0)
- goto err_show_menu;
-
- /* Apply default type if necessary */
- if ( ! setting.setting.type )
- setting.setting.type = &setting_type_string;
-
- /* Store setting */
- if ( ( rc = storef_setting ( setting.settings, &setting.setting,
- item->label ) ) != 0 ) {
- printf ( "Could not store \"%s\": %s\n",
- setting.setting.name, strerror ( rc ) );
- goto err_store;
- }
-
- /* Success */
- rc = 0;
-
- err_store:
- err_show_menu:
- /* Destroy menu, if applicable */
- if ( ! opts.keep )
- destroy_menu ( menu );
- err_parse_menu:
- err_parse_setting:
- err_parse_options:
- return rc;
-}
-
-/** Menu commands */
-struct command menu_commands[] __command = {
- {
- .name = "menu",
- .exec = menu_exec,
- },
- {
- .name = "item",
- .exec = item_exec,
- },
- {
- .name = "choose",
- .exec = choose_exec,
- },
-};