X-Git-Url: http://git.draconx.ca/gitweb/dxcommon.git/blobdiff_plain/5d7b80ce6f21d6d90ecec188f135e665d789dede..03a26752c80546ac8cf8fc81807bb5a153786599:/t/helpopt.c diff --git a/t/helpopt.c b/t/helpopt.c index 303e13a..51b08a7 100644 --- a/t/helpopt.c +++ b/t/helpopt.c @@ -1,7 +1,33 @@ /* - * Read some text from standard input and format it with help_print_desc, - * for testing. Each pair of program arguments is converted to an int and - * passed as the two integer arguments to help_print_desc. + * Copyright © 2021-2022 Nick Bowler + * + * Test helper application to verify help_print_optstring operation. + * + * Command-line arguments are collected to create the options to be formatted. + * There are six basic forms: + * + * --long-option-only + * --long-option-with-argument arg + * --long-option-with-optional-argument [arg] + * --short-option -s arg + * --short-option-with-argument -s arg + * --short-option-with-optional-argument -s [arg] + * + * Adding an argument of '&' to any form will set the "flag" member of + * the option structure to a non-null value. + * + * Based on these arguments, a suitable 'struct option' is constructed and + * passed to help_print_optstring. Then a tab character is printed, followed + * by the return value of help_print_optsring (via printf %d). Then further + * arguments are considered to output more options. + * + * Initially, the "l" value passed to help_print_optstring is 20. This can be + * changed at any point by a numeric command-line argument, which will set a + * new value that applies to all subsequent calls until it is changed again. + * + * License WTFPL2: Do What The Fuck You Want To Public License, version 2. + * This is free software: you are free to do what the fuck you want to. + * There is NO WARRANTY, to the extent permitted by law. */ #include "help.h" #include "tap.h" @@ -14,8 +40,6 @@ #include -static char buf[1000]; - int arg_to_int(const char *s) { char *end; @@ -52,6 +76,7 @@ int main(int argc, char **argv) opt.val = UCHAR_MAX+1; opt.has_arg = 0; opt.name = argv[i]+2; + opt.flag = NULL; } else if (argv[i][0] == '-') { opt.val = argv[i][1]; } else if (argv[i][0] == '[') { @@ -61,6 +86,9 @@ int main(int argc, char **argv) if ((c = strchr(argname, ']'))) *c = 0; opt.has_arg = 2; + } else if (argv[i][0] == '&') { + static int dummy; + opt.flag = &dummy; } else if (argv[i][0] >= '0' && argv[i][0] <= '9') { w = arg_to_int(argv[i]); } else {