static int start_cond = 0;
#define BEGIN start_cond =
static char ident[] = "@(#)$Id: dtimep.lex,v 1.1 1991/04/26 21:51:10 sww Exp $";
#include "../h/strings.h"
#if !defined(SYS5) && !defined(ZONEINFO)
#endif /* !defined(SYS5) && !defined(ZONEINFO) */
* 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
* 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[] = {
* Same trick for day-of-week using the hash function
#define SETDAY { tw.tw_wday= day_map[(cp[0] & 7) + (cp[1] & 4)];\
tw.tw_flags &= ~TW_SDAY; tw.tw_flags |= TW_SEXP;\
#define SETMONTH { tw.tw_mon = month_map[(cp[0] + cp[1]) & 0x1f]; gotdate++;\
#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))
tm = localtime (&tw -> tw_clock);
tw -> tw_flags |= TW_DST;
struct tws *dparsetime (str)
register int gotdate = 0;
/* Zero out the struct. */
bzero( (char *) &tw, sizeof tw);
/* Set default time zone. */
tw.tw_zone = -(timezone / 60);
tw.tw_zone = tm->tm_gmtoff / 60;
if (tm -> tm_isdst) /* if DST is in effect */
tw.tw_zone -= 60; /* reset to normal offset */
tw.tw_zone = -tb.timezone;
switch (cp = str, *cp ? lex_string( &str, start_cond) : 0) {
if (!gotdate || tw.tw_year == 0)
for (i = 0; isdigit(*cp); )
i = i*10 + (*cp++ - '0');
while ( !isalpha(*cp++) )
for (i = 0; isdigit(*cp); )
i = i*10 + (*cp++ - '0');
for (i = 0; isdigit(*cp); )
i = i*10 + (*cp++ - '0');
{ /* hack: ctime w/o TZ */
* Luckly, 4 digit times in the range
* 1960-1999 aren't legal as hour
tw.tw_zone = 60 * (('a'-1) - LC(*cp));
tw.tw_zone = 60 * ('a' - LC(*cp));
tw.tw_zone = 60 * (LC(*cp) - 'm');
tw.tw_zone = ((cp[0] * 10 + cp[1])
tw.tw_zone = (('0' * 10 + '0')
-(cp[0] * 10 + cp[1]))*60
struct yywork { YYTYPE verify, advance; } yycrank[] ={
9,63, 21,82, 22,83, 22,83,
3,10, 10,64, 10,64, 10,64,
10,64, 10,64, 10,64, 10,64,
10,64, 10,64, 10,64, 0,0,
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,
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,
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,
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, 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,
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, 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,
342,349, 342,349, 342,349, 342,349,
342,349, 342,349, 342,349, 342,349,
342,349, 350,349, 0,0, 0,0,
yycrank+12, 0, yyvstop+5,
yycrank+57, 0, yyvstop+7,
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+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+219, yysvec+8, 0,
yycrank+239, yysvec+8, 0,
yycrank+182, yysvec+50, 0,
yycrank+0, 0, yyvstop+47,
yycrank+385, 0, yyvstop+49,
yycrank+422, 0, yyvstop+51,
yycrank+293, yysvec+139, 0,
yycrank+310, yysvec+140, 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+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+347, yysvec+179, 0,
yycrank+353, yysvec+179, 0,
yycrank+529, 0, yyvstop+103,
yycrank+541, 0, yyvstop+105,
yycrank+406, yysvec+189, yyvstop+107,
yycrank+359, yysvec+195, 0,
yycrank+376, yysvec+196, 0,
yycrank+377, yysvec+196, 0,
yycrank+368, yysvec+202, 0,
yycrank+364, yysvec+202, 0,
yycrank+481, yysvec+188, yyvstop+109,
yycrank+482, 0, yyvstop+112,
yycrank+477, 0, yyvstop+114,
yycrank+532, yysvec+236, 0,
yycrank+581, 0, yyvstop+116,
yycrank+828, 0, yyvstop+118,
yycrank+592, 0, yyvstop+120,
yycrank+593, 0, yyvstop+122,
yycrank+864, 0, yyvstop+124,
yycrank+546, yysvec+244, yyvstop+126,
yycrank+608, 0, yyvstop+128,
yycrank+890, 0, yyvstop+131,
yycrank+0, yysvec+260, 0,
yycrank+0, yysvec+260, 0,
yycrank+0, 0, yyvstop+133,
yycrank+0, 0, yyvstop+135,
yycrank+0, 0, yyvstop+137,
yycrank+0, 0, yyvstop+139,
yycrank+0, yysvec+275, 0,
yycrank+0, yysvec+275, 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+916, yysvec+243, yyvstop+155,
yycrank+689, 0, yyvstop+157,
yycrank+653, yysvec+298, yyvstop+159,
yycrank+658, yysvec+212, yyvstop+161,
yycrank+0, yysvec+260, 0,
yycrank+0, yysvec+275, 0,
yycrank+0, yysvec+306, 0,
yycrank+0, yysvec+304, 0,
yycrank+0, yysvec+306, 0,
yycrank+0, yysvec+260, 0,
yycrank+0, yysvec+260, 0,
yycrank+0, yysvec+275, 0,
yycrank+0, yysvec+275, 0,
yycrank+0, yysvec+318, yyvstop+163,
yycrank+0, yysvec+323, 0,
yycrank+0, yysvec+321, 0,
yycrank+0, yysvec+323, 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+0, yysvec+323, 0,
yycrank+829, 0, yyvstop+169,
yycrank+953, yysvec+325, yyvstop+171,
yycrank+0, 0, yyvstop+173,
struct yywork *yytop = yycrank+1013;
struct yysvf *yybgin = yysvec+1;
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 ,
/* ncform 4.1 83/08/11 */