Mercurial > hg > toybox
diff toys/other/help.c @ 1232:4654f241ccbe draft
Add help -a (to show all commands) and -h (to produce HTML output).
author | Rob Landley <rob@landley.net> |
---|---|
date | Fri, 28 Mar 2014 17:48:02 -0500 |
parents | 34ac05521d94 |
children |
line wrap: on
line diff
--- a/toys/other/help.c Thu Mar 27 07:02:01 2014 -0500 +++ b/toys/other/help.c Fri Mar 28 17:48:02 2014 -0500 @@ -4,7 +4,7 @@ * * Often a shell builtin. -USE_HELP(NEWTOY(help, "<1", TOYFLAG_BIN)) +USE_HELP(NEWTOY(help, ""USE_HELP_EXTRAS("ah"), TOYFLAG_BIN)) config HELP bool "help" @@ -15,16 +15,62 @@ Show usage information for toybox commands. Run "toybox" with no arguments for a list of available commands. + +config HELP_EXTRAS + bool "help -ah" + default y + depends on TOYBOX + depends on HELP + help + usage: help [-ah] + + -a All commands + -h HTML output */ +#define FOR_help +#include "toys.h" -#include "toys.h" +static void do_help(struct toy_list *t) +{ + if (toys.optflags & FLAG_h) + xprintf("<a name=\"%s\"><h1>%s</h1><blockquote><pre>\n", t->name, t->name); + + toys.which = t; + show_help(); + + if (toys.optflags & FLAG_h) xprintf("</blockquote></pre>\n"); +} + +// The simple help is just toys.which = toy_find("name"); show_help(); +// But iterating through html output and all commands is a big more void help_main(void) { - struct toy_list *t = toy_find(*toys.optargs); + int i; + + if (!(toys.optflags & FLAG_a)) { + struct toy_list *t = toys.which; + + if (*toys.optargs && !(t = toy_find(*toys.optargs))) + error_exit("Unknown command '%s'", *toys.optargs); + do_help(t); + return; + } - if (!t) error_exit("Unknown command '%s'", *toys.optargs); - toys.which = t; - show_help(); + if (toys.optflags & FLAG_h) { + xprintf("<html>\n<title>Toybox command list</title>\n<body>\n<p>\n"); + for (i=0; i < toys.toycount; i++) + xprintf("<a href=\"#%s\">%s</a>\n", toy_list[i].name, + toy_list[i].name); + xprintf("</p>\n"); + } + + for (i = 0; i < toys.toycount; i++) { + if (toys.optflags & FLAG_h) xprintf("<hr>\n<pre>\n"); + do_help(toy_list+i); + if (toys.optflags & FLAG_h) xprintf("</pre>\n"); + } + + if (toys.optflags & FLAG_h) xprintf("</html>"); }