void sl_help (SL_cmd *cmds, int argc, char **argv) { SL_cmd *c, *prev_c; if (getenv("SLMANDOC")) { mandoc_template(cmds, NULL); return; } if (argc == 1) { prev_c = NULL; for (c = cmds; c->name; ++c) { if (c->func) { if(prev_c) printf ("\n\t%s%s", prev_c->usage ? prev_c->usage : "", prev_c->usage ? "\n" : ""); prev_c = c; printf ("%s", c->name); } else printf (", %s", c->name); } if(prev_c) printf ("\n\t%s%s", prev_c->usage ? prev_c->usage : "", prev_c->usage ? "\n" : ""); } else { c = sl_match (cmds, argv[1], 0); if (c == NULL) printf ("No such command: %s. " "Try \"help\" for a list of all commands\n", argv[1]); else { printf ("%s\t%s\n", c->name, c->usage); if(c->help && *c->help) printf ("%s\n", c->help); if((++c)->name && c->func == NULL) { printf ("Synonyms:"); while (c->name && c->func == NULL) printf ("\t%s", (c++)->name); printf ("\n"); } } } }
void arg_printusage (struct getargs *args, size_t num_args, const char *progname, const char *extra_string) { unsigned int i; size_t max_len = 0; char buf[128]; int col = 0, columns; #ifdef HAVE___PROGNAME if (progname == NULL) progname = __progname; #endif if (progname == NULL) progname = ""; #ifdef GETARGMANDOC if(getenv("GETARGMANDOC")){ mandoc_template(args, num_args, progname, extra_string); return; } #endif columns = 80; /* Always assume that the window is 80 chars wide */ col = 0; col += fprintf (stderr, "Usage: %s", progname); for (i = 0; i < num_args; ++i) { size_t len = 0; if (args[i].long_name) { buf[0] = '\0'; strlcat(buf, "[--", sizeof(buf)); len += 2; if(args[i].type == arg_negative_flag) { strlcat(buf, "no-", sizeof(buf)); len += 3; } strlcat(buf, args[i].long_name, sizeof(buf)); len += strlen(args[i].long_name); len += print_arg(buf + strlen(buf), sizeof(buf) - strlen(buf), 0, 1, &args[i]); strlcat(buf, "]", sizeof(buf)); if(args[i].type == arg_strings) strlcat(buf, "...", sizeof(buf)); col = check_column(stderr, col, (int)strlen(buf) + 1, columns); col += fprintf(stderr, " %s", buf); } if (args[i].short_name) { basestring_snprintf(buf, sizeof(buf), "[-%c", args[i].short_name); len += 2; len += print_arg(buf + strlen(buf), sizeof(buf) - strlen(buf), 0, 0, &args[i]); strlcat(buf, "]", sizeof(buf)); if(args[i].type == arg_strings) strlcat(buf, "...", sizeof(buf)); col = check_column(stderr, col, (int)strlen(buf) + 1, columns); col += fprintf(stderr, " %s", buf); } if (args[i].long_name && args[i].short_name) len += 2; /* ", " */ max_len = max(max_len, len); } if (extra_string) { col = check_column(stderr, col, (int)strlen(extra_string) + 1, columns); fprintf (stderr, " %s\n", extra_string); } else fprintf (stderr, "\n"); for (i = 0; i < num_args; ++i) { if (args[i].help) { size_t count = 0; if (args[i].short_name) { count += fprintf (stderr, "-%c", args[i].short_name); print_arg (buf, sizeof(buf), 0, 0, &args[i]); count += fprintf(stderr, "%s", buf); } if (args[i].short_name && args[i].long_name) count += fprintf (stderr, ", "); if (args[i].long_name) { count += fprintf (stderr, "--"); if (args[i].type == arg_negative_flag) count += fprintf (stderr, "no-"); count += fprintf (stderr, "%s", args[i].long_name); print_arg (buf, sizeof(buf), 0, 1, &args[i]); count += fprintf(stderr, "%s", buf); } while(count++ <= max_len) putc (' ', stderr); fprintf (stderr, "%s\n", args[i].help); } } }
void aarg_printusage (struct agetargs *args, const char *progname, const char *extra_string, int style) { struct agetargs *arg; size_t max_len = 0; if (progname == NULL) progname = __progname; if(getenv("GETARGMANDOC")){ mandoc_template(args, extra_string, style); return; } fprintf (stderr, "Usage: %s", progname); for (arg = args; arg->type; arg++) { size_t len = 0; if (arg->long_name) { if (style & AARG_TRANSLONG) { switch (arg->mandatoryp) { case aarg_mandatory: fprintf (stderr, " -"); break; default: fprintf (stderr, " [-"); break; } } else fprintf (stderr, " [--"); if (arg->type == aarg_negative_flag) { fprintf (stderr, "no-"); len += 3; } fprintf (stderr, "%s", arg->long_name); len += 2 + strlen(arg->long_name); len += print_arg (stderr, 0, 1, arg, style); if(arg->type == aarg_strings) fprintf (stderr, "..."); if(!(style & AARG_TRANSLONG) || arg->mandatoryp != aarg_mandatory) putc (']', stderr); } if (arg->short_name) { len += 2; fprintf (stderr, " [-%c", arg->short_name); len += print_arg (stderr, 0, 0, arg, style); putc (']', stderr); if(arg->type == aarg_strings) fprintf (stderr, "..."); } if (arg->long_name && arg->short_name) len += 4; max_len = max(max_len, len); } if (extra_string) fprintf (stderr, " %s\n", extra_string); else fprintf (stderr, "\n"); for (arg = args; arg->type; arg++) { if (arg->help) { size_t count = 0; if (arg->short_name) { fprintf (stderr, "-%c", arg->short_name); count += 2; count += print_arg (stderr, 0, 0, arg, style); } if (arg->short_name && arg->long_name) { fprintf (stderr, " or "); count += 4; } if (arg->long_name) { fprintf (stderr, "-%s", style & AARG_TRANSLONG ? "" : "-"); if (arg->type == aarg_negative_flag) { fprintf (stderr, "no-"); count += 3; } fprintf (stderr, "%s", arg->long_name); count += 2 + strlen(arg->long_name); count += print_arg (stderr, 0, 1, arg, style); } while(count++ <= max_len) putc (' ', stderr); fprintf (stderr, "%s\n", arg->help); } } }
void ROKEN_LIB_FUNCTION arg_printusage_i18n (struct getargs *args, size_t num_args, const char *usage, const char *progname, const char *extra_string, char *(i18n)(const char *)) { int i; size_t max_len = 0; char buf[128]; int col = 0, columns; struct winsize ws; if (progname == NULL) progname = getprogname(); if (i18n == NULL) i18n = builtin_i18n; if(getenv("GETARGMANDOC")){ mandoc_template(args, num_args, progname, extra_string, i18n); return; } if(get_window_size(2, &ws) == 0) columns = ws.ws_col; else columns = 80; col = 0; col += fprintf (stderr, "%s: %s", usage, progname); buf[0] = '\0'; for (i = 0; i < num_args; ++i) { if(args[i].short_name && ISFLAG(args[i])) { char s[2]; if(buf[0] == '\0') strlcpy(buf, "[-", sizeof(buf)); s[0] = args[i].short_name; s[1] = '\0'; strlcat(buf, s, sizeof(buf)); } } if(buf[0] != '\0') { strlcat(buf, "]", sizeof(buf)); col = check_column(stderr, col, strlen(buf) + 1, columns); col += fprintf(stderr, " %s", buf); } for (i = 0; i < num_args; ++i) { size_t len = 0; if (args[i].long_name) { buf[0] = '\0'; strlcat(buf, "[--", sizeof(buf)); len += 2; if(args[i].type == arg_negative_flag) { strlcat(buf, "no-", sizeof(buf)); len += 3; } strlcat(buf, args[i].long_name, sizeof(buf)); len += strlen(args[i].long_name); len += print_arg(buf + strlen(buf), sizeof(buf) - strlen(buf), 0, 1, &args[i], i18n); strlcat(buf, "]", sizeof(buf)); if(args[i].type == arg_strings) strlcat(buf, "...", sizeof(buf)); col = check_column(stderr, col, strlen(buf) + 1, columns); col += fprintf(stderr, " %s", buf); } if (args[i].short_name && !ISFLAG(args[i])) { snprintf(buf, sizeof(buf), "[-%c", args[i].short_name); len += 2; len += print_arg(buf + strlen(buf), sizeof(buf) - strlen(buf), 0, 0, &args[i], i18n); strlcat(buf, "]", sizeof(buf)); if(args[i].type == arg_strings) strlcat(buf, "...", sizeof(buf)); col = check_column(stderr, col, strlen(buf) + 1, columns); col += fprintf(stderr, " %s", buf); } if (args[i].long_name && args[i].short_name) len += 2; /* ", " */ max_len = max(max_len, len); } if (extra_string) { check_column(stderr, col, strlen(extra_string) + 1, columns); fprintf (stderr, " %s\n", extra_string); } else fprintf (stderr, "\n"); for (i = 0; i < num_args; ++i) { if (args[i].help) { size_t count = 0; if (args[i].short_name) { count += fprintf (stderr, "-%c", args[i].short_name); print_arg (buf, sizeof(buf), 0, 0, &args[i], i18n); count += fprintf(stderr, "%s", buf); } if (args[i].short_name && args[i].long_name) count += fprintf (stderr, ", "); if (args[i].long_name) { count += fprintf (stderr, "--"); if (args[i].type == arg_negative_flag) count += fprintf (stderr, "no-"); count += fprintf (stderr, "%s", args[i].long_name); print_arg (buf, sizeof(buf), 0, 1, &args[i], i18n); count += fprintf(stderr, "%s", buf); } while(count++ <= max_len) putc (' ', stderr); fprintf (stderr, "%s\n", (*i18n)(args[i].help)); } } }