1 /* help.c - Show help for toybox commands 2 * 3 * Copyright 2007 Rob Landley <rob@landley.net> 4 * 5 * Often a shell builtin. 6 7 USE_HELP(NEWTOY(help, ""USE_HELP_EXTRAS("ah"), TOYFLAG_BIN)) 8 9 config HELP 10 bool "help" 11 default y 12 depends on TOYBOX_HELP 13 help 14 usage: help [command] 15 16 Show usage information for toybox commands. 17 Run "toybox" with no arguments for a list of available commands. 18 19 config HELP_EXTRAS 20 bool "help -ah" 21 default y 22 depends on TOYBOX 23 depends on HELP 24 help 25 usage: help [-ah] 26 27 -a All commands 28 -h HTML output 29 */ 30 31 #define FOR_help 32 #include "toys.h" 33 34 static void do_help(struct toy_list *t) 35 { 36 if (toys.optflags & FLAG_h) 37 xprintf("<a name=\"%s\"><h1>%s</h1><blockquote><pre>\n", t->name, t->name); 38 39 toys.which = t; 40 show_help(stdout); 41 42 if (toys.optflags & FLAG_h) xprintf("</blockquote></pre>\n"); 43 } 44 45 // The simple help is just toys.which = toy_find("name"); show_help(stdout); 46 // But iterating through html output and all commands is a big more 47 48 void help_main(void) 49 { 50 int i; 51 52 if (!(toys.optflags & FLAG_a)) { 53 struct toy_list *t = toys.which; 54 55 if (*toys.optargs && !(t = toy_find(*toys.optargs))) 56 error_exit("Unknown command '%s'", *toys.optargs); 57 do_help(t); 58 return; 59 } 60 61 if (toys.optflags & FLAG_h) { 62 xprintf("<html>\n<title>Toybox command list</title>\n<body>\n<p>\n"); 63 for (i=0; i < toys.toycount; i++) 64 xprintf("<a href=\"#%s\">%s</a>\n", toy_list[i].name, 65 toy_list[i].name); 66 xprintf("</p>\n"); 67 } 68 69 for (i = 0; i < toys.toycount; i++) { 70 if (toys.optflags & FLAG_h) xprintf("<hr>\n<pre>\n"); 71 else { 72 memset(toybuf, '-', 78); 73 memcpy(toybuf+3, toy_list[i].name, strlen(toy_list[i].name)); 74 printf("%s\n\n", toybuf); 75 } 76 do_help(toy_list+i); 77 if (toys.optflags & FLAG_h) xprintf("</pre>\n"); 78 } 79 80 if (toys.optflags & FLAG_h) xprintf("</html>"); 81 } 82