From 65df5337052b06a1e16551e51add8f6f9dc8b563 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Thu, 31 Dec 1998 16:18:46 +0000 Subject: lots of changes from Akim Demaille. --- lib/argmatch.h | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 106 insertions(+), 9 deletions(-) (limited to 'lib/argmatch.h') diff --git a/lib/argmatch.h b/lib/argmatch.h index 43ea5dbf4..5abce4ca9 100644 --- a/lib/argmatch.h +++ b/lib/argmatch.h @@ -1,12 +1,109 @@ -/* argmatch.h -- declarations for matching arguments against option lists */ +/* argmatch.c -- find a match for a string in an array + Copyright (C) 1990, 1998 Free Software Foundation, Inc. -#if defined __STDC__ || __GNUC__ -# define __ARGMATCH_P(args) args -#else -# define __ARGMATCH_P(args) () -#endif + 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 + the Free Software Foundation; either version 2, or (at your option) + any later version. -int argmatch __ARGMATCH_P ((const char *, const char * const *)); -void invalid_arg __ARGMATCH_P ((const char *, const char *, int)); + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -extern char *program_name; + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* Written by David MacKenzie + Modified by Akim Demaille */ + +#ifndef _ARGMATCH_H_ +# define _ARGMATCH_H_ 1 + +# if HAVE_CONFIG_H +# include +# endif + +# include + +# ifndef PARAMS +# if PROTOTYPES || (defined (__STDC__) && __STDC__) +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif /* GCC. */ +# endif /* Not PARAMS. */ + +/* Return the index of the element of ARGLIST (NULL terminated) that + matches with ARG. If VALLIST is not NULL, then use it to resolve + false ambiguities (i.e., different matches of ARG but corresponding + to the same values in VALLIST). */ + +int argmatch + 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)); + +# 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)) + + + +/* Report on stderr why argmatch failed. Report correct values. */ + +void argmatch_invalid + 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) + + + +/* 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)] + + + +/* 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)); + +# define ARGMATCH_TO_ARGUMENT(VALUE,ARGLIST,VALLIST) \ + argmatch_to_argument ((char *) &VALUE, ARGLIST, \ + (const char *) VALLIST, sizeof (*VALLIST)) + +#endif /* _ARGMATCH_H_ */ -- cgit v1.2.3-54-g00ecf