X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=dss.c;fp=dss.c;h=8e369ca70bb2456451c9a4a813605f160e37deb4;hb=7574f425c08a8469304038ac89318fe359dfc16f;hp=0992ec6fd18651f85c2bab2c7d8d45603b3a786c;hpb=73e0fd24ed41db7882948ee4d7ff63119cf5a67d;p=dss.git diff --git a/dss.c b/dss.c index 0992ec6..8e369ca 100644 --- a/dss.c +++ b/dss.c @@ -1837,20 +1837,57 @@ static void handle_version_and_help(void) exit(EXIT_SUCCESS); } -static void show_subcommand_summary(void) +static void show_subcommand_summary(bool verbose) { const struct lls_command *cmd; int i; - printf("Available subcommands:\n"); + printf("Available subcommands: "); + if (!verbose) { + for (i = 1; (cmd = lls_cmd(i, dss_suite)); i++) { + if (i > 1) + printf(", "); + printf("%s", lls_command_name(cmd)); + } + return; + } + printf("\n"); for (i = 1; (cmd = lls_cmd(i, dss_suite)); i++) { const char *name = lls_command_name(cmd); const char *purpose = lls_purpose(cmd); printf("%-11s%s\n", name, purpose); } - exit(EXIT_SUCCESS); } +static int com_help(void) +{ + int ret; + char *errctx, *help; + const char *arg; + const struct lls_command *cmd; + + ret = lls_check_arg_count(sublpr, 0, 1, &errctx); + if (ret < 0) + return lopsub_error(ret, &errctx); + if (lls_num_inputs(sublpr) == 0) { + show_subcommand_summary(OPT_GIVEN(HELP, LONG)); + return 0; + } + arg = lls_input(0, sublpr); + ret = lls_lookup_subcmd(arg, dss_suite, &errctx); + if (ret < 0) + return lopsub_error(ret, &errctx); + cmd = lls_cmd(ret, dss_suite); + if (OPT_GIVEN(HELP, LONG)) + help = lls_long_help(cmd); + else + help = lls_short_help(cmd); + printf("%s\n", help); + free(help); + return 0; +} +EXPORT_CMD_HANDLER(help); + int main(int argc, char **argv) { int ret; @@ -1869,8 +1906,11 @@ int main(int argc, char **argv) goto out; handle_version_and_help(); num_inputs = lls_num_inputs(lpr); - if (num_inputs == 0) - show_subcommand_summary(); + if (num_inputs == 0) { /* show verbose summary */ + show_subcommand_summary(true); + ret = 0; + goto out; + } ret = lls_lookup_subcmd(argv[argc - num_inputs], dss_suite, &errctx); if (ret < 0) { ret = lopsub_error(ret, &errctx);