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;
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);
exits successfully or prints information about the first syntax error
detected and terminates with exit code 1.
[/description]
+[subcommand help]
+ purpose = list available subcommands or print subcommand-specific help
+ non-opts-name = [subcommand]
+ [description]
+ Without any arguments, help prints the list of available
+ subcommands. When called with a subcommand name argument, it prints
+ the help text of the given subcommand.
+ [/description]
+ [option long]
+ short_opt = l
+ summary = show the long help text
+ [help]
+ If the optional argument is supplied, the long help text contains the
+ synopsis, the purpose and the description of the specified subcommand,
+ followed by the option list including summary and help text of each
+ option. Without --long, the short help is shown instead. This omits
+ the description of the subcommand and the option help.
+
+ If no subcommand is supplied but --long is given, the list contains the
+ purpose of each subcommand.
+ [/help]
[section copyright]
Written by Andre Noll