annotate sbr/smatch.c @ 9:52d0fa25c554 currrent-release

bug fix
author kono
date Sun, 04 Dec 2005 03:21:49 +0900
parents bce86c4163a3
children 441a2190cfae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 /* smatch.c - match a switch */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #ifndef lint
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3 static char ident[] = "@(#)$Id$";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4 #endif /* lint */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 #include "../h/mh.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 #ifndef abs
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 #define abs(i) (i < 0 ? -i : i)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 smatch(string, swp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 register char *string;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 register struct swit *swp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 register char *sp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 *tcp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 struct swit *tp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 int firstone,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 stringlen;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 firstone = UNKWNSW;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 if (string == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 return firstone;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 for (stringlen = strlen (string), tp = swp; tcp = tp -> sw; tp++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 if (stringlen < abs (tp -> minchars))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 continue; /* no match */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 for (sp = string; *sp == *tcp++;) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 if (*sp++ == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 return (tp - swp);/* exact match */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 if (*sp != 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 if (*sp != ' ')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 continue; /* no match */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37 if (*--tcp == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 return (tp - swp);/* exact match */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 if (firstone == UNKWNSW)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 firstone = tp - swp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 firstone = AMBIGSW;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 return (firstone);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 }