Example #1
0
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));

}
Example #2
0
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));

}