1/*********************************************************************** 2* * 3* This software is part of the ast package * 4* Copyright (c) 1985-2011 AT&T Intellectual Property * 5* and is licensed under the * 6* Eclipse Public License, Version 1.0 * 7* by AT&T Intellectual Property * 8* * 9* A copy of the License is available at * 10* http://www.eclipse.org/org/documents/epl-v10.html * 11* (with md5 checksum b35adb5213ca9657e911e9befb180842) * 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 43int 44tmword(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