static void print_help(struct cliopts_priv *ctx, struct cliopts_extra_settings *settings) { cliopts_entry *cur; cliopts_entry helpent = { 0 }; char helpbuf[1024] = { 0 }; helpent.klong = "help"; helpent.kshort = '?'; helpent.help = "this message"; fprintf(stderr, "Usage:\n"); fprintf(stderr, " %s %s\n\n", settings->progname, settings->argstring); if (settings->shortdesc) { fprintf(stderr, "%s", settings->shortdesc); fprintf(stderr, "\n"); } for (cur = ctx->entries; cur->dest; cur++) { if (cur->hidden) { continue; } memset(helpbuf, 0, sizeof(helpbuf)); format_option_help(cur, helpbuf, settings); fprintf(stderr, INDENT "%s", helpbuf); if (settings->show_defaults) { fprintf(stderr, " [Default="); switch (cur->ktype) { case CLIOPTS_ARGT_STRING: fprintf(stderr, "'%s'", (cur->dest && *(char **)cur->dest) ? *(char**)cur->dest : ""); break; case CLIOPTS_ARGT_LIST: { size_t ii; cliopts_list *l = (cliopts_list *)cur->dest; for (ii = 0; ii < l->nvalues; ii++) { fprintf(stderr, "'%s'", l->values[ii]); if (ii != l->nvalues-1) { fprintf(stderr, ", "); } } break; } case CLIOPTS_ARGT_FLOAT: fprintf(stderr, "%0.2f", *(float*)cur->dest); break; case CLIOPTS_ARGT_HEX: fprintf(stderr, "0x%x", *(int*)cur->dest); break; case CLIOPTS_ARGT_INT: fprintf(stderr, "%d", *(int*)cur->dest); break; case CLIOPTS_ARGT_UINT: fprintf(stderr, "%u", *(unsigned int*)cur->dest); break; #ifdef ULLONG_MAX case CLIOPTS_ARGT_ULONGLONG: fprintf(stderr, "%llu", *(unsigned long long*)cur->dest); break; #endif case CLIOPTS_ARGT_NONE: fprintf(stderr, "%s", *(int*)cur->dest ? "TRUE" : "FALSE"); break; default: fprintf(stderr, "Unknown option type '%d'", (int)cur->ktype); break; } fprintf(stderr, "]"); } fprintf(stderr, "\n"); } memset(helpbuf, 0, sizeof(helpbuf)); fprintf(stderr, INDENT "%s\n", format_option_help(&helpent, helpbuf, settings)); }
static void print_help(struct cliopts_priv *ctx, struct cliopts_extra_settings *settings) { cliopts_entry *cur; cliopts_entry helpent = { 0 }; char helpbuf[1024] = { 0 }; helpent.klong = "help"; helpent.kshort = '?'; helpent.help = "this message"; fprintf(stderr, "Usage:\n"); fprintf(stderr, " %s [OPTIONS...]\n\n", settings->progname); for (cur = ctx->entries; cur->dest; cur++) { if (cur->hidden) { continue; } memset(helpbuf, 0, sizeof(helpbuf)); format_option_help(cur, helpbuf, settings); fprintf(stderr, INDENT "%s", helpbuf); if (settings->show_defaults) { fprintf(stderr, " [Default="); switch (cur->ktype) { case CLIOPTS_ARGT_STRING: fprintf(stderr, "'%s'", (cur->dest && *(char **)cur->dest) ? *(char**)cur->dest : ""); break; case CLIOPTS_ARGT_FLOAT: fprintf(stderr, "%0.2f", *(float*)cur->dest); break; case CLIOPTS_ARGT_HEX: fprintf(stderr, "0x%x", *(int*)cur->dest); break; case CLIOPTS_ARGT_INT: fprintf(stderr, "%d", *(int*)cur->dest); break; case CLIOPTS_ARGT_UINT: fprintf(stderr, "%u", *(unsigned int*)cur->dest); break; case CLIOPTS_ARGT_NONE: fprintf(stderr, "%s", *(int*)cur->dest ? "TRUE" : "FALSE"); break; default: fprintf(stderr, "Unknown option type '%d'", (int)cur->ktype); break; } fprintf(stderr, "]"); } fprintf(stderr, "\n"); } memset(helpbuf, 0, sizeof(helpbuf)); fprintf(stderr, INDENT "%s\n", format_option_help(&helpent, helpbuf, settings)); }