dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / lib / libast / common / tm / tmword.c
blob4ab0bedfd6c266cfe4d641051ae8de5f6e25ba7a
1 /***********************************************************************
2 * *
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
8 * *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
12 * *
13 * Information and Software Systems Research *
14 * AT&T Research *
15 * Florham Park NJ *
16 * *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
20 * *
21 ***********************************************************************/
22 #pragma prototyped
24 * Glenn Fowler
25 * AT&T Bell Laboratories
27 * time conversion support
30 #include <ast.h>
31 #include <tm.h>
32 #include <ctype.h>
35 * match s against t ignoring case and .'s
37 * suf is an n element table of suffixes that may trail s
38 * if all isalpha() chars in s match then 1 is returned
39 * and if e is non-null it will point to the first unmatched
40 * char in s, otherwise 0 is returned
43 int
44 tmword(register const char* s, char** e, register const char* t, char** suf, int n)
46 register int c;
47 const char* b;
49 if (*s && *t)
51 b = s;
52 while (c = *s++)
54 if (c != '.')
56 if (!isalpha(c) || c != *t && (islower(c) ? toupper(c) : tolower(c)) != *t)
57 break;
58 t++;
61 s--;
62 if (!isalpha(c))
64 if (c == '_')
65 s++;
66 if (e)
67 *e = (char*)s;
68 return s > b;
70 if (!*t && s > (b + 1))
72 b = s;
73 while (n-- && (t = *suf++))
75 s = b;
76 while (isalpha(c = *s++) && (c == *t || (islower(c) ? toupper(c) : tolower(c)) == *t)) t++;
77 if (!*t && !isalpha(c))
79 if (c != '_')
80 s--;
81 if (e)
82 *e = (char*)s;
83 return 1;
88 return 0;