/* argmatch.h -- definitions and prototypes for argmatch.c
- Copyright (C) 1990, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/* Written by David MacKenzie <djm@ai.mit.edu>
Modified by Akim Demaille <demaille@inf.enst.fr> */
-#ifndef _ARGMATCH_H_
-# define _ARGMATCH_H_ 1
+#ifndef ARGMATCH_H_
+# define ARGMATCH_H_ 1
# if HAVE_CONFIG_H
# include <config.h>
to the same values in VALLIST). */
int argmatch
- PARAMS ((const char *arg, const char *const *arglist,
- const char *vallist, size_t valsize));
+ PARAMS ((const char *arg, const char *const *arglist,
+ const char *vallist, size_t valsize));
int argcasematch
- PARAMS ((const char *arg, const char *const *arglist,
- const char *vallist, size_t valsize));
+ PARAMS ((const char *arg, const char *const *arglist,
+ const char *vallist, size_t valsize));
-# define ARGMATCH(ARG,ARGLIST,VALLIST) \
- argmatch (ARG, ARGLIST, (const char *) VALLIST, sizeof (*VALLIST))
+# define ARGMATCH(Arg, Arglist, Vallist) \
+ argmatch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist)))
-# define ARGCASEMATCH(ARG,ARGLIST,VALLIST) \
- argcasematch (ARG, ARGLIST, (const char *) VALLIST, sizeof (*VALLIST))
+# define ARGCASEMATCH(Arg, Arglist, Vallist) \
+ argcasematch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist)))
/* Report on stderr why argmatch failed. Report correct values. */
void argmatch_invalid
- PARAMS ((const char *kind, const char *value, int problem));
+ PARAMS ((const char *kind, const char *value, int problem));
/* Left for compatibility with the old name invalid_arg */
-# define invalid_arg(KIND,VALUE,PROBLEM) \
- argmatch_invalid (KIND, VALUE, PROBLEM)
+# define invalid_arg(Kind, Value, Problem) \
+ argmatch_invalid ((Kind), (Value), (Problem))
/* Report on stderr the list of possible arguments. */
void argmatch_valid
- PARAMS ((const char *const *arglist,
- const char *vallist, size_t valsize));
-
-# define ARGMATCH_VALID(ARGLIST,VALLIST) \
- valid_args (ARGLIST, (const char *) VALLIST, sizeof (*VALLIST))
-
-
-/* Returns matches, or, upon error, report explanatory message and
- exit. */
-
-int __xargmatch_internal
- PARAMS ((const char *kind,
- const char *arg, const char *const *arglist,
- const char *vallist, size_t valsize,
- int sensitive));
-
-# define XARGMATCH(KIND,ARG,ARGLIST,VALLIST) \
- VALLIST [__xargmatch_internal (KIND, ARG, ARGLIST, \
- (const char *) VALLIST, sizeof (*VALLIST), 1)]
-
-# define XARGCASEMATCH(KIND,ARG,ARGLIST,VALLIST) \
- VALLIST [__xargmatch_internal (KIND, ARG, ARGLIST, \
- (const char *) VALLIST, sizeof (*VALLIST), 0)]
-
+ PARAMS ((const char *const *arglist,
+ const char *vallist, size_t valsize));
+
+# define ARGMATCH_VALID(Arglist, Vallist) \
+ argmatch_valid (Arglist, (const char *) Vallist, sizeof (*Vallist))
+
+
+/* Set *Result_ptr to the value in Vallist corresponding to the Arg
+ in Arglist. If Arg doesn't match any string in Arglist, give a
+ diagnostic and (presumably) exit via the Die_stmt, leaving *Result_ptr
+ unmodified. */
+
+# define XARGMATCH(Result_ptr, Kind, Arg, Arglist, Vallist, Die_stmt) \
+ do \
+ { \
+ int _i = ARGMATCH (Arg, Arglist, Vallist); \
+ if (_i >= 0) \
+ *(Result_ptr) = (Vallist) [_i]; \
+ else \
+ { \
+ argmatch_invalid ((Kind), (Arg), _i); \
+ ARGMATCH_VALID (Arglist, Vallist); \
+ Die_stmt; \
+ } \
+ } \
+ while (0)
/* Convert a value into a corresponding argument. */
-const char * argmatch_to_argument
- PARAMS ((char * value, const char *const *arglist,
- const char *vallist, size_t valsize));
+const char *argmatch_to_argument
+ PARAMS ((char const *value, const char *const *arglist,
+ const char *vallist, size_t valsize));
-# define ARGMATCH_TO_ARGUMENT(VALUE,ARGLIST,VALLIST) \
- argmatch_to_argument ((char *) &VALUE, ARGLIST, \
- (const char *) VALLIST, sizeof (*VALLIST))
+# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \
+ argmatch_to_argument ((char const *) &(Value), (Arglist), \
+ (const char *) (Vallist), sizeof (*(Vallist)))
-#endif /* _ARGMATCH_H_ */
+#endif /* ARGMATCH_H_ */