0
|
1 /* smatch.c - match a switch */
|
|
2 #ifndef lint
|
|
3 static char ident[] = "@(#)$Id$";
|
|
4 #endif /* lint */
|
|
5
|
|
6 #include "../h/mh.h"
|
|
7
|
|
8 #ifndef abs
|
|
9 #define abs(i) (i < 0 ? -i : i)
|
|
10 #endif
|
|
11
|
|
12 smatch(string, swp)
|
|
13 register char *string;
|
|
14 register struct swit *swp;
|
|
15 {
|
|
16 register char *sp,
|
|
17 *tcp;
|
|
18 struct swit *tp;
|
|
19 int firstone,
|
|
20 stringlen;
|
|
21
|
|
22 firstone = UNKWNSW;
|
|
23
|
|
24 if (string == 0)
|
|
25 return firstone;
|
|
26
|
|
27 for (stringlen = strlen (string), tp = swp; tcp = tp -> sw; tp++) {
|
|
28 if (stringlen < abs (tp -> minchars))
|
|
29 continue; /* no match */
|
|
30 for (sp = string; *sp == *tcp++;) {
|
|
31 if (*sp++ == 0)
|
|
32 return (tp - swp);/* exact match */
|
|
33 }
|
|
34 if (*sp != 0) {
|
|
35 if (*sp != ' ')
|
|
36 continue; /* no match */
|
|
37 if (*--tcp == 0)
|
|
38 return (tp - swp);/* exact match */
|
|
39 }
|
|
40 if (firstone == UNKWNSW)
|
|
41 firstone = tp - swp;
|
|
42 else
|
|
43 firstone = AMBIGSW;
|
|
44 }
|
|
45
|
|
46 return (firstone);
|
|
47 }
|