/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2005 Sun Microsystems, Inc.
* All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1989 AT&T */
/* All Rights Reserved */
#pragma ident "%Z%%M% %I% %E% SMI"
int yylineno =1;
int yygid;
#define LONG_WCHAR_T 1
# define YYU(x) x
# define NLSTATE yyprevious=YYNEWLINE
wchar_t yysbuf[YYLMAX];
wchar_t *yysptr = yysbuf;
struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
int *yyfnd;
extern struct yysvf *yyestate;
int yyprevious = YYNEWLINE;
#if defined(__cplusplus) || defined(__STDC__)
int yylook(void)
#else
yylook()
#endif
{
struct yysvf *yystate, **lsp;
struct yywork *yyt;
struct yysvf *yyz;
int yych, yyfirst;
struct yywork *yyr;
# ifdef LEXDEBUG
int debug;
# endif
wchar_t *yylastch;
/* start off machines */
# ifdef LEXDEBUG
debug = 0;
# endif
yyfirst=1;
if (!yymorfg)
yylastch = YYTEXT;
else {
yymorfg=0;
yylastch = YYTEXT+YYLENG;
}
for(;;){
lsp = yylstate;
yyestate = yystate = yybgin;
if (yyprevious==YYNEWLINE) yystate++;
for (;;){
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
# endif
yyt = yystate->yystoff;
if(yyt == yycrank && !yyfirst){ /* may not be any transitions */
yyz = yystate->yyother;
if(yyz == 0)break;
if(yyz->yystoff == yycrank)break;
}
*yylastch++ = yych = YYINPUT();
#ifdef YYISARRAY
if(yylastch > &YYTEXT[YYLMAX]) {
fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
exit(1);
}
#else
if (yylastch >= &YYTEXT[ yytextsz ]) {
int x = yylastch - YYTEXT;
yytextsz += YYTEXTSZINC;
#ifdef YYLEX_E /* -e */
if (YYTEXT == yy_twbuf) {
YYTEXT = (wchar_t *)
malloc(yytextsz *
sizeof (wchar_t));
memcpy(YYTEXT, yy_twbuf,
sizeof (yy_twbuf));
yytext = (wchar_t *)
malloc(yytextsz *
sizeof (wchar_t));
memcpy(yytext, yy_tbuf,
sizeof (yy_tbuf));
#else
if (YYTEXT == yy_tbuf) {
YYTEXT = (wchar_t *)
malloc(yytextsz *
sizeof (wchar_t));
memcpy(YYTEXT, yy_tbuf,
sizeof (yy_tbuf));
#endif
}
else {
YYTEXT = (wchar_t *)
realloc(YYTEXT, yytextsz);
#ifdef YYLEX_E /* -e */
yytext = (wchar_t *)
realloc(yytext,
yytextsz * sizeof (wchar_t));
#endif
}
if (!YYTEXT) {
fprintf(yyout,
"Cannot realloc YYTEXT\n");
exit(1);
}
yylastch = YYTEXT + x;
}
#endif
yygid = yycgid(yych);
yyfirst=0;
tryagain:
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"wchar_t ");
allprint(yych);
fprintf(yyout," gid %d\n", yygid);
}
# endif
yyr = yyt;
if ( (uintptr_t)yyt > (uintptr_t)yycrank){
yyt = yyr + yygid;
if (yyt <= yytop && yyt->verify+yysvec == yystate){
if(yyt->advance+yysvec == YYLERR) /* error transitions */
{YYUNPUT(*--yylastch);break;}
*lsp++ = yystate = yyt->advance+yysvec;
if(lsp > &yylstate[YYLMAX]) {
fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
exit(1);
}
goto contin;
}
}
# ifdef YYOPTIM
else if((uintptr_t)yyt < (uintptr_t)yycrank) { /* r < yycrank */
yyt = yyr = yycrank+(yycrank-yyt);
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"compressed state\n");
# endif
yyt = yyt + yygid;
if(yyt <= yytop && yyt->verify+yysvec == yystate){
if(yyt->advance+yysvec == YYLERR) /* error transitions */
{YYUNPUT(*--yylastch);break;}
*lsp++ = yystate = yyt->advance+yysvec;
if(lsp > &yylstate[YYLMAX]) {
fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
exit(1);
}
goto contin;
}
yyt = yyr + YYU(yymatch[yygid]);
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"try fall back character ");
allprint_w(YYU(yymatch[yygid]));
fprintf(yyout," gid %d\n", yygid);
}
# endif
if(yyt <= yytop && yyt->verify+yysvec == yystate){
if(yyt->advance+yysvec == YYLERR) /* error transition */
{YYUNPUT(*--yylastch);break;}
*lsp++ = yystate = yyt->advance+yysvec;
if(lsp > &yylstate[YYLMAX]) {
fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
exit(1);
}
goto contin;
}
}
if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
# endif
goto tryagain;
}
# endif
else
{YYUNPUT(*--yylastch);break;}
contin:
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"state %d wchar_t ",yystate-yysvec-1);
allprint_w(yych);
fprintf(yyout," gid %d\n", yygid);
}
# endif
;
}
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
allprint_w(yych);
fprintf(yyout," gid %d\n", yygid);
}
# endif
while (lsp-- > yylstate){
*yylastch-- = 0;
if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
yyolsp = lsp;
if(yyextra[*yyfnd]){ /* must backup */
while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
lsp--;
YYUNPUT(*yylastch--);
}
}
yyprevious = YYU(*yylastch);
yylsp = lsp;
YYLENG = yylastch-YYTEXT+1;
YYTEXT[YYLENG] = 0;
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"\nmatch ");
sprint_w(YYTEXT);
fprintf(yyout," action %d\n",*yyfnd);
}
# endif
#ifdef YYLEX_E /* -e */
yyleng=wcstombs((char *)yytext, YYTEXT, sizeof(yytext)-1);
#ifdef LEXDEBUG
if(yyleng>=sizeof(yytext)-1)
fprintf(yyout, "yytext[] too short\n");
#endif
#endif
return(*yyfnd++);
}
YYUNPUT(*yylastch);
}
if (YYTEXT[0] == 0 /* && feof(yyin) */)
{
yysptr=yysbuf;
return(0);
}
yyprevious = YYTEXT[0] = YYINPUT();
if (yyprevious>0)
YYOUTPUT(yyprevious);
yylastch=YYTEXT;
# ifdef LEXDEBUG
if(debug)putchar('\n');
# endif
}
}
int
#if defined(__cplusplus) || defined(__STDC__)
yyback(int *p, int m)
#else
yyback(p, m)
int *p;
int m;
#endif
{
if (p==0) return(0);
while (*p) {
if (*p++ == m)
return(1);
}
return(0);
}
#ifdef YYLEX_E /* -e */
wchar_t
#if defined(__cplusplus) || defined(__STDC__)
yywinput(void){
#else
yywinput(){
#endif
unsigned char eucbuf[MB_LEN_MAX];
wchar_t wc;
unsigned char *p=eucbuf;
int n;
#ifndef __cplusplus
*p++=input();
n=euclen(eucbuf);
while(--n>0) *p++=input();
#else
*p++=lex_input();
n=euclen(eucbuf);
while(--n>0) *p++=lex_input();
#endif
*p=0;
mbtowc( &wc, (char *)eucbuf, MB_LEN_MAX );
return wc;
}
#if defined(__cplusplus) || defined(__STDC__)
void
yywoutput(wchar_t wc)
#else
yywoutput(wc)
wchar_t wc;
#endif
{
unsigned char eucbuf[MB_LEN_MAX];
int n;
unsigned char *p=eucbuf;
n=wctomb( (char *)eucbuf, wc );
#ifndef __cplusplus
while(n-->0) output(*p++);
#else
while(n-->0) lex_output(*p++);
#endif
}
#if defined(__cplusplus) || defined(__STDC__)
void
yywunput(wchar_t wc)
#else
yywunput(wc)
wchar_t wc;
#endif
{
unsigned char eucbuf[MB_LEN_MAX];
int n;
unsigned char *p;
n=wctomb( (char *)eucbuf, wc );
p=eucbuf+n;
while(n-->0) unput(*--p);
}
#endif
#ifdef LONG_WCHAR_T
#define yylinearize(lc) lc
#else/*!LONG_WCHAR_T*/
unsigned long
yylinearize(wc)
wchar_t wc;
{
unsigned long prefix;
switch(wc&0x8080){
case 0x0000: prefix=0x00000000; break;
case 0x0080: prefix=0x20000000; break;
case 0x8000: prefix=0x40000000; break;
case 0x8080: prefix=0x60000000; break;
}
return prefix|wc;
}
#endif/*!LONG_WCHAR_T*/
int
yycgid(c)
wchar_t c;
{
int first = 0;
int last = YYNCGIDTBL - 1;
unsigned long lc=yylinearize(c);
if( yycgidtbl[YYNCGIDTBL-1] < lc ) return YYNCGIDTBL*2-1;
while (last >= 0) {
int i = (first+last)/2;
if (lc == yycgidtbl[i])
return (2*i);
else if ( yycgidtbl[i]<lc) {
if (lc<yycgidtbl[i+1])
return (2*i+1);
else
first = i + 1;
}else
last = i - 1;
}
return 0; /*Error*/
}
/* the following are only used in the lex library */
int
#if defined(__cplusplus) || defined(__STDC__)
yyinput(void)
#else
yyinput()
#endif
{
#ifndef __cplusplus
return(input());
#else
return(lex_input());
#endif
}
#if defined(__cplusplus) || defined(__STDC__)
void
yyoutput(int c)
#else
yyoutput(c)
int c;
#endif
{
#ifndef __cplusplus
output(c);
#else
lex_output(c);
#endif
}
#if defined(__cplusplus) || defined(__STDC__)
void
yyunput(int c)
#else
yyunput(c)
int c;
#endif
{
unput(c);
}