# 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 #include #if !defined(SYS5) && !defined(ZONEINFO) #include #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 #else BSD42 #include #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 */