1
0
Fork 0

implement usage string generation

This commit is contained in:
Lukas Wurzinger 2022-11-12 14:06:20 +01:00
parent 5acd671462
commit 970dd3b2f7
2 changed files with 250 additions and 20 deletions

View file

@ -1,13 +1,38 @@
#define READARG_IMPLEMENTATION
#define READARG_DEBUG
#include <stdio.h>
#include "../readarg.h"
#include <stdio.h>
enum opt
{
OPT_HELP,
OPT_VERSION,
};
static int write_callback(void *ctx, const char *buf, size_t len);
int main(int argc, char **argv)
{
struct readarg_opt opts[] = {
[OPT_HELP] = {
.names = {
[READARG_FORM_LONG] = READARG_STRINGS("help"),
},
.arg.bounds.val = {
1,
},
},
[OPT_VERSION] = {
.names = {
[READARG_FORM_SHORT] = READARG_STRINGS("V"),
[READARG_FORM_LONG] = READARG_STRINGS("version"),
},
.arg.bounds.val = {
1,
},
},
{
.names = {
[READARG_FORM_SHORT] = READARG_STRINGS("e", "x"),
@ -64,23 +89,6 @@ int main(int argc, char **argv)
},
.arg.bounds.inf = 1,
},
{
.names = {
[READARG_FORM_LONG] = READARG_STRINGS("help"),
},
.arg.bounds.val = {
1,
},
},
{
.names = {
[READARG_FORM_SHORT] = READARG_STRINGS("V"),
[READARG_FORM_LONG] = READARG_STRINGS("version"),
},
.arg.bounds.val = {
1,
},
},
{
0,
},
@ -121,17 +129,37 @@ int main(int argc, char **argv)
opers,
(struct readarg_view_strings){
.strings = (const char **)argv + 1,
.len = argc - 1});
.len = argc - 1,
});
while (readarg_parse(&rp))
;
fprintf(stderr, "error: %d\n", rp.error);
const char *progname = argv[0] == NULL ? "test" : argv[0];
struct readarg_helpgen_writer writer = {
.write = write_callback,
.ctx = NULL,
};
if (rp.error != READARG_ESUCCESS)
{
fprintf(stderr, "Error: %d\n", rp.error);
readarg_helpgen_put_usage(&rp, &writer, progname, "Usage");
return 1;
}
if (rp.opts[OPT_HELP].arg.val.len >= 1)
{
readarg_helpgen_put_usage(&rp, &writer, progname, "Usage");
return 0;
}
if (rp.opts[OPT_VERSION].arg.val.len >= 1)
{
printf("0.0.0\n");
return 0;
}
printf("opt:\n");
{
struct readarg_opt *curr = rp.opts;
@ -176,3 +204,9 @@ int main(int argc, char **argv)
return 0;
}
static int write_callback(void *ctx, const char *buf, size_t len)
{
(void)ctx;
return fwrite(buf, 1, len, stderr) == len;
}