summaryrefslogtreecommitdiffstats
path: root/src/core/parseopt.c
diff options
context:
space:
mode:
authorMichael Brown2012-03-29 01:05:22 +0200
committerMichael Brown2012-03-29 15:02:02 +0200
commit3425726cf33c2af84c9737a2501cd39517e42cdb (patch)
treeb08cd61419fad6e16de7e9329d91540e99a6a980 /src/core/parseopt.c
parent[menu] Add menu user interface (diff)
downloadipxe-3425726cf33c2af84c9737a2501cd39517e42cdb.tar.gz
ipxe-3425726cf33c2af84c9737a2501cd39517e42cdb.tar.xz
ipxe-3425726cf33c2af84c9737a2501cd39517e42cdb.zip
[menu] Add menu commands
Allow iPXE scripts to create menus. For example: #!ipxe menu iSCSI boot demonstration item install Install Fedora to ${root-path} item --default boot Boot from ${root-path} item shell Enter iPXE shell item exit Exit to BIOS choose label && goto ${label} :boot sanboot ${root-path} :install sanhook ${root-path} chain http://${next-server}/fedora.ipxe :shell shell :exit Inspired-by: Robin Smidsrød <robin@smidsrod.no> Tested-by: Robin Smidsrød <robin@smidsrod.no> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/parseopt.c')
-rw-r--r--src/core/parseopt.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/core/parseopt.c b/src/core/parseopt.c
index 57140690..432e856d 100644
--- a/src/core/parseopt.c
+++ b/src/core/parseopt.c
@@ -26,6 +26,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <errno.h>
#include <getopt.h>
#include <ipxe/netdevice.h>
+#include <ipxe/menu.h>
#include <ipxe/parseopt.h>
/** @file
@@ -114,6 +115,29 @@ int parse_netdev ( const char *text, struct net_device **netdev ) {
}
/**
+ * Parse menu name
+ *
+ * @v text Text
+ * @ret menu Menu
+ * @ret rc Return status code
+ */
+int parse_menu ( const char *text, struct menu **menu ) {
+
+ /* Find menu */
+ *menu = find_menu ( text );
+ if ( ! *menu ) {
+ if ( text ) {
+ printf ( "\"%s\": no such menu\n", text );
+ } else {
+ printf ( "No default menu\n" );
+ }
+ return -ENOENT;
+ }
+
+ return 0;
+}
+
+/**
* Parse flag
*
* @v text Text (ignored)