diff options
author | Werner Koch <[email protected]> | 2024-02-06 13:53:59 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-02-06 13:53:59 +0000 |
commit | b113114c7498fc6c48065a8c4816c610c6f08198 (patch) | |
tree | 1970a988d092ca7dd82f7386125c393f15305862 /tests/t-argparse.c | |
parent | gpgrt-config: Avoid warning about literals for curly braces. (diff) | |
download | libgpg-error-b113114c7498fc6c48065a8c4816c610c6f08198.tar.gz libgpg-error-b113114c7498fc6c48065a8c4816c610c6f08198.zip |
argparser: Implement a command mode.
* src/gpg-error.h.in (ARGPARSE_FLAG_COMMAND): New.
* src/argparse.c (struct _gpgrt_argparse_internal_s): Add flags
explicit_cmd_mode, cmd_mode, and command_seen.
(initialize): Init them. Mark default commands as commands.
(handle_meta_command): New.
(handle_metacmd): Add "command-mode" and "-command-mode".
(find_long_option): Add arg only_commands.
(arg_parse): Factor some code out to ...
(handle_special_commands): new.
(arg_parse): Implement the command-mode.
* tests/t-argparse.c (main): Add some testing code.
--
GnuPG-bug-id: 6978
Diffstat (limited to 'tests/t-argparse.c')
-rw-r--r-- | tests/t-argparse.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/t-argparse.c b/tests/t-argparse.c index 4d24e5f..6085066 100644 --- a/tests/t-argparse.c +++ b/tests/t-argparse.c @@ -68,6 +68,9 @@ main (int argc, char **argv) { gpgrt_opt_t opts[] = { ARGPARSE_verbatim("Now for the options:\n"), + ARGPARSE_c (601, "foo", "Command FOO"), + ARGPARSE_c (602, "bar", "Command BAR"), + ARGPARSE_c (603, "foobar", "Command FOOBAR"), ARGPARSE_x ('v', "verbose", NONE, 0, "Laut sein"), ARGPARSE_s_n('e', "echo" , ("Zeile ausgeben, damit wir sehen, " "was wir eingegeben haben")), @@ -96,6 +99,10 @@ main (int argc, char **argv) int i; const char *srcdir; int any_warn = 0; + int command = -1; + + if (getenv ("argparse_flag_command")) + pargs.flags |= ARGPARSE_FLAG_COMMAND; gpgrt_set_strusage (my_strusage); srcdir = getenv ("srcdir"); @@ -139,11 +146,20 @@ main (int argc, char **argv) case 'M': opt.myopt = 0; break; case 's': opt.street = pargs.r.ret_str; break; case 500: opt.a_long_one++; break; + + case 601: + case 602: + case 603: + command = pargs.r_opt; + break; + default : pargs.err = ARGPARSE_PRINT_WARNING; any_warn = 1; break; } } for (i=0; i < argc; i++ ) printf ("%3d -> (%s)\n", i, argv[i] ); + if (command >= 0) + printf ("Command: %d\n", command); if (opt.verbose) puts ("Options:"); if (opt.verbose) |