X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=command-line-arguments.h;h=606e5cd005f8e60326a48a7e9501263c343aaaae;hp=af8b1cebd626d9fd5d5ce8fb89af063581e81c64;hb=HEAD;hpb=2cf7b27a0c4b4e746e2e40752c55ddb4d54798b2 diff --git a/command-line-arguments.h b/command-line-arguments.h index af8b1ceb..606e5cd0 100644 --- a/command-line-arguments.h +++ b/command-line-arguments.h @@ -1,16 +1,9 @@ #ifndef NOTMUCH_OPTS_H #define NOTMUCH_OPTS_H -#include "notmuch.h" +#include -enum notmuch_opt_type { - NOTMUCH_OPT_END = 0, - NOTMUCH_OPT_BOOLEAN, /* --verbose */ - NOTMUCH_OPT_INT, /* --frob=8 */ - NOTMUCH_OPT_KEYWORD, /* --format=raw|json|text */ - NOTMUCH_OPT_STRING, /* --file=/tmp/gnarf.txt */ - NOTMUCH_OPT_POSITION /* notmuch dump pos_arg */ -}; +#include "notmuch.h" /* * Describe one of the possibilities for a keyword option @@ -22,41 +15,50 @@ typedef struct notmuch_keyword { int value; } notmuch_keyword_t; -/* - * Describe one option. - * - * First two parameters are mandatory. - * - * name is mandatory _except_ for positional arguments. - * - * arg_id is currently unused, but could define short arguments. - * - * keywords is a (possibly NULL) pointer to an array of keywords - */ +/* Describe one option. */ typedef struct notmuch_opt_desc { - enum notmuch_opt_type opt_type; - void *output_var; + /* One and only one of opt_* must be set. */ + const struct notmuch_opt_desc *opt_inherit; + bool *opt_bool; + int *opt_int; + int *opt_keyword; + int *opt_flags; + const char **opt_string; + const char **opt_position; + + /* for opt_keyword only: if no matching arguments were found, and + * keyword_no_arg_value is set, then use keyword_no_arg_value instead. */ + const char *keyword_no_arg_value; + + /* Must be set except for opt_inherit and opt_position. */ const char *name; - int arg_id; - struct notmuch_keyword *keywords; -} notmuch_opt_desc_t; + /* Optional, if non-NULL, set to true if the option is present. */ + bool *present; -/* - This is the main entry point for command line argument parsing. - - Parse command line arguments according to structure options, - starting at position opt_index. + /* Optional, allow empty strings for opt_string. */ + bool allow_empty; - All output of parsed values is via pointers in options. - - Parsing stops at -- (consumed) or at the (k+1)st argument - not starting with -- (a "positional argument") if options contains - k positional argument descriptors. + /* Must be set for opt_keyword and opt_flags. */ + const struct notmuch_keyword *keywords; +} notmuch_opt_desc_t; - Returns the index of first non-parsed argument, or -1 in case of error. -*/ +/* + * This is the main entry point for command line argument parsing. + * + * Parse command line arguments according to structure options, + * starting at position opt_index. + * + * All output of parsed values is via pointers in options. + * + * Parsing stops at -- (consumed) or at the (k+1)st argument + * not starting with -- (a "positional argument") if options contains + * k positional argument descriptors. + * + * Returns the index of first non-parsed argument, or -1 in case of error. + * + */ int parse_arguments (int argc, char **argv, const notmuch_opt_desc_t *options, int opt_index); @@ -68,13 +70,13 @@ parse_arguments (int argc, char **argv, const notmuch_opt_desc_t *options, int o * functions. */ -notmuch_bool_t -parse_option (const char *arg, const notmuch_opt_desc_t* options); +int +parse_option (int argc, char **argv, const notmuch_opt_desc_t *options, int opt_index); -notmuch_bool_t +bool parse_position_arg (const char *arg, int position_arg_index, - const notmuch_opt_desc_t* options); + const notmuch_opt_desc_t *options); #endif