1 /***********************************************************************
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 *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
13 * Information and Software Systems Research *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
21 ***********************************************************************/
25 * AT&T Bell Laboratories
27 * time conversion support
35 * return the tab table index that matches s ignoring case and .'s
36 * tm_data.format checked if tminfo.format!=tm_data.format
38 * ntab and nsuf are the number of elements in tab and suf,
41 * all isalpha() chars in str must match
42 * suf is a table of nsuf valid str suffixes
43 * if e is non-null then it will point to first unmatched char in str
44 * which will always be non-isalpha()
48 tmlex(register const char* s
, char** e
, char** tab
, int ntab
, char** suf
, int nsuf
)
54 for (p
= tab
, n
= ntab
; n
-- && (x
= *p
); p
++)
55 if (*x
&& *x
!= '%' && tmword(s
, e
, x
, suf
, nsuf
))
57 if (tm_info
.format
!= tm_data
.format
&& tab
>= tm_info
.format
&& tab
< tm_info
.format
+ TM_NFORM
)
59 tab
= tm_data
.format
+ (tab
- tm_info
.format
);
60 if (suf
&& tab
>= tm_info
.format
&& tab
< tm_info
.format
+ TM_NFORM
)
61 suf
= tm_data
.format
+ (suf
- tm_info
.format
);
62 for (p
= tab
, n
= ntab
; n
-- && (x
= *p
); p
++)
63 if (*x
&& *x
!= '%' && tmword(s
, e
, x
, suf
, nsuf
))