/***********************************************************************
* *
* This software is part of the ast package *
* Copyright (c) 1985-2011 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
* *
* A copy of the License is available at *
* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
* *
* Information and Software Systems Research *
* AT&T Research *
* Florham Park NJ *
* *
* Glenn Fowler <gsf@research.att.com> *
* David Korn <dgk@research.att.com> *
* Phong Vo <kpv@research.att.com> *
* *
***********************************************************************/
#pragma prototyped
#include <ast.h>
#include <ctype.h>
static char** ids;
/*
* initialize the conformance() id list
*/
static char**
initconformance(void)
{
char* m;
char** p;
char* t;
int h;
int i;
int j;
int c;
p = 0;
{
{
t = m;
while ((c = *m++) && c != '.')
{
if (isupper(c))
c = tolower(c);
}
j++;
{
j++;
}
{
j++;
}
if (h & 1)
break;
}
if (p = newof(0, char*, j, i))
{
m = (char*)(p + j--);
i = 0;
p[i++] = m;
while (i < j)
{
while (*m++);
p[i++] = m;
}
p[i] = 0;
}
sfstrclose(sp);
}
if (!p)
p = (char**)dflt;
return ids = p;
}
/*
* return conformance id if s size n is in conformance
* prefix match of s on the conformance id table
* s==0 => "standard"
*/
char*
{
char** p;
char** q;
char* m;
const char* e;
const char* t;
{
if (ids)
{
ids = 0;
}
p = initconformance();
}
if (!s)
s = dflt[1];
if (!n)
n = strlen(s);
e = s + n;
if (*s == '(')
s++;
do
{
s++;
if (*s == ')')
break;
if (s == t)
break;
q = p;
while (m = *q++)
if (strneq(t, m, s - t))
return m;
if (s < e)
s++;
} while (s < e);
return 0;
}