summaryrefslogtreecommitdiffstats
path: root/commands/menutree.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-09-23 00:41:22 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2014-03-28 09:37:09 +0100
commitca8edb3b65ae2be88278efac6ca7da1de964be88 (patch)
tree941380a0a16520e8f18654181cf41e834bf37bad /commands/menutree.c
parent45693e0265d086b031739132d64d240b9afd038e (diff)
downloadbarebox-ca8edb3b65ae2be88278efac6ca7da1de964be88.tar.gz
barebox-ca8edb3b65ae2be88278efac6ca7da1de964be88.tar.xz
add menutree command
Creating menus from the shell using the regular 'menu' command is rather complicated. This adds a 'menutree' command which creates a menu from a directory structure. In the directory structure each directory corresponds to a single menu entry. The directory contains the following files: title - A file containing the title of the entry as shown in the menu box - If present, the entry is a 'bool' entry. The file contains a variable name from which the current state of the bool is taken from and saved to. action - if present this file contains a shell script which is executed when when the entry is selected. If neither 'box' or 'action' are present this entry is considered a submenu containing more entries. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'commands/menutree.c')
-rw-r--r--commands/menutree.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/commands/menutree.c b/commands/menutree.c
new file mode 100644
index 0000000000..3b1a263584
--- /dev/null
+++ b/commands/menutree.c
@@ -0,0 +1,60 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * 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.
+ */
+#include <command.h>
+#include <common.h>
+#include <getopt.h>
+#include <menu.h>
+
+static int do_menutree(int argc, char *argv[])
+{
+ int opt, ret;
+ char *path = "/env/menu";
+
+ while ((opt = getopt(argc, argv, "m:")) > 0) {
+ switch (opt) {
+ case 'm':
+ path = optarg;
+ break;
+ }
+ }
+
+ ret = menutree(path, 1);
+
+ return ret;
+}
+
+BAREBOX_CMD_HELP_START(menutree)
+BAREBOX_CMD_HELP_USAGE("menutree [OPTIONS]\n")
+"\n"
+"Create a menu from a directory structure\n"
+"Each menu entry is described by a subdirectory. Each subdirectory\n"
+"can contain the following files which further describe the entry:\n"
+"\n"
+"title - A file containing the title of the entry as shown in the menu\n"
+"box - If present, the entry is a 'bool' entry. The file contains a variable\n"
+" name from which the current state of the bool is taken from and saved\n"
+" to.\n"
+"action - if present this file contains a shell script which is executed when\n"
+" when the entry is selected.\n"
+"If neither 'box' or 'action' are present this entry is considered a submenu\n"
+"containing more entries.\n"
+"\n"
+"Options:\n"
+" -m <dir> directory where the menu starts (/env/menu)\n"
+
+BAREBOX_CMD_HELP_END
+
+
+BAREBOX_CMD_START(menutree)
+ .cmd = do_menutree,
+ .usage = "create a menu from a directory structure",
+ BAREBOX_CMD_HELP(cmd_menutree_help)
+BAREBOX_CMD_END