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