strpsearch.c revision 1
1N/A/*********************************************************************** 1N/A* This software is part of the ast package * 1N/A* Copyright (c) 1985-2011 AT&T Intellectual Property * 1N/A* and is licensed under the * 1N/A* Common Public License, Version 1.0 * 1N/A* by AT&T Intellectual Property * 1N/A* A copy of the License is available at * 1N/A* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 1N/A* Information and Software Systems Research * 1N/A* Glenn Fowler <gsf@research.att.com> * 1N/A* David Korn <dgk@research.att.com> * 1N/A* Phong Vo <kpv@research.att.com> * 1N/A***********************************************************************/ 1N/A * return a pointer to the isalpha() identifier matching 1N/A * name in the CC_ASCII sorted tab of num elements of 1N/A * size siz where the first member of each 1N/A * element is a char* 1N/A * [xxx] brackets optional identifier characters 1N/A * * starts optional identifier characters 1N/A * 0 returned if name not found 1N/A * otherwise if next!=0 then it points to the next 1N/A * unmatched char in name 1N/A register unsigned char* m;
1N/A register unsigned char* s;
1N/A register unsigned char* t;
1N/A if (!(v = c -
MAP(m, *(s = *((
unsigned char**)
mid)))) || *s ==
'[' && !(v = c -
MAP(m, *++s)) && (v =
1))
1N/A if (!v && (*s ==
'[' || *s ==
'*'))
1N/A else if (v && *s ==
']')
1N/A while ((
mid -=
siz) >=
lo && (s = *((
unsigned char**)
mid)) && ((c ==
MAP(m, *s)) || *s ==
'[' && c ==
MAP(m, *(s +
1))));