1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2007 AT&T Knowledge Ventures * 5 * and is licensed under the * 6 * Common Public License, Version 1.0 * 7 * by AT&T Knowledge Ventures * 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 23 /* 24 * Glenn Fowler 25 * AT&T Bell Laboratories 26 * 27 * time conversion support 28 */ 29 30 #include <ast.h> 31 #include <tm.h> 32 #include <ctype.h> 33 34 /* 35 * match s against t ignoring case and .'s 36 * 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 41 */ 42 43 int 44 tmword(register const char* s, char** e, register const char* t, char** suf, int n) 45 { 46 register int c; 47 const char* b; 48 49 if (*s && *t) 50 { 51 b = s; 52 while (c = *s++) 53 { 54 if (c != '.') 55 { 56 if (!isalpha(c) || c != *t && (islower(c) ? toupper(c) : tolower(c)) != *t) 57 break; 58 t++; 59 } 60 } 61 s--; 62 if (!isalpha(c)) 63 { 64 if (c == '_') 65 s++; 66 if (e) 67 *e = (char*)s; 68 return s > b; 69 } 70 if (!*t && s > (b + 1)) 71 { 72 b = s; 73 while (n-- && (t = *suf++)) 74 { 75 s = b; 76 while (isalpha(c = *s++) && (c == *t || (islower(c) ? toupper(c) : tolower(c)) == *t)) t++; 77 if (!*t && !isalpha(c)) 78 { 79 if (c != '_') 80 s--; 81 if (e) 82 *e = (char*)s; 83 return 1; 84 } 85 } 86 } 87 } 88 return 0; 89 } 90