X-Git-Url: https://git.distorted.org.uk/~mdw/cfd/blobdiff_plain/9cecacb1b693c7cfd95f67748544132bd6171868..c7c126d4579f3aea02a0800922a0d0994420f7ba:/mdwopt.h diff --git a/mdwopt.h b/mdwopt.h index 3638b7c..1205b7b 100644 --- a/mdwopt.h +++ b/mdwopt.h @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: mdwopt.h,v 1.4 1999/05/15 10:25:38 mdw Exp $ + * $Id: mdwopt.h,v 1.8 1999/08/19 18:37:43 mdw Exp $ * * Options parsing, similar to GNU @getopt_long@ * @@ -30,6 +30,19 @@ /*----- Revision history --------------------------------------------------* * * $Log: mdwopt.h,v $ + * Revision 1.8 1999/08/19 18:37:43 mdw + * Fix stupid error. + * + * Revision 1.7 1999/08/19 18:35:10 mdw + * Add a couple more flag constants. + * + * Revision 1.6 1999/05/20 23:00:30 mdw + * Carry through changes to the interface properly in the documentation. + * Other little formatting things. + * + * Revision 1.5 1999/05/19 20:23:59 mdw + * Change naming to match newer mLib conventions. + * * Revision 1.4 1999/05/15 10:25:38 mdw * Fix copyright information. * @@ -74,10 +87,12 @@ /* --- @mdwopt_data@ --- * * * Contains all the information needed by the @mdwopt@ routine to do its - * work. + * work. Try not to use @prog@ any more. If you're using mLib, the @quis@/ + * @ego@ interface works better. */ typedef struct { + /* --- Public variables --- */ char *arg; /* Arg of current option, or 0 */ @@ -138,27 +153,42 @@ enum { /* --- New style flag names --- */ enum { - gFlag_argReq = 1, /* Required argument */ - gFlag_argOpt = 2, /* Optional argument */ - gFlag_switch = 4, /* OR val into flag, don't store */ - gFlag_negate = 8, /* Allow long option to be negated */ - gFlag__last_long_opt_flag = 0 /* Dummy value */ + OPTF_NOARG = 0, /* No argument */ + OPTF_ARGREQ = 1, /* Required argument */ + OPTF_ARGOPT = 2, /* Optional argument */ + OPTF_ARG = 3, /* Argument type bitmask */ + OPTF_SWITCH = 4, /* OR val into flag, don't store */ + OPTF_NEGATE = 8 /* Allow long option to be negated */ +}; + +enum { + OPTF_NOLONGS = 1, /* Don't read long options */ + OPTF_NOSHORTS = 2, /* Don't read short options */ + OPTF_NUMBERS = 4, /* Read numeric options */ + OPTF_NEGATION = 8, /* Allow `%|+|%' for negations */ + OPTF_ENVVAR = 16, /* Parse options from env var */ + OPTF_NOPROGNAME = 32, /* Don't set @optprog@ */ + OPTF_NEGNUMBER = 64 /* Allow negated number options */ }; enum { - gFlag_noLongs = 1, /* Don't read long options */ - gFlag_noShorts = 2, /* Don't read short options */ - gFlag_numbers = 4, /* Read numeric options */ - gFlag_negation = 8, /* Allow `%|+|%' for negations */ - gFlag_envVar = 16, /* Parse options from env var */ - gFlag_noProgName = 32, /* Don't set @optprog@ */ - gFlag_negNumber = 64, /* Allow negated number options */ - gFlag__last_mdwopt_flag = 0 /* Dummy value */ + OPTF_NEGATED = 256 /* Option flag was negated by user */ +}; + +/* --- Older new-style names --- */ + +enum { + gFlag_argReq = 1, gFlag_argOpt = 2, gFlag_switch = 4, gFlag_negate = 8 }; enum { - gFlag_negated = 256, /* Option flag was negated by user */ - gFlag__last_return_flag = 0 /* Dummy value */ + gFlag_noLongs = 1, gFlag_noShorts = 2, gFlag_numbers = 4, + gFlag_negation = 8, gFlag_envVar = 16, gFlag_noProgName = 32, + gFlag_negNumber = 64 +}; + +enum { + gFlag_negated = 256 }; /*----- Main code ---------------------------------------------------------*/ @@ -315,7 +345,7 @@ enum { * the caller. A pointer to an argument is stored in * @data->arg@, or @NULL@ is stored if there was no argument. * If a negated option was found, the option character is - * returned ORred with @gFlag_negated@ (bit 8 set). + * returned ORred with @OPTF_NEGATED@ (bit 8 set). * * Long options are described in a table. Each entry in the * table is of type @struct option@, and the table is terminated @@ -333,9 +363,9 @@ enum { * table entry. If @flag@ is nonzero, it points to an integer * to be modified by mdwopt. Usually the value in the @val@ * field is simply stored in the @flag@ variable. If the flag - * @gFlag_switch@ is set, however, the value is combined with + * @OPTF_SWITCH@ is set, however, the value is combined with * the existing value of the flags using a bitwise OR. If - * @gFlag_negate@ is set, then the flag bit will be cleared if a + * @OPTF_NEGATE@ is set, then the flag bit will be cleared if a * matching negated long option is found. The value 0 is * returned. * @@ -348,11 +378,12 @@ enum { * Numeric options, if enabled, cause the value `%|#|%' to be * returned, and the numeric value to be stored in @data->opt@. * - * If the flag @gFlag_envVar@ is set on entry, options will be + * If the flag @OPTF_ENVVAR@ is set on entry, options will be * extracted from an environment variable whose name is built by - * capitalising all the letters of the program's name. (This + * capitalizing all the letters of the program's name. (This * allows a user to have different default settings for a - * program, by calling it through different symbolic links.) */ + * program, by calling it through different symbolic links.) + */ extern int mdwopt(int /*argc*/, char *const */*argv*/, const char */*shortopt*/, @@ -361,10 +392,10 @@ extern int mdwopt(int /*argc*/, char *const */*argv*/, /* --- Macros for more commonly used routines --- */ -#define getopt(c, v, o) mdwopt(c, v, o, 0, 0, 0, gFlag_noLongs) +#define getopt(c, v, o) mdwopt(c, v, o, 0, 0, 0, OPTF_NOLONGS) #define getopt_long(c, v, o, l, li) mdwopt(c, v, o, l, li, 0, 0) #define getopt_long_only(c, v, o, l, li) \ - mdwopt(c, v, o, l, li, 0, gFlag_noShorts) + mdwopt(c, v, o, l, li, 0, OPTF_NOSHORTS) #ifdef __cplusplus }