BSD 4_4 release
[unix-history] / usr / src / contrib / mh-6.8 / zotnet / tws / dtimep.c-lexed
# include "stdio.h"
static int start_cond = 0;
#define BEGIN start_cond =
struct yysvf {
struct yywork *yystoff;
struct yysvf *yyother;
int *yystops;};
# define Z 2
#ifndef lint
static char ident[] = "@(#)$Id: dtimep.lex,v 1.1 1991/04/26 21:51:10 sww Exp $";
#endif
#include "tws.h"
#include "../h/strings.h"
#include <ctype.h>
#include <sys/types.h>
#if !defined(SYS5) && !defined(ZONEINFO)
#include <sys/timeb.h>
#endif /* !defined(SYS5) && !defined(ZONEINFO) */
#ifdef SYS5
extern long timezone;
#endif SYS5
/*
* Patchable flag that says how to interpret NN/NN/NN dates. When
* true, we do it European style: DD/MM/YY. When false, we do it
* American style: MM/DD/YY. Of course, these are all non-RFC822
* compliant.
*/
int europeandate = 0;
/*
* Table to convert month names to numeric month. We use the
* fact that the low order 5 bits of the sum of the 2nd & 3rd
* characters of the name is a hash with no collisions for the 12
* valid month names. (The mask to 5 bits maps any combination of
* upper and lower case into the same hash value).
*/
static int month_map[] = {
0,
6, /* 1 - Jul */
3, /* 2 - Apr */
5, /* 3 - Jun */
0,
10, /* 5 - Nov */
0,
1, /* 7 - Feb */
11, /* 8 - Dec */
0,
0,
0,
0,
0,
0,
0, /*15 - Jan */
0,
0,
0,
2, /*19 - Mar */
0,
8, /*21 - Sep */
0,
9, /*23 - Oct */
0,
0,
4, /*26 - May */
0,
7 /*28 - Aug */
};
/*
* Same trick for day-of-week using the hash function
* (c1 & 7) + (c2 & 4)
*/
static int day_map[] = {
0,
0,
0,
6, /* 3 - Sat */
4, /* 4 - Thu */
0,
5, /* 6 - Fri */
0, /* 7 - Sun */
2, /* 8 - Tue */
1 /* 9 - Mon */,
0,
3 /*11 - Wed */
};
#define SETDAY { tw.tw_wday= day_map[(cp[0] & 7) + (cp[1] & 4)];\
tw.tw_flags &= ~TW_SDAY; tw.tw_flags |= TW_SEXP;\
cp += 2; }
#define SETMONTH { tw.tw_mon = month_map[(cp[0] + cp[1]) & 0x1f]; gotdate++;\
cp += 2;\
SKIPD;}
#define CVT2 (i=(*cp++ - '0'),isdigit(*cp)? i*10 + (*cp++ - '0') : i)
#define SKIPD { while ( !isdigit(*cp++) ) ; --cp; }
#define EXPZONE { tw.tw_flags &= ~TW_SZONE; tw.tw_flags |= TW_SZEXP; }
#define ZONE(x) { tw.tw_zone=(x); EXPZONE; }
#define ZONED(x) { ZONE(x); tw.tw_flags |= TW_DST; }
#define LC(c) (isupper (c) ? tolower (c) : (c))
#ifdef DSTXXX
#ifndef BSD42
#include <time.h>
#else BSD42
#include <sys/time.h>
#endif BSD42
static zonehack (tw)
register struct tws *tw;
{
register struct tm *tm;
if (twclock (tw) == -1L)
return;
tm = localtime (&tw -> tw_clock);
if (tm -> tm_isdst) {
tw -> tw_flags |= TW_DST;
tw -> tw_zone -= 60;
}
}
#endif DSTXXX
struct tws *dparsetime (str)
char *str;
{
register int i;
static struct tws tw;
register char *cp;
register int gotdate = 0;
#ifndef SYS5
#ifdef ZONEINFO
struct tm *tm;
time_t clock;
#else
struct timeb tb;
#endif /* ZONEINFO */
#endif /* not SYS5 */
start_cond = 0;
/* Zero out the struct. */
bzero( (char *) &tw, sizeof tw);
/* Set default time zone. */
#ifdef SYS5
tzset( );
tw.tw_zone = -(timezone / 60);
#else
#ifdef ZONEINFO
time (&clock);
tm = localtime(&clock);
tw.tw_zone = tm->tm_gmtoff / 60;
if (tm -> tm_isdst) /* if DST is in effect */
tw.tw_zone -= 60; /* reset to normal offset */
#else
ftime( &tb );
tw.tw_zone = -tb.timezone;
#endif /* ZONEINFO */
#endif /* SYS5 */
while (isspace(*str))
str++;
while ( 1 )
switch (cp = str, *cp ? lex_string( &str, start_cond) : 0) {
case -1:
if (!gotdate || tw.tw_year == 0)
return 0;
/* fall through */
case 0:
return &tw;
case 1:
SETDAY;
break;
case 2:
{
cp++;
SETDAY;
}
break;
case 3:
{
if (europeandate) {
/* European: DD/MM/YY */
tw.tw_mday = CVT2;
cp++;
tw.tw_mon = CVT2 - 1;
} else {
/* American: MM/DD/YY */
tw.tw_mon = CVT2 - 1;
cp++;
tw.tw_mday = CVT2;
}
cp++;
for (i = 0; isdigit(*cp); )
i = i*10 + (*cp++ - '0');
tw.tw_year = i % 100;
}
break;
case 4:
{
tw.tw_mday = CVT2;
while ( !isalpha(*cp++) )
;
SETMONTH;
for (i = 0; isdigit(*cp); )
i = i*10 + (*cp++ - '0');
tw.tw_year = i % 100;
}
break;
case 5:
{
cp++;
SETMONTH;
tw.tw_mday = CVT2;
SKIPD;
for (i = 0; isdigit(*cp); )
i = i*10 + (*cp++ - '0');
tw.tw_year = i % 100;
}
break;
case 6:
{
cp++;
SETMONTH;
tw.tw_mday = CVT2;
}
break;
case 7:
{ /* hack: ctime w/o TZ */
tw.tw_hour = CVT2; cp++;
tw.tw_min = CVT2; cp++;
tw.tw_sec = CVT2;
while( !isdigit(*cp++) )
;
cp++;
tw.tw_year = CVT2;
}
break;
case 8:
{
tw.tw_hour = CVT2; cp++;
tw.tw_min = CVT2; cp++;
tw.tw_sec = CVT2;
BEGIN Z;
}
break;
case 9:
{
tw.tw_hour = CVT2; cp++;
tw.tw_min = CVT2;
BEGIN Z;
}
break;
case 10:
{
tw.tw_hour = CVT2; cp++;
if (tw.tw_hour == 12)
tw.tw_hour = 0;
tw.tw_min = CVT2;
BEGIN Z;
}
break;
case 11:
{
tw.tw_hour = CVT2; cp++;
if (tw.tw_hour != 12)
tw.tw_hour += 12;
tw.tw_min = CVT2;
BEGIN Z;
}
break;
case 12:
{
tw.tw_hour = CVT2;
tw.tw_min = CVT2;
tw.tw_sec = CVT2;
BEGIN Z;
}
break;
case 13:
{
/*
* Luckly, 4 digit times in the range
* 1960-1999 aren't legal as hour
* and minutes.
*/
cp += 2;
tw.tw_year = CVT2;
}
break;
case 14:
{
if (tw.tw_hour) {
cp += 2;
tw.tw_year = CVT2;
tw.tw_zone = 0;
} else {
tw.tw_hour = CVT2;
tw.tw_min = CVT2;
BEGIN Z;
}
}
break;
case 15:
ZONE(0 * 60);
break;
case 16:
ZONE(0 * 60);
break;
case 17:
ZONE(2 * 60);
break;
case 18:
ZONED(2 * 60);
break;
case 19:
ZONE(-5 * 60);
break;
case 20:
ZONED(-5 * 60);
break;
case 21:
ZONE(-6 * 60);
break;
case 22:
ZONED(-6 * 60);
break;
case 23:
ZONE(-7 * 60);
break;
case 24:
ZONED(-7 * 60);
break;
case 25:
ZONE(-8 * 60);
break;
case 26:
ZONED(-8 * 60);
break;
case 27:
ZONE(-(3 * 60 + 30));
break;
case 28:
ZONE(-4 * 60);
break;
case 29:
ZONED(-4 * 60);
break;
case 30:
ZONE(-9 * 60);
break;
case 31:
ZONED(-9 * 60);
break;
case 32:
ZONE(-10 * 60);
break;
case 33:
ZONED(-10 * 60);
break;
case 34:
ZONED(0 * 60);
break;
case 35:
{
tw.tw_zone = 60 * (('a'-1) - LC(*cp));
EXPZONE;
}
break;
case 36:
{
tw.tw_zone = 60 * ('a' - LC(*cp));
EXPZONE;
}
break;
case 37:
{
tw.tw_zone = 60 * (LC(*cp) - 'm');
EXPZONE;
}
break;
case 38:
{
cp++;
tw.tw_zone = ((cp[0] * 10 + cp[1])
-('0' * 10 + '0'))*60
+((cp[2] * 10 + cp[3])
-('0' * 10 + '0'));
EXPZONE;
#ifdef DSTXXX
zonehack (&tw);
#endif DSTXXX
cp += 4;
}
break;
case 39:
{
cp++;
tw.tw_zone = (('0' * 10 + '0')
-(cp[0] * 10 + cp[1]))*60
+(('0' * 10 + '0')
-(cp[2] * 10 + cp[3]));
EXPZONE;
#ifdef DSTXXX
zonehack (&tw);
#endif DSTXXX
cp += 4;
}
break;
case 40:
{
while( !isdigit(*cp++) )
;
cp++;
tw.tw_year = CVT2;
}
break;
case 41:
case 42:
;
break;
default: return(0);
} }
/* end of yylex */
int yyvstop[] ={
0,
42,
0,
41,
0,
42,
0,
35,
0,
35,
0,
35,
0,
35,
0,
35,
0,
35,
0,
35,
0,
35,
0,
35,
0,
36,
0,
36,
0,
37,
0,
37,
0,
37,
0,
37,
0,
37,
0,
37,
0,
37,
0,
37,
0,
37,
0,
15,
0,
9,
0,
1,
0,
1,
0,
1,
0,
1,
0,
1,
0,
1,
0,
1,
0,
29,
0,
28,
0,
34,
0,
22,
0,
21,
0,
20,
0,
19,
0,
16,
0,
33,
0,
32,
0,
18,
0,
17,
0,
24,
0,
23,
0,
27,
0,
26,
0,
25,
0,
31,
0,
30,
0,
14,
0,
9,
0,
9,
0,
13,
14,
0,
1,
0,
2,
0,
14,
0,
8,
0,
10,
0,
11,
0,
4,
0,
4,
0,
13,
14,
0,
6,
0,
40,
0,
38,
0,
39,
0,
2,
0,
3,
0,
3,
0,
12,
0,
8,
0,
8,
0,
4,
0,
4,
0,
4,
0,
6,
0,
6,
0,
1,
0,
4,
0,
5,
0,
5,
0,
5,
0,
5,
0,
7,
0,
0};
# define YYTYPE int
struct yywork { YYTYPE verify, advance; } yycrank[] ={
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 1,5, 1,6,
5,5, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 21,21, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 1,5, 0,0, 5,5,
3,21, 3,6, 0,0, 0,0,
0,0, 1,7, 0,0, 0,0,
21,21, 0,0, 0,0, 0,0,
0,0, 1,8, 1,9, 1,8,
1,10, 1,10, 1,10, 1,10,
1,10, 1,10, 1,10, 3,21,
9,63, 21,82, 22,83, 22,83,
0,0, 0,0, 0,0, 3,7,
0,0, 0,0, 3,22, 0,0,
3,23, 0,0, 0,0, 3,8,
3,9, 3,8, 3,10, 3,10,
3,10, 3,10, 3,10, 3,10,
3,10, 10,64, 10,64, 10,64,
10,64, 10,64, 10,64, 10,64,
10,64, 10,64, 10,64, 0,0,
0,0, 0,0, 1,11, 15,72,
0,0, 1,12, 14,70, 1,13,
12,67, 13,68, 17,75, 1,14,
19,79, 20,81, 1,15, 1,16,
1,17, 15,73, 11,65, 16,74,
1,18, 1,19, 13,69, 11,66,
1,20, 19,80, 14,71, 25,99,
3,24, 3,25, 3,26, 3,27,
3,28, 3,29, 3,30, 3,31,
3,32, 3,33, 3,34, 3,34,
3,35, 3,36, 3,37, 3,38,
3,39, 3,39, 3,40, 3,41,
3,42, 3,39, 3,43, 3,39,
3,44, 7,45, 8,50, 18,76,
23,84, 23,84, 30,104, 18,77,
7,46, 24,97, 42,114, 45,117,
26,100, 28,102, 7,47, 7,48,
31,105, 33,70, 7,49, 38,112,
33,107, 24,65, 46,118, 18,78,
24,98, 8,50, 24,66, 26,101,
28,103, 36,74, 49,123, 31,106,
56,129, 36,111, 38,113, 33,108,
47,119, 33,71, 8,51, 57,130,
8,52, 8,53, 8,53, 8,53,
8,53, 8,53, 8,53, 8,53,
8,53, 8,53, 8,53, 8,54,
44,115, 23,85, 23,86, 23,87,
47,120, 23,88, 35,72, 23,89,
23,90, 35,109, 23,91, 59,133,
50,50, 23,92, 23,93, 44,116,
23,94, 48,121, 55,127, 58,131,
35,73, 23,95, 60,134, 55,128,
35,110, 23,96, 61,135, 62,136,
65,138, 64,52, 48,122, 51,51,
66,139, 67,140, 68,141, 50,50,
69,142, 70,143, 8,55, 58,132,
64,54, 8,56, 71,144, 8,57,
71,145, 73,148, 72,146, 8,58,
50,51, 74,149, 8,59, 8,60,
8,61, 72,147, 51,51, 75,150,
8,62, 52,124, 52,124, 52,124,
52,124, 52,124, 52,124, 52,124,
52,124, 52,124, 52,124, 53,125,
53,125, 53,125, 53,125, 53,125,
53,125, 53,125, 53,125, 53,125,
53,125, 54,126, 54,126, 54,126,
54,126, 54,126, 54,126, 54,126,
54,126, 54,126, 54,126, 63,125,
63,125, 63,125, 63,125, 63,125,
63,125, 63,137, 63,137, 63,137,
63,137, 76,151, 77,152, 78,153,
50,55, 79,154, 80,155, 50,56,
81,156, 50,57, 82,157, 93,111,
85,97, 50,58, 91,107, 92,109,
50,59, 50,60, 50,61, 97,160,
98,161, 99,162, 50,62, 51,55,
100,163, 101,164, 51,56, 85,98,
51,57, 91,108, 92,110, 102,165,
51,58, 103,166, 104,167, 51,59,
51,60, 51,61, 105,168, 106,169,
107,170, 51,62, 83,158, 83,158,
83,158, 83,158, 83,158, 83,158,
83,158, 83,158, 83,158, 83,158,
84,159, 84,159, 84,159, 84,159,
84,159, 84,159, 84,159, 84,159,
84,159, 84,159, 108,171, 109,172,
110,173, 111,174, 112,175, 113,176,
115,177, 116,178, 117,179, 118,180,
119,181, 120,182, 121,183, 122,184,
123,185, 124,186, 124,187, 124,187,
124,187, 124,187, 124,187, 124,187,
124,187, 124,187, 124,187, 124,187,
125,188, 125,188, 125,188, 125,188,
125,188, 125,188, 125,188, 125,188,
125,188, 125,188, 126,189, 127,194,
128,195, 129,196, 130,197, 131,198,
132,199, 133,201, 132,200, 134,203,
135,204, 136,205, 138,207, 139,207,
133,202, 140,207, 143,214, 145,147,
148,216, 149,217, 150,218, 152,220,
153,221, 126,189, 137,206, 137,206,
137,206, 137,206, 137,206, 137,206,
137,206, 137,206, 137,206, 137,206,
141,207, 138,207, 139,207, 142,212,
140,207, 126,190, 126,190, 126,190,
126,190, 126,190, 126,190, 126,190,
126,190, 126,190, 126,190, 126,191,
144,207, 146,207, 147,207, 180,230,
154,212, 151,212, 156,212, 141,207,
155,212, 182,232, 142,212, 157,225,
157,225, 157,225, 157,225, 179,228,
181,228, 183,228, 187,186, 184,228,
190,191, 192,241, 142,212, 144,207,
146,207, 147,207, 185,228, 154,212,
151,212, 156,212, 193,242, 155,212,
198,250, 200,202, 203,252, 204,253,
205,254, 208,147, 126,192, 154,212,
151,212, 156,212, 209,257, 155,212,
210,258, 211,259, 206,255, 212,212,
213,260, 214,261, 215,147, 216,262,
217,263, 126,193, 218,264, 219,265,
220,266, 140,210, 138,208, 158,226,
158,226, 158,226, 158,226, 158,226,
158,226, 158,226, 158,226, 158,226,
158,226, 206,255, 212,212, 139,209,
221,267, 222,268, 179,229, 223,269,
224,270, 228,274, 142,213, 159,227,
159,227, 159,227, 159,227, 159,227,
159,227, 159,227, 159,227, 159,227,
159,227, 141,211, 183,233, 146,215,
181,231, 184,234, 188,238, 185,235,
186,236, 186,237, 186,236, 186,236,
186,236, 186,236, 186,236, 186,236,
186,236, 186,236, 189,189, 156,224,
194,202, 154,222, 229,275, 230,276,
144,147, 151,219, 155,223, 231,277,
232,278, 188,238, 191,240, 191,240,
191,240, 191,240, 191,240, 191,240,
191,240, 191,240, 191,240, 191,240,
233,279, 189,189, 234,280, 194,202,
235,281, 188,239, 188,239, 188,239,
188,239, 188,239, 188,239, 188,239,
188,239, 188,239, 188,239, 195,202,
194,243, 237,283, 238,238, 194,244,
194,245, 194,244, 194,244, 194,244,
194,244, 194,244, 194,244, 194,244,
194,244, 241,241, 242,242, 245,290,
246,202, 247,291, 248,292, 249,293,
250,294, 251,202, 195,202, 252,295,
253,296, 238,238, 254,297, 257,147,
196,202, 255,255, 258,301, 259,302,
260,303, 261,304, 263,305, 195,243,
241,241, 242,242, 195,244, 195,245,
195,244, 195,244, 195,244, 195,244,
195,244, 195,244, 195,244, 195,244,
264,306, 265,307, 189,192, 196,202,
255,255, 266,308, 197,202, 268,309,
269,310, 270,311, 275,312, 277,313,
194,246, 279,314, 280,315, 281,316,
196,243, 189,193, 282,282, 196,244,
196,245, 196,244, 196,244, 196,244,
196,244, 196,244, 196,244, 196,244,
196,244, 197,202, 289,318, 291,202,
284,284, 286,285, 199,202, 288,288,
292,319, 293,320, 294,321, 295,322,
296,323, 282,282, 197,243, 297,324,
283,282, 197,244, 197,245, 197,244,
197,244, 197,244, 197,244, 197,244,
197,244, 197,244, 197,244, 284,284,
286,285, 199,202, 288,288, 195,247,
201,202, 300,299, 298,298, 301,326,
299,325, 302,327, 303,212, 283,282,
304,147, 305,328, 199,243, 306,147,
196,248, 199,244, 199,245, 199,244,
199,244, 199,244, 199,244, 199,244,
199,244, 199,244, 199,244, 201,202,
283,236, 298,298, 202,202, 299,325,
307,329, 308,330, 309,331, 311,332,
312,228, 313,333, 314,334, 285,285,
201,243, 207,207, 316,335, 201,244,
201,245, 201,244, 201,244, 201,244,
201,244, 201,244, 201,244, 201,244,
201,244, 202,202, 317,336, 197,249,
319,338, 320,339, 321,202, 322,340,
323,202, 324,341, 285,285, 330,344,
207,207, 332,345, 202,243, 335,346,
318,337, 202,244, 202,245, 202,244,
202,244, 202,244, 202,244, 202,244,
202,244, 202,244, 202,244, 285,317,
207,256, 207,256, 207,256, 207,256,
207,256, 207,256, 207,256, 207,256,
207,256, 207,256, 199,202, 318,337,
341,348, 343,350, 201,251, 225,271,
225,271, 225,271, 225,271, 225,271,
225,271, 225,271, 225,271, 225,271,
225,271, 226,272, 226,272, 226,272,
226,272, 226,272, 226,272, 226,272,
226,272, 226,272, 226,272, 227,273,
227,273, 227,273, 227,273, 227,273,
227,273, 227,273, 227,273, 227,273,
227,273, 236,282, 236,282, 236,282,
236,282, 236,282, 236,282, 236,282,
236,282, 236,282, 236,282, 239,284,
239,284, 239,284, 239,284, 239,284,
239,284, 239,284, 239,284, 239,284,
239,284, 240,285, 349,349, 287,287,
336,347, 336,347, 336,347, 336,347,
0,0, 0,0, 0,0, 243,243,
347,351, 347,351, 347,351, 347,351,
347,351, 347,351, 347,351, 347,351,
347,351, 347,351, 0,0, 0,0,
240,285, 349,349, 287,287, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 243,243, 0,0,
0,0, 244,287, 287,288, 0,0,
240,286, 240,286, 240,286, 240,286,
240,286, 240,286, 240,286, 240,286,
240,286, 240,286, 243,244, 243,245,
243,244, 243,244, 243,244, 243,244,
243,244, 243,244, 243,244, 243,244,
244,287, 0,0, 0,0, 256,298,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
244,288, 0,0, 325,325, 0,0,
244,287, 244,287, 244,287, 244,287,
244,287, 244,287, 244,287, 244,287,
244,287, 244,287, 256,298, 0,0,
0,0, 290,287, 0,0, 287,289,
0,0, 0,0, 0,0, 0,0,
0,0, 325,325, 256,299, 0,0,
342,349, 0,0, 256,300, 256,300,
256,300, 256,300, 256,300, 256,300,
256,300, 256,300, 256,300, 256,300,
290,287, 325,342, 325,343, 325,342,
325,342, 325,342, 325,342, 325,342,
325,342, 325,342, 325,342, 342,349,
290,288, 244,289, 350,349, 0,0,
0,0, 290,244, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 342,349,
342,349, 342,349, 342,349, 342,349,
342,349, 342,349, 342,349, 342,349,
342,349, 350,349, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 350,342, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 290,289, 0,0, 0,0,
0,0};
struct yysvf yysvec[] ={
0, 0, 0,
yycrank+1, 0, 0,
yycrank+0, yysvec+1, 0,
yycrank+27, 0, 0,
yycrank+0, yysvec+3, 0,
yycrank+3, 0, yyvstop+1,
yycrank+0, 0, yyvstop+3,
yycrank+47, 0, 0,
yycrank+141, 0, 0,
yycrank+3, yysvec+8, 0,
yycrank+37, yysvec+8, 0,
yycrank+2, 0, 0,
yycrank+3, 0, 0,
yycrank+4, 0, 0,
yycrank+5, 0, 0,
yycrank+2, 0, 0,
yycrank+4, 0, 0,
yycrank+7, 0, 0,
yycrank+54, 0, 0,
yycrank+4, 0, 0,
yycrank+8, 0, 0,
yycrank+12, 0, yyvstop+5,
yycrank+14, 0, 0,
yycrank+104, 0, 0,
yycrank+57, 0, yyvstop+7,
yycrank+8, 0, yyvstop+9,
yycrank+60, 0, yyvstop+11,
yycrank+0, yysvec+12, yyvstop+13,
yycrank+61, 0, yyvstop+15,
yycrank+0, yysvec+13, yyvstop+17,
yycrank+45, 0, yyvstop+19,
yycrank+64, 0, yyvstop+21,
yycrank+0, 0, yyvstop+23,
yycrank+68, 0, 0,
yycrank+0, 0, yyvstop+25,
yycrank+109, 0, yyvstop+27,
yycrank+66, 0, yyvstop+29,
yycrank+0, yysvec+17, yyvstop+31,
yycrank+67, 0, yyvstop+33,
yycrank+0, 0, yyvstop+35,
yycrank+0, yysvec+18, yyvstop+37,
yycrank+0, yysvec+19, yyvstop+39,
yycrank+42, 0, yyvstop+41,
yycrank+0, yysvec+20, yyvstop+43,
yycrank+100, 0, yyvstop+45,
yycrank+45, 0, 0,
yycrank+59, 0, 0,
yycrank+87, 0, 0,
yycrank+113, 0, 0,
yycrank+77, 0, 0,
yycrank+203, 0, 0,
yycrank+222, 0, 0,
yycrank+209, 0, 0,
yycrank+219, yysvec+8, 0,
yycrank+229, 0, 0,
yycrank+106, 0, 0,
yycrank+79, 0, 0,
yycrank+86, 0, 0,
yycrank+122, 0, 0,
yycrank+114, 0, 0,
yycrank+111, 0, 0,
yycrank+127, 0, 0,
yycrank+126, 0, 0,
yycrank+239, yysvec+8, 0,
yycrank+182, yysvec+50, 0,
yycrank+114, 0, 0,
yycrank+129, 0, 0,
yycrank+134, 0, 0,
yycrank+136, 0, 0,
yycrank+131, 0, 0,
yycrank+127, 0, 0,
yycrank+134, 0, 0,
yycrank+132, 0, 0,
yycrank+135, 0, 0,
yycrank+131, 0, 0,
yycrank+139, 0, 0,
yycrank+181, 0, 0,
yycrank+186, 0, 0,
yycrank+189, 0, 0,
yycrank+184, 0, 0,
yycrank+201, 0, 0,
yycrank+204, 0, 0,
yycrank+249, 0, 0,
yycrank+290, 0, 0,
yycrank+300, 0, 0,
yycrank+208, 0, 0,
yycrank+0, yysvec+25, 0,
yycrank+0, yysvec+26, 0,
yycrank+0, yysvec+28, 0,
yycrank+0, yysvec+30, 0,
yycrank+0, yysvec+31, 0,
yycrank+210, 0, 0,
yycrank+211, 0, 0,
yycrank+192, 0, 0,
yycrank+0, yysvec+38, 0,
yycrank+0, yysvec+42, 0,
yycrank+0, yysvec+44, 0,
yycrank+199, 0, 0,
yycrank+200, 0, 0,
yycrank+201, 0, 0,
yycrank+204, 0, 0,
yycrank+205, 0, 0,
yycrank+211, 0, 0,
yycrank+213, 0, 0,
yycrank+214, 0, 0,
yycrank+218, 0, 0,
yycrank+219, 0, 0,
yycrank+220, 0, 0,
yycrank+242, 0, 0,
yycrank+243, 0, 0,
yycrank+244, 0, 0,
yycrank+245, 0, 0,
yycrank+246, 0, 0,
yycrank+247, 0, 0,
yycrank+0, 0, yyvstop+47,
yycrank+248, 0, 0,
yycrank+249, 0, 0,
yycrank+261, 0, 0,
yycrank+257, 0, 0,
yycrank+252, 0, 0,
yycrank+259, 0, 0,
yycrank+253, 0, 0,
yycrank+270, 0, 0,
yycrank+272, 0, 0,
yycrank+326, 0, 0,
yycrank+336, 0, 0,
yycrank+385, 0, yyvstop+49,
yycrank+281, 0, 0,
yycrank+293, 0, 0,
yycrank+298, 0, 0,
yycrank+300, 0, 0,
yycrank+289, 0, 0,
yycrank+292, 0, 0,
yycrank+287, 0, 0,
yycrank+285, 0, 0,
yycrank+288, 0, 0,
yycrank+293, 0, 0,
yycrank+370, 0, 0,
yycrank+397, 0, 0,
yycrank+398, 0, 0,
yycrank+400, 0, 0,
yycrank+419, 0, 0,
yycrank+422, 0, yyvstop+51,
yycrank+293, yysvec+139, 0,
yycrank+435, 0, 0,
yycrank+310, yysvec+140, 0,
yycrank+436, 0, 0,
yycrank+437, 0, 0,
yycrank+312, yysvec+142, yyvstop+53,
yycrank+312, yysvec+140, 0,
yycrank+303, yysvec+147, 0,
yycrank+440, 0, yyvstop+55,
yycrank+299, yysvec+147, 0,
yycrank+316, yysvec+142, yyvstop+57,
yycrank+439, 0, yyvstop+59,
yycrank+443, 0, yyvstop+61,
yycrank+441, 0, yyvstop+63,
yycrank+401, 0, 0,
yycrank+455, 0, 0,
yycrank+475, 0, 0,
yycrank+0, 0, yyvstop+65,
yycrank+0, 0, yyvstop+67,
yycrank+0, 0, yyvstop+69,
yycrank+0, 0, yyvstop+71,
yycrank+0, 0, yyvstop+73,
yycrank+0, 0, yyvstop+75,
yycrank+0, 0, yyvstop+77,
yycrank+0, 0, yyvstop+79,
yycrank+0, 0, yyvstop+81,
yycrank+0, 0, yyvstop+83,
yycrank+0, 0, yyvstop+85,
yycrank+0, 0, yyvstop+87,
yycrank+0, 0, yyvstop+89,
yycrank+0, 0, yyvstop+91,
yycrank+0, 0, yyvstop+93,
yycrank+0, 0, yyvstop+95,
yycrank+0, 0, yyvstop+97,
yycrank+0, 0, yyvstop+99,
yycrank+0, 0, yyvstop+101,
yycrank+418, 0, 0,
yycrank+347, yysvec+179, 0,
yycrank+419, 0, 0,
yycrank+353, yysvec+179, 0,
yycrank+420, 0, 0,
yycrank+422, 0, 0,
yycrank+429, 0, 0,
yycrank+492, 0, 0,
yycrank+415, 0, 0,
yycrank+529, 0, yyvstop+103,
yycrank+541, 0, yyvstop+105,
yycrank+406, yysvec+189, yyvstop+107,
yycrank+514, 0, 0,
yycrank+356, 0, 0,
yycrank+365, 0, 0,
yycrank+543, 0, 0,
yycrank+578, 0, 0,
yycrank+607, 0, 0,
yycrank+633, 0, 0,
yycrank+359, yysvec+195, 0,
yycrank+661, 0, 0,
yycrank+376, yysvec+196, 0,
yycrank+687, 0, 0,
yycrank+713, 0, 0,
yycrank+377, yysvec+196, 0,
yycrank+368, yysvec+202, 0,
yycrank+364, yysvec+202, 0,
yycrank+481, yysvec+188, yyvstop+109,
yycrank+724, 0, 0,
yycrank+373, 0, 0,
yycrank+371, 0, 0,
yycrank+379, 0, 0,
yycrank+372, 0, 0,
yycrank+482, 0, yyvstop+112,
yycrank+395, 0, 0,
yycrank+396, 0, 0,
yycrank+390, 0, 0,
yycrank+398, 0, 0,
yycrank+387, 0, 0,
yycrank+400, 0, 0,
yycrank+385, 0, 0,
yycrank+399, 0, 0,
yycrank+419, 0, 0,
yycrank+402, 0, 0,
yycrank+419, 0, 0,
yycrank+419, 0, 0,
yycrank+739, 0, 0,
yycrank+749, 0, 0,
yycrank+759, 0, 0,
yycrank+477, 0, yyvstop+114,
yycrank+457, 0, 0,
yycrank+458, 0, 0,
yycrank+445, 0, 0,
yycrank+463, 0, 0,
yycrank+457, 0, 0,
yycrank+474, 0, 0,
yycrank+475, 0, 0,
yycrank+769, 0, 0,
yycrank+532, yysvec+236, 0,
yycrank+581, 0, yyvstop+116,
yycrank+779, 0, 0,
yycrank+828, 0, yyvstop+118,
yycrank+592, 0, yyvstop+120,
yycrank+593, 0, yyvstop+122,
yycrank+838, 0, 0,
yycrank+864, 0, yyvstop+124,
yycrank+546, yysvec+244, yyvstop+126,
yycrank+496, 0, 0,
yycrank+490, 0, 0,
yycrank+497, 0, 0,
yycrank+490, 0, 0,
yycrank+511, 0, 0,
yycrank+505, 0, 0,
yycrank+502, 0, 0,
yycrank+514, 0, 0,
yycrank+513, 0, 0,
yycrank+608, 0, yyvstop+128,
yycrank+890, 0, yyvstop+131,
yycrank+499, 0, 0,
yycrank+520, 0, 0,
yycrank+522, 0, 0,
yycrank+499, 0, 0,
yycrank+507, 0, 0,
yycrank+0, yysvec+260, 0,
yycrank+524, 0, 0,
yycrank+535, 0, 0,
yycrank+537, 0, 0,
yycrank+532, 0, 0,
yycrank+0, yysvec+260, 0,
yycrank+543, 0, 0,
yycrank+547, 0, 0,
yycrank+530, 0, 0,
yycrank+0, 0, yyvstop+133,
yycrank+0, 0, yyvstop+135,
yycrank+0, 0, yyvstop+137,
yycrank+0, 0, yyvstop+139,
yycrank+525, 0, 0,
yycrank+0, yysvec+275, 0,
yycrank+547, 0, 0,
yycrank+0, yysvec+275, 0,
yycrank+549, 0, 0,
yycrank+553, 0, 0,
yycrank+536, 0, 0,
yycrank+645, 0, yyvstop+141,
yycrank+671, yysvec+186, yyvstop+143,
yycrank+659, 0, yyvstop+145,
yycrank+722, 0, yyvstop+147,
yycrank+660, 0, yyvstop+149,
yycrank+830, 0, yyvstop+151,
yycrank+662, 0, yyvstop+153,
yycrank+550, 0, 0,
yycrank+916, yysvec+243, yyvstop+155,
yycrank+551, 0, 0,
yycrank+574, 0, 0,
yycrank+576, 0, 0,
yycrank+560, 0, 0,
yycrank+577, 0, 0,
yycrank+575, 0, 0,
yycrank+570, 0, 0,
yycrank+689, 0, yyvstop+157,
yycrank+691, 0, 0,
yycrank+653, yysvec+298, yyvstop+159,
yycrank+598, 0, 0,
yycrank+587, 0, 0,
yycrank+658, yysvec+212, yyvstop+161,
yycrank+583, 0, 0,
yycrank+604, 0, 0,
yycrank+593, 0, 0,
yycrank+627, 0, 0,
yycrank+627, 0, 0,
yycrank+629, 0, 0,
yycrank+0, yysvec+260, 0,
yycrank+627, 0, 0,
yycrank+687, 0, 0,
yycrank+632, 0, 0,
yycrank+633, 0, 0,
yycrank+0, yysvec+275, 0,
yycrank+634, 0, 0,
yycrank+689, 0, 0,
yycrank+751, 0, 0,
yycrank+647, 0, 0,
yycrank+635, 0, 0,
yycrank+629, 0, 0,
yycrank+650, 0, 0,
yycrank+638, 0, 0,
yycrank+655, 0, 0,
yycrank+901, 0, 0,
yycrank+0, yysvec+306, 0,
yycrank+0, yysvec+304, 0,
yycrank+0, yysvec+306, 0,
yycrank+0, yysvec+260, 0,
yycrank+654, 0, 0,
yycrank+0, yysvec+260, 0,
yycrank+660, 0, 0,
yycrank+0, yysvec+275, 0,
yycrank+0, yysvec+275, 0,
yycrank+662, 0, 0,
yycrank+786, 0, 0,
yycrank+0, yysvec+318, yyvstop+163,
yycrank+0, yysvec+323, 0,
yycrank+0, yysvec+321, 0,
yycrank+0, yysvec+323, 0,
yycrank+683, 0, 0,
yycrank+927, 0, yyvstop+165,
yycrank+728, yysvec+342, yyvstop+167,
yycrank+0, yysvec+306, 0,
yycrank+0, yysvec+260, 0,
yycrank+0, yysvec+275, 0,
yycrank+800, 0, 0,
yycrank+0, yysvec+323, 0,
yycrank+829, 0, yyvstop+169,
yycrank+953, yysvec+325, yyvstop+171,
yycrank+0, 0, yyvstop+173,
0, 0, 0};
struct yywork *yytop = yycrank+1013;
struct yysvf *yybgin = yysvec+1;
char yymatch[] ={
00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,011 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
011 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
'0' ,'0' ,'2' ,'3' ,'3' ,'3' ,'6' ,'6' ,
'6' ,'6' ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,'a' ,'a' ,'a' ,'a' ,'a' ,'a' ,'a' ,
'a' ,'a' ,01 ,'k' ,'k' ,'k' ,'n' ,'n' ,
'n' ,'n' ,'n' ,'n' ,'n' ,'n' ,'n' ,'n' ,
'n' ,'n' ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
0};
char yyextra[] ={
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0};
/* ncform 4.1 83/08/11 */