aboutsummaryrefslogtreecommitdiffstats
path: root/tests/t-argparse.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2024-02-06 13:53:59 +0000
committerWerner Koch <[email protected]>2024-02-06 13:53:59 +0000
commitb113114c7498fc6c48065a8c4816c610c6f08198 (patch)
tree1970a988d092ca7dd82f7386125c393f15305862 /tests/t-argparse.c
parentgpgrt-config: Avoid warning about literals for curly braces. (diff)
downloadlibgpg-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.c16
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)