Distribute `maninst' script
[cfd] / mdwopt.h
index 3638b7c..9a67426 100644 (file)
--- 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.9 2001/01/20 12:00:36 mdw Exp $
  *
  * Options parsing, similar to GNU @getopt_long@
  *
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: mdwopt.h,v $
+ * Revision 1.9  2001/01/20 12:00:36  mdw
+ * Define flags with macros, to ensure unsignedness.
+ *
+ * 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.
  *
 /* --- @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 */
@@ -137,28 +155,37 @@ enum {
 
 /* --- New style flag names --- */
 
+#define OPTF_NOARG 0u                  /* No argument */
+#define OPTF_ARGREQ 1u                 /* Required argument */
+#define OPTF_ARGOPT 2u                 /* Optional argument */
+#define OPTF_ARG 3u                    /* Argument type bitmask */
+#define OPTF_SWITCH 4u                 /* OR val into flag, don't store */
+#define OPTF_NEGATE 8u                 /* Allow long option to be negated */
+
+#define OPTF_NOLONGS 1u                        /* Don't read long options */
+#define OPTF_NOSHORTS 2u               /* Don't read short options */
+#define OPTF_NUMBERS 4u                        /* Read numeric options */
+#define OPTF_NEGATION 8u               /* Allow `%|+|%' for negations */
+#define OPTF_ENVVAR 16u                        /* Parse options from env var */
+#define OPTF_NOPROGNAME 32u            /* Don't set @optprog@  */
+#define OPTF_NEGNUMBER 64u             /* Allow negated number options */
+
+#define OPTF_NEGATED 256u              /* Option flag was negated by user */
+
+/* --- Older new-style 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 */
+  gFlag_argReq = 1, gFlag_argOpt = 2, gFlag_switch = 4, gFlag_negate = 8
 };
 
 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 */
+  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,                 /* Option flag was negated by user */
-  gFlag__last_return_flag = 0          /* Dummy value */
+  gFlag_negated = 256
 };
 
 /*----- Main code ---------------------------------------------------------*/
@@ -315,7 +342,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 +360,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 +375,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 +389,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
 }