Mercurial > hg > octave-kai > gnulib-hg
annotate lib/argmatch.h @ 1669:cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
(ARGMATCH_ASSERT): New macro.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Mon, 25 Jan 1999 14:52:13 +0000 |
parents | d055f19f4195 |
children | 5994c6f939c5 |
rev | line source |
---|---|
1588 | 1 /* argmatch.h -- definitions and prototypes for argmatch.c |
1612
c538e58c8007
(XARGMATCH): Don't return a value; instead, modify a parameter.
Jim Meyering <jim@meyering.net>
parents:
1602
diff
changeset
|
2 Copyright (C) 1990, 1998, 1999 Free Software Foundation, Inc. |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
3 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
4 This program is free software; you can redistribute it and/or modify |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
5 it under the terms of the GNU General Public License as published by |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
6 the Free Software Foundation; either version 2, or (at your option) |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
7 any later version. |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
8 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
9 This program is distributed in the hope that it will be useful, |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
10 but WITHOUT ANY WARRANTY; without even the implied warranty of |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
12 GNU General Public License for more details. |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
13 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
14 You should have received a copy of the GNU General Public License |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
15 along with this program; if not, write to the Free Software Foundation, |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
17 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
18 /* Written by David MacKenzie <djm@ai.mit.edu> |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
19 Modified by Akim Demaille <demaille@inf.enst.fr> */ |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
20 |
1602
ef61182520b2
remove leading _ from _ARGMATCH_H_
Jim Meyering <jim@meyering.net>
parents:
1592
diff
changeset
|
21 #ifndef ARGMATCH_H_ |
ef61182520b2
remove leading _ from _ARGMATCH_H_
Jim Meyering <jim@meyering.net>
parents:
1592
diff
changeset
|
22 # define ARGMATCH_H_ 1 |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
23 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
24 # if HAVE_CONFIG_H |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
25 # include <config.h> |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
26 # endif |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
27 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
28 # include <sys/types.h> |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
29 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
30 # ifndef PARAMS |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
31 # if PROTOTYPES || (defined (__STDC__) && __STDC__) |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
32 # define PARAMS(args) args |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
33 # else |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
34 # define PARAMS(args) () |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
35 # endif /* GCC. */ |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
36 # endif /* Not PARAMS. */ |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
37 |
1669
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
38 /* Assert there are as many real arguments as there are values |
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
39 (argument list ends with a NULL guard). There is no execution |
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
40 cost, since it will be statically evalauted to `assert (0)' or |
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
41 `assert (1)'. Unfortunately there is no -Wassert-0. */ |
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
42 |
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
43 # undef ARRAY_CARDINALITY |
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
44 # define ARRAY_CARDINALITY(Array) (sizeof ((Array)) / sizeof (*(Array))) |
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
45 |
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
46 # define ARGMATCH_ASSERT(Arglist, Vallist) \ |
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
47 assert (ARRAY_CARDINALITY ((Arglist)) == ARRAY_CARDINALITY ((Vallist)) + 1) |
cfd4c2c2d1fe
(ARRAY_CARDINALITY): Define.
Jim Meyering <jim@meyering.net>
parents:
1666
diff
changeset
|
48 |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
49 /* Return the index of the element of ARGLIST (NULL terminated) that |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
50 matches with ARG. If VALLIST is not NULL, then use it to resolve |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
51 false ambiguities (i.e., different matches of ARG but corresponding |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
52 to the same values in VALLIST). */ |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
53 |
1588 | 54 int argmatch |
1591 | 55 PARAMS ((const char *arg, const char *const *arglist, |
56 const char *vallist, size_t valsize)); | |
1588 | 57 int argcasematch |
1591 | 58 PARAMS ((const char *arg, const char *const *arglist, |
59 const char *vallist, size_t valsize)); | |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
60 |
1592 | 61 # define ARGMATCH(Arg, Arglist, Vallist) \ |
1612
c538e58c8007
(XARGMATCH): Don't return a value; instead, modify a parameter.
Jim Meyering <jim@meyering.net>
parents:
1602
diff
changeset
|
62 argmatch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist))) |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
63 |
1591 | 64 # define ARGCASEMATCH(Arg, Arglist, Vallist) \ |
1612
c538e58c8007
(XARGMATCH): Don't return a value; instead, modify a parameter.
Jim Meyering <jim@meyering.net>
parents:
1602
diff
changeset
|
65 argcasematch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist))) |
530 | 66 |
1666 | 67 /* xargmatch calls this function when it fails. This function should not |
68 return. By default, this is a function that calls ARGMATCH_DIE which | |
1665 | 69 in turn defaults to `exit (EXIT_FAILURE)'. */ |
1645
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
70 typedef void (*argmatch_exit_fn) PARAMS ((void)); |
1647
af020f6709a9
s/argmatch_exit_failure/argmatch_die/
Jim Meyering <jim@meyering.net>
parents:
1645
diff
changeset
|
71 extern argmatch_exit_fn argmatch_die; |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
72 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
73 /* Report on stderr why argmatch failed. Report correct values. */ |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
74 |
1588 | 75 void argmatch_invalid |
1645
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
76 PARAMS ((const char *context, const char *value, int problem)); |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
77 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
78 /* Left for compatibility with the old name invalid_arg */ |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
79 |
1645
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
80 # define invalid_arg(Context, Value, Problem) \ |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
81 argmatch_invalid ((Context), (Value), (Problem)) |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
82 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
83 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
84 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
85 /* Report on stderr the list of possible arguments. */ |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
86 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
87 void argmatch_valid |
1591 | 88 PARAMS ((const char *const *arglist, |
89 const char *vallist, size_t valsize)); | |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
90 |
1591 | 91 # define ARGMATCH_VALID(Arglist, Vallist) \ |
1645
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
92 argmatch_valid (Arglist, (const char *) Vallist, sizeof (*(Vallist))) |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
93 |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
94 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
95 |
1645
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
96 /* Same as argmatch, but upon failure, reports a explanation on the |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
97 failure, and exits using the function EXIT_FN. */ |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
98 |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
99 int __xargmatch_internal |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
100 PARAMS ((const char *context, |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
101 const char *arg, const char *const *arglist, |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
102 const char *vallist, size_t valsize, |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
103 int case_sensitive, argmatch_exit_fn exit_fn)); |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
104 |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
105 /* Programmer friendly interface to __xargmatch_internal. */ |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
106 |
1645
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
107 # define XARGMATCH(Context, Arg, Arglist, Vallist) \ |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
108 (Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \ |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
109 (const char *) (Vallist), \ |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
110 sizeof (*(Vallist)), \ |
1647
af020f6709a9
s/argmatch_exit_failure/argmatch_die/
Jim Meyering <jim@meyering.net>
parents:
1645
diff
changeset
|
111 1, argmatch_die)]) |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
112 |
1645
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
113 # define XARGCASEMATCH(Context, Arg, Arglist, Vallist) \ |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
114 (Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \ |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
115 (const char *) (Vallist), \ |
cb8655b1684e
(XARGMATCH): Define to return a value once again.
Jim Meyering <jim@meyering.net>
parents:
1612
diff
changeset
|
116 sizeof (*(Vallist)), \ |
1647
af020f6709a9
s/argmatch_exit_failure/argmatch_die/
Jim Meyering <jim@meyering.net>
parents:
1645
diff
changeset
|
117 0, argmatch_die)]) |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
118 |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
119 /* Convert a value into a corresponding argument. */ |
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
120 |
1591 | 121 const char *argmatch_to_argument |
1612
c538e58c8007
(XARGMATCH): Don't return a value; instead, modify a parameter.
Jim Meyering <jim@meyering.net>
parents:
1602
diff
changeset
|
122 PARAMS ((char const *value, const char *const *arglist, |
1591 | 123 const char *vallist, size_t valsize)); |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
124 |
1612
c538e58c8007
(XARGMATCH): Don't return a value; instead, modify a parameter.
Jim Meyering <jim@meyering.net>
parents:
1602
diff
changeset
|
125 # define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \ |
c538e58c8007
(XARGMATCH): Don't return a value; instead, modify a parameter.
Jim Meyering <jim@meyering.net>
parents:
1602
diff
changeset
|
126 argmatch_to_argument ((char const *) &(Value), (Arglist), \ |
c538e58c8007
(XARGMATCH): Don't return a value; instead, modify a parameter.
Jim Meyering <jim@meyering.net>
parents:
1602
diff
changeset
|
127 (const char *) (Vallist), sizeof (*(Vallist))) |
1587
3f067a341196
lots of changes from Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
925
diff
changeset
|
128 |
1602
ef61182520b2
remove leading _ from _ARGMATCH_H_
Jim Meyering <jim@meyering.net>
parents:
1592
diff
changeset
|
129 #endif /* ARGMATCH_H_ */ |