home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Utilities / byacc 1.8.2 / test / getdate.tab.pl < prev    next >
Encoding:
Text File  |  1993-02-04  |  29.6 KB  |  1,215 lines  |  [TEXT/R*ch]

  1. $yysccsid = "@(#)yaccpar 1.8 (Berkeley) 01/20/91 (Perl 2.0 12/31/92)";
  2. #define YYBYACC 1
  3. #line 3 "getdate.y"
  4. ;#     Steven M. Bellovin (unc!smb)
  5. ;#    Dept. of Computer Science
  6. ;#    University of North Carolina at Chapel Hill
  7. ;#    @(#)getdate.y    2.13    9/16/86
  8. ;#
  9. ;#    Richard J. Ohnemus (rick@IMD.Sterling.COM)
  10. ;#    (Where do I work??? I'm not even sure who I am! 8-{)
  11. ;#    04/24/92  converted to PERL.
  12. ;#    07/06/92  New date format (MONTH NUMBER NUMBER ':' NUMBER ':' NUMBER)
  13. ;#          suggested by Raphael Manfredi <ram@eiffel.com>.
  14. ;#    07/08/92  Fixed table search in &lookup.
  15. ;#          Call &localtime with correct value in &monthadd.
  16. ;#    10/08/92  Numeric values starting with pattern '0+[89]' interpretted
  17. ;#          correctly.
  18. ;#          Corrected European Western and Eastern time offsets.
  19. ;#          Borrowed code from timelocal.pl to determine timezone offset
  20. ;#          from GMT.
  21. ;#    10/10/92  Handle time zone offsets correctly (sign was reversed).
  22. ;#          Set global time zone variable ('ourzone') correctly.
  23.  
  24. package getdate;
  25.  
  26. $AM = 1;
  27. $PM = 2;
  28. $DAYLIGHT = 1;
  29. $STANDARD = 2;
  30. $MAYBE = 3;
  31.  
  32. @mdays = (31, 0, 31,  30, 31, 30,  31, 31, 30,  31, 30, 31);
  33. $epoch = 1970;
  34. $daysec = 24 * 60 * 60;
  35. #line 36 "getdate.tab.pl"
  36. $ID=257;
  37. $MONTH=258;
  38. $DAY=259;
  39. $MERIDIAN=260;
  40. $NUMBER=261;
  41. $UNIT=262;
  42. $MUNIT=263;
  43. $SUNIT=264;
  44. $ZONE=265;
  45. $DAYZONE=266;
  46. $AGO=267;
  47. $YYERRCODE=256;
  48. @yylhs = (                                               -1,
  49.     0,    0,    1,    1,    1,    1,    1,    1,    7,    2,
  50.     2,    2,    2,    2,    2,    2,    3,    3,    5,    5,
  51.     5,    4,    4,    4,    4,    4,    4,    4,    4,    4,
  52.     6,    6,    6,    6,    6,    6,    6,
  53. );
  54. @yylen = (                                                2,
  55.     0,    2,    1,    1,    1,    1,    1,    1,    1,    2,
  56.     3,    4,    4,    5,    6,    6,    1,    1,    1,    2,
  57.     2,    3,    5,    2,    4,    5,    7,    3,    2,    3,
  58.     2,    2,    2,    1,    1,    1,    2,
  59. );
  60. @yydefred = (                                             1,
  61.     0,    0,    0,    0,   34,   35,   36,   17,   18,    2,
  62.     3,    4,    5,    6,    0,    8,    0,   20,    0,   21,
  63.    10,   31,   32,   33,    0,    0,   37,    0,    0,   30,
  64.     0,    0,    0,   25,   12,   13,    0,    0,    0,    0,
  65.    23,    0,   15,   16,   27,
  66. );
  67. @yydgoto = (                                              1,
  68.    10,   11,   12,   13,   14,   15,   16,
  69. );
  70. @yysindex = (                                             0,
  71.  -241, -255,  -37,  -47,    0,    0,    0,    0,    0,    0,
  72.     0,    0,    0,    0, -259,    0,  -42,    0, -252,    0,
  73.     0,    0,    0,    0, -249, -248,    0,  -44, -246,    0,
  74.   -55,  -31, -235,    0,    0,    0, -234, -232,  -28, -256,
  75.     0, -230,    0,    0,    0,
  76. );
  77. @yyrindex = (                                             0,
  78.     0,    0,    1,   79,    0,    0,    0,    0,    0,    0,
  79.     0,    0,    0,    0,   10,    0,   46,    0,   55,    0,
  80.     0,    0,    0,    0,    0,    0,    0,   19,    0,    0,
  81.    64,   28,    0,    0,    0,    0,    0,    0,   37,   73,
  82.     0,    0,    0,    0,    0,
  83. );
  84. @yygindex = (                                             0,
  85.     0,    0,    0,    0,    0,    0,    0,
  86. );
  87. $YYTABLESIZE=345;
  88. @yytable = (                                             26,
  89.    19,   29,   37,   43,   44,   17,   18,   27,   30,    7,
  90.    25,   31,   32,   33,   34,   38,    2,    3,   28,    4,
  91.     5,    6,    7,    8,    9,   39,   40,   22,   41,   42,
  92.    45,    0,    0,    0,    0,    0,   26,    0,    0,    0,
  93.     0,    0,    0,    0,    0,   24,    0,    0,    0,    0,
  94.     0,    0,    0,    0,   29,    0,    0,    0,    0,    0,
  95.     0,    0,    0,   11,    0,    0,    0,    0,    0,    0,
  96.     0,    0,   14,    0,    0,    0,    0,    0,    9,    0,
  97.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  98.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  99.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  100.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  101.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  102.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  103.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  104.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  105.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  106.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  107.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  108.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  109.     0,    0,    0,    0,   35,   36,    0,    0,    0,    0,
  110.    19,   20,   21,    0,   22,   23,   24,    0,   28,    0,
  111.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  112.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  113.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  114.     0,    0,    0,    0,    0,    0,    0,    0,   19,   19,
  115.     0,   19,   19,   19,   19,   19,   19,    7,    7,    0,
  116.     7,    7,    7,    7,    7,    7,   28,   28,    0,   28,
  117.    28,   28,   28,   28,   28,   22,   22,    0,   22,   22,
  118.    22,   22,   22,   22,   26,   26,    0,   26,   26,   26,
  119.    26,   26,   26,   24,   24,    0,    0,   24,   24,   24,
  120.    24,   24,   29,   29,    0,    0,   29,   29,   29,   29,
  121.    29,   11,   11,    0,    0,   11,   11,   11,   11,   11,
  122.    14,   14,    0,    0,   14,   14,   14,   14,   14,    9,
  123.     0,    0,    0,    9,    9,
  124. );
  125. @yycheck = (                                             47,
  126.     0,   44,   58,  260,  261,  261,   44,  267,  261,    0,
  127.    58,  261,  261,   58,  261,   47,  258,  259,    0,  261,
  128.   262,  263,  264,  265,  266,  261,  261,    0,  261,   58,
  129.   261,   -1,   -1,   -1,   -1,   -1,    0,   -1,   -1,   -1,
  130.    -1,   -1,   -1,   -1,   -1,    0,   -1,   -1,   -1,   -1,
  131.    -1,   -1,   -1,   -1,    0,   -1,   -1,   -1,   -1,   -1,
  132.    -1,   -1,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,
  133.    -1,   -1,    0,   -1,   -1,   -1,   -1,   -1,    0,   -1,
  134.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  135.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  136.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  137.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  138.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  139.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  140.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  141.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  142.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  143.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  144.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  145.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  146.    -1,   -1,   -1,   -1,  260,  261,   -1,   -1,   -1,   -1,
  147.   258,  259,  260,   -1,  262,  263,  264,   -1,  261,   -1,
  148.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  149.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  150.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  151.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,
  152.    -1,  261,  262,  263,  264,  265,  266,  258,  259,   -1,
  153.   261,  262,  263,  264,  265,  266,  258,  259,   -1,  261,
  154.   262,  263,  264,  265,  266,  258,  259,   -1,  261,  262,
  155.   263,  264,  265,  266,  258,  259,   -1,  261,  262,  263,
  156.   264,  265,  266,  258,  259,   -1,   -1,  262,  263,  264,
  157.   265,  266,  258,  259,   -1,   -1,  262,  263,  264,  265,
  158.   266,  258,  259,   -1,   -1,  262,  263,  264,  265,  266,
  159.   258,  259,   -1,   -1,  262,  263,  264,  265,  266,  261,
  160.    -1,   -1,   -1,  265,  266,
  161. );
  162. $YYFINAL=1;
  163. #ifndef YYDEBUG
  164. #define YYDEBUG 0
  165. #endif
  166. $YYMAXTOKEN=267;
  167. #if YYDEBUG
  168. @yyname = (
  169. "end-of-file",'','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
  170. '','','','','','','','','','',"','",'','',"'/'",'','','','','','','','','','',"':'",'','','','','','','','','',
  171. '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
  172. '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
  173. '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
  174. '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
  175. '','','','','','','','','','','','','','','','','','','','','','','','','','','','','',"ID","MONTH","DAY",
  176. "MERIDIAN","NUMBER","UNIT","MUNIT","SUNIT","ZONE","DAYZONE","AGO",
  177. );
  178. @yyrule = (
  179. "\$accept : timedate",
  180. "timedate :",
  181. "timedate : timedate item",
  182. "item : tspec",
  183. "item : zone",
  184. "item : dtspec",
  185. "item : dyspec",
  186. "item : rspec",
  187. "item : nspec",
  188. "nspec : NUMBER",
  189. "tspec : NUMBER MERIDIAN",
  190. "tspec : NUMBER ':' NUMBER",
  191. "tspec : NUMBER ':' NUMBER MERIDIAN",
  192. "tspec : NUMBER ':' NUMBER NUMBER",
  193. "tspec : NUMBER ':' NUMBER ':' NUMBER",
  194. "tspec : NUMBER ':' NUMBER ':' NUMBER MERIDIAN",
  195. "tspec : NUMBER ':' NUMBER ':' NUMBER NUMBER",
  196. "zone : ZONE",
  197. "zone : DAYZONE",
  198. "dyspec : DAY",
  199. "dyspec : DAY ','",
  200. "dyspec : NUMBER DAY",
  201. "dtspec : NUMBER '/' NUMBER",
  202. "dtspec : NUMBER '/' NUMBER '/' NUMBER",
  203. "dtspec : MONTH NUMBER",
  204. "dtspec : MONTH NUMBER ',' NUMBER",
  205. "dtspec : MONTH NUMBER NUMBER ':' NUMBER",
  206. "dtspec : MONTH NUMBER NUMBER ':' NUMBER ':' NUMBER",
  207. "dtspec : MONTH NUMBER NUMBER",
  208. "dtspec : NUMBER MONTH",
  209. "dtspec : NUMBER MONTH NUMBER",
  210. "rspec : NUMBER UNIT",
  211. "rspec : NUMBER MUNIT",
  212. "rspec : NUMBER SUNIT",
  213. "rspec : UNIT",
  214. "rspec : MUNIT",
  215. "rspec : SUNIT",
  216. "rspec : rspec AGO",
  217. );
  218. #endif
  219. sub yyclearin { $yychar = -1; }
  220. sub yyerrok { $yyerrflag = 0; }
  221. $YYSTACKSIZE = $YYSTACKSIZE || $YYMAXDEPTH || 500;
  222. $YYMAXDEPTH = $YYMAXDEPTH || $YYSTACKSIZE || 500;
  223. $yyss[$YYSTACKSIZE] = 0;
  224. $yyvs[$YYSTACKSIZE] = 0;
  225. sub YYERROR { ++$yynerrs; &yy_err_recover; }
  226. sub yy_err_recover
  227. {
  228.   if ($yyerrflag < 3)
  229.   {
  230.     $yyerrflag = 3;
  231.     while (1)
  232.     {
  233.       if (($yyn = $yysindex[$yyss[$yyssp]]) && 
  234.           ($yyn += $YYERRCODE) >= 0 && 
  235.           $yycheck[$yyn] == $YYERRCODE)
  236.       {
  237. #if YYDEBUG
  238.        print "yydebug: state $yyss[$yyssp], error recovery shifting",
  239.              " to state $yytable[$yyn]\n" if $yydebug;
  240. #endif
  241.         $yyss[++$yyssp] = $yystate = $yytable[$yyn];
  242.         $yyvs[++$yyvsp] = $yylval;
  243.         next yyloop;
  244.       }
  245.       else
  246.       {
  247. #if YYDEBUG
  248.         print "yydebug: error recovery discarding state ",
  249.               $yyss[$yyssp], "\n"  if $yydebug;
  250. #endif
  251.         return(1) if $yyssp <= 0;
  252.         --$yyssp;
  253.         --$yyvsp;
  254.       }
  255.     }
  256.   }
  257.   else
  258.   {
  259.     return (1) if $yychar == 0;
  260. #if YYDEBUG
  261.     if ($yydebug)
  262.     {
  263.       $yys = '';
  264.       if ($yychar <= $YYMAXTOKEN) { $yys = $yyname[$yychar]; }
  265.       if (!$yys) { $yys = 'illegal-symbol'; }
  266.       print "yydebug: state $yystate, error recovery discards ",
  267.             "token $yychar ($yys)\n";
  268.     }
  269. #endif
  270.     $yychar = -1;
  271.     next yyloop;
  272.   }
  273. 0;
  274. } # yy_err_recover
  275.  
  276. sub yyparse
  277. {
  278. #ifdef YYDEBUG
  279.   if ($yys = $ENV{'YYDEBUG'})
  280.   {
  281.     $yydebug = int($1) if $yys =~ /^(\d)/;
  282.   }
  283. #endif
  284.  
  285.   $yynerrs = 0;
  286.   $yyerrflag = 0;
  287.   $yychar = (-1);
  288.  
  289.   $yyssp = 0;
  290.   $yyvsp = 0;
  291.   $yyss[$yyssp] = $yystate = 0;
  292.  
  293. yyloop: while(1)
  294.   {
  295.     yyreduce: {
  296.       last yyreduce if ($yyn = $yydefred[$yystate]);
  297.       if ($yychar < 0)
  298.       {
  299.         if (($yychar = &yylex) < 0) { $yychar = 0; }
  300. #if YYDEBUG
  301.         if ($yydebug)
  302.         {
  303.           $yys = '';
  304.           if ($yychar <= $#yyname) { $yys = $yyname[$yychar]; }
  305.           if (!$yys) { $yys = 'illegal-symbol'; };
  306.           print "yydebug: state $yystate, reading $yychar ($yys)\n";
  307.         }
  308. #endif
  309.       }
  310.       if (($yyn = $yysindex[$yystate]) && ($yyn += $yychar) >= 0 &&
  311.               $yycheck[$yyn] == $yychar)
  312.       {
  313. #if YYDEBUG
  314.         print "yydebug: state $yystate, shifting to state ",
  315.               $yytable[$yyn], "\n"  if $yydebug;
  316. #endif
  317.         $yyss[++$yyssp] = $yystate = $yytable[$yyn];
  318.         $yyvs[++$yyvsp] = $yylval;
  319.         $yychar = (-1);
  320.         --$yyerrflag if $yyerrflag > 0;
  321.         next yyloop;
  322.       }
  323.       if (($yyn = $yyrindex[$yystate]) && ($yyn += $yychar) >= 0 &&
  324.             $yycheck[$yyn] == $yychar)
  325.       {
  326.         $yyn = $yytable[$yyn];
  327.         last yyreduce;
  328.       }
  329.       if (! $yyerrflag) {
  330.         &yyerror('syntax error');
  331.         ++$yynerrs;
  332.       }
  333.       return(1) if &yy_err_recover;
  334.     } # yyreduce
  335. #if YYDEBUG
  336.     print "yydebug: state $yystate, reducing by rule ",
  337.           "$yyn ($yyrule[$yyn])\n"  if $yydebug;
  338. #endif
  339.     $yym = $yylen[$yyn];
  340.     $yyval = $yyvs[$yyvsp+1-$yym];
  341.     switch:
  342.     {
  343. if ($yyn == 3) {
  344. #line 41 "getdate.y"
  345.  
  346.         {
  347.             $timeflag++;
  348.         
  349. last switch;
  350. } }
  351. if ($yyn == 4) {
  352. #line 45 "getdate.y"
  353.  
  354.         {
  355.             $zoneflag++;
  356.         
  357. last switch;
  358. } }
  359. if ($yyn == 5) {
  360. #line 49 "getdate.y"
  361.  
  362.         {
  363.             $dateflag++;
  364.         
  365. last switch;
  366. } }
  367. if ($yyn == 6) {
  368. #line 53 "getdate.y"
  369.  
  370.         {
  371.             $dayflag++;
  372.         
  373. last switch;
  374. } }
  375. if ($yyn == 7) {
  376. #line 57 "getdate.y"
  377.  
  378.         {
  379.             $relflag++;
  380.         
  381. last switch;
  382. } }
  383. if ($yyn == 9) {
  384. #line 64 "getdate.y"
  385.  
  386.         {
  387.             if ($timeflag && $dateflag && !$relflag) {
  388.             $year = $yyvs[$yyvsp-0];
  389.             }
  390.             else {
  391.             $timeflag++;
  392.             $hh = int($yyvs[$yyvsp-0] / 100);
  393.             $mm = $yyvs[$yyvsp-0] % 100;
  394.             $ss = 0;
  395.             $merid = 24;
  396.             }
  397.         
  398. last switch;
  399. } }
  400. if ($yyn == 10) {
  401. #line 79 "getdate.y"
  402.  
  403.         {
  404.             $hh = $yyvs[$yyvsp-1];
  405.             $mm = 0;
  406.             $ss = 0;
  407.             $merid = $yyvs[$yyvsp-0];
  408.         
  409. last switch;
  410. } }
  411. if ($yyn == 11) {
  412. #line 86 "getdate.y"
  413.  
  414.         {
  415.             $hh = $yyvs[$yyvsp-2];
  416.             $mm = $yyvs[$yyvsp-0];
  417.             $merid = 24;
  418.         
  419. last switch;
  420. } }
  421. if ($yyn == 12) {
  422. #line 92 "getdate.y"
  423.  
  424.         {
  425.             $hh = $yyvs[$yyvsp-3];
  426.             $mm = $yyvs[$yyvsp-1];
  427.             $merid = $yyvs[$yyvsp-0];
  428.         
  429. last switch;
  430. } }
  431. if ($yyn == 13) {
  432. #line 98 "getdate.y"
  433.  
  434.         {
  435.             $hh = $yyvs[$yyvsp-3];
  436.             $mm = $yyvs[$yyvsp-1];
  437.             $merid = 24;
  438.             $daylight = $STANDARD;
  439.             $ourzone = -($yyvs[$yyvsp-0] % 100 + 60 * int($yyvs[$yyvsp-0] / 100));
  440.         
  441. last switch;
  442. } }
  443. if ($yyn == 14) {
  444. #line 106 "getdate.y"
  445.  
  446.         {
  447.             $hh = $yyvs[$yyvsp-4];
  448.             $mm = $yyvs[$yyvsp-2];
  449.             $ss = $yyvs[$yyvsp-0];
  450.             $merid = 24;
  451.         
  452. last switch;
  453. } }
  454. if ($yyn == 15) {
  455. #line 113 "getdate.y"
  456.  
  457.         {
  458.             $hh = $yyvs[$yyvsp-5];
  459.             $mm = $yyvs[$yyvsp-3];
  460.             $ss = $yyvs[$yyvsp-1];
  461.             $merid = $yyvs[$yyvsp-0];
  462.         
  463. last switch;
  464. } }
  465. if ($yyn == 16) {
  466. #line 120 "getdate.y"
  467.  
  468.         {
  469.             $hh = $yyvs[$yyvsp-5];
  470.             $mm = $yyvs[$yyvsp-3];
  471.             $ss = $yyvs[$yyvsp-1];
  472.             $merid = 24;
  473.             $daylight = $STANDARD;
  474.             $ourzone = -($yyvs[$yyvsp-0] % 100 + 60 * int($yyvs[$yyvsp-0] / 100));
  475.         
  476. last switch;
  477. } }
  478. if ($yyn == 17) {
  479. #line 131 "getdate.y"
  480.  
  481.         {
  482.             $ourzone = $yyvs[$yyvsp-0];
  483.             $daylight = $STANDARD;
  484.         
  485. last switch;
  486. } }
  487. if ($yyn == 18) {
  488. #line 136 "getdate.y"
  489.  
  490.         {
  491.             $ourzone = $yyvs[$yyvsp-0];
  492.             $daylight = $DAYLIGHT;
  493.         
  494. last switch;
  495. } }
  496. if ($yyn == 19) {
  497. #line 143 "getdate.y"
  498.  
  499.         {
  500.             $dayord = 1;
  501.             $dayreq = $yyvs[$yyvsp-0];
  502.         
  503. last switch;
  504. } }
  505. if ($yyn == 20) {
  506. #line 148 "getdate.y"
  507.  
  508.         {
  509.             $dayord = 1;
  510.             $dayreq = $yyvs[$yyvsp-1];
  511.         
  512. last switch;
  513. } }
  514. if ($yyn == 21) {
  515. #line 153 "getdate.y"
  516.  
  517.         {
  518.             $dayord = $yyvs[$yyvsp-1];
  519.             $dayreq = $yyvs[$yyvsp-0];
  520.         
  521. last switch;
  522. } }
  523. if ($yyn == 22) {
  524. #line 160 "getdate.y"
  525.  
  526.         {
  527.             $month = $yyvs[$yyvsp-2];
  528.             $day = $yyvs[$yyvsp-0];
  529.         
  530. last switch;
  531. } }
  532. if ($yyn == 23) {
  533. #line 165 "getdate.y"
  534.  
  535.         {
  536.             #
  537. ;#              * HACK ALERT!!!!
  538. ;#              * The 1000 is a magic number to attempt to force
  539. ;#              * use of 4 digit years if year/month/day can be
  540. ;#              * parsed. This was only done for backwards
  541. ;#              * compatibility in rh.
  542. ;#              
  543.  
  544.             if ($yyvs[$yyvsp-4] > 1000) {
  545.             $year = $yyvs[$yyvsp-4];
  546.             $month = $yyvs[$yyvsp-2];
  547.             $day = $yyvs[$yyvsp-0];
  548.             }
  549.             else {
  550.             $month = $yyvs[$yyvsp-4];
  551.             $day = $yyvs[$yyvsp-2];
  552.             $year = $yyvs[$yyvsp-0];
  553.             }
  554.         
  555. last switch;
  556. } }
  557. if ($yyn == 24) {
  558. #line 185 "getdate.y"
  559.  
  560.         {
  561.             $month = $yyvs[$yyvsp-1];
  562.             $day = $yyvs[$yyvsp-0];
  563.         
  564. last switch;
  565. } }
  566. if ($yyn == 25) {
  567. #line 190 "getdate.y"
  568.  
  569.         {
  570.             $month = $yyvs[$yyvsp-3];
  571.             $day = $yyvs[$yyvsp-2];
  572.             $year = $yyvs[$yyvsp-0];
  573.         
  574. last switch;
  575. } }
  576. if ($yyn == 26) {
  577. #line 196 "getdate.y"
  578.  
  579.         {
  580.             $month = $yyvs[$yyvsp-4];
  581.             $day = $yyvs[$yyvsp-3];
  582.             $hh = $yyvs[$yyvsp-2];
  583.             $mm = $yyvs[$yyvsp-0];
  584.             $merid = 24;
  585.             $timeflag++;
  586.         
  587. last switch;
  588. } }
  589. if ($yyn == 27) {
  590. #line 205 "getdate.y"
  591.  
  592.         {
  593.             $month = $yyvs[$yyvsp-6];
  594.             $day = $yyvs[$yyvsp-5];
  595.             $hh = $yyvs[$yyvsp-4];
  596.             $mm = $yyvs[$yyvsp-2];
  597.             $ss = $yyvs[$yyvsp-0];
  598.             $merid = 24;
  599.             $timeflag++;
  600.         
  601. last switch;
  602. } }
  603. if ($yyn == 28) {
  604. #line 215 "getdate.y"
  605.  
  606.         {
  607.             $month = $yyvs[$yyvsp-2];
  608.             $day = $yyvs[$yyvsp-1];
  609.             $year = $yyvs[$yyvsp-0];
  610.         
  611. last switch;
  612. } }
  613. if ($yyn == 29) {
  614. #line 221 "getdate.y"
  615.  
  616.         {
  617.             $month = $yyvs[$yyvsp-0];
  618.             $day = $yyvs[$yyvsp-1];
  619.         
  620. last switch;
  621. } }
  622. if ($yyn == 30) {
  623. #line 226 "getdate.y"
  624.  
  625.         {
  626.             $month = $yyvs[$yyvsp-1];
  627.             $day = $yyvs[$yyvsp-2];
  628.             $year = $yyvs[$yyvsp-0];
  629.         
  630. last switch;
  631. } }
  632. if ($yyn == 31) {
  633. #line 234 "getdate.y"
  634.  
  635.         {
  636.             $relsec += 60 * $yyvs[$yyvsp-1] * $yyvs[$yyvsp-0];
  637.         
  638. last switch;
  639. } }
  640. if ($yyn == 32) {
  641. #line 238 "getdate.y"
  642.  
  643.         {
  644.             $relmonth += $yyvs[$yyvsp-1] * $yyvs[$yyvsp-0];
  645.         
  646. last switch;
  647. } }
  648. if ($yyn == 33) {
  649. #line 242 "getdate.y"
  650.  
  651.         {
  652.             $relsec += $yyvs[$yyvsp-1];
  653.         
  654. last switch;
  655. } }
  656. if ($yyn == 34) {
  657. #line 246 "getdate.y"
  658.  
  659.         {
  660.             $relsec +=  60 * $yyvs[$yyvsp-0];
  661.         
  662. last switch;
  663. } }
  664. if ($yyn == 35) {
  665. #line 250 "getdate.y"
  666.  
  667.         {
  668.             $relmonth += $yyvs[$yyvsp-0];
  669.         
  670. last switch;
  671. } }
  672. if ($yyn == 36) {
  673. #line 254 "getdate.y"
  674.  
  675.         {
  676.             $relsec++;
  677.         
  678. last switch;
  679. } }
  680. if ($yyn == 37) {
  681. #line 258 "getdate.y"
  682.  
  683.         {
  684.             $relsec = -$relsec;
  685.             $relmonth = -$relmonth;
  686.         
  687. last switch;
  688. } }
  689. #line 690 "getdate.tab.pl"
  690.     } # switch
  691.     $yyssp -= $yym;
  692.     $yystate = $yyss[$yyssp];
  693.     $yyvsp -= $yym;
  694.     $yym = $yylhs[$yyn];
  695.     if ($yystate == 0 && $yym == 0)
  696.     {
  697. #if YYDEBUG
  698.       print "yydebug: after reduction, shifting from state 0 ",
  699.             "to state $YYFINAL\n" if $yydebug;
  700. #endif
  701.       $yystate = $YYFINAL;
  702.       $yyss[++$yyssp] = $YYFINAL;
  703.       $yyvs[++$yyvsp] = $yyval;
  704.       if ($yychar < 0)
  705.       {
  706.         if (($yychar = &yylex) < 0) { $yychar = 0; }
  707. #if YYDEBUG
  708.         if ($yydebug)
  709.         {
  710.           $yys = '';
  711.           if ($yychar <= $#yyname) { $yys = $yyname[$yychar]; }
  712.           if (!$yys) { $yys = 'illegal-symbol'; }
  713.           print "yydebug: state $YYFINAL, reading $yychar ($yys)\n";
  714.         }
  715. #endif
  716.       }
  717.       return(0) if $yychar == 0;
  718.       next yyloop;
  719.     }
  720.     if (($yyn = $yygindex[$yym]) && ($yyn += $yystate) >= 0 &&
  721.         $yyn <= $#yycheck && $yycheck[$yyn] == $yystate)
  722.     {
  723.         $yystate = $yytable[$yyn];
  724.     } else {
  725.         $yystate = $yydgoto[$yym];
  726.     }
  727. #if YYDEBUG
  728.     print "yydebug: after reduction, shifting from state ",
  729.         "$yyss[$yyssp] to state $yystate\n" if $yydebug;
  730. #endif
  731.     $yyss[++$yyssp] = $yystate;
  732.     $yyvs[++$yyvsp] = $yyval;
  733.   } # yyloop
  734. } # yyparse
  735. #line 265 "getdate.y"
  736.  
  737. sub dateconv
  738. {
  739.     local($mm, $dd, $yy, $h, $m, $s, $mer, $zone, $dayflag) = @_;
  740.     local($time_of_day, $jdate);
  741.     local($i);
  742.  
  743.     if ($yy < 0) {
  744.     $yy = -$yy;
  745.     }
  746.     if ($yy < 100) {
  747.     $yy += 1900;
  748.     }
  749.     $mdays[1] =
  750.     28 + (($yy % 4) == 0 && (($yy % 100) != 0 || ($yy % 400) == 0));
  751.     if ($yy < $epoch || $yy > 2001 || $mm < 1 || $mm > 12
  752.     || $dd < 1 || $dd > $mdays[--$mm]) {
  753.     return -1;
  754.     }
  755.     $jdate = $dd - 1;
  756.     for ($i = 0; $i < $mm; $i++) {
  757.     $jdate += $mdays[$i];
  758.     }
  759.     for ($i = $epoch; $i < $yy; $i++) {
  760.     $jdate += 365 + (($i % 4) == 0);
  761.     }
  762.     $jdate *= $daysec;
  763.     $jdate += $zone * 60;
  764.     if (($time_of_day = &timeconv($h, $m, $s, $mer)) < 0) {
  765.     return -1;
  766.     }
  767.     $jdate += $time_of_day;
  768.     if ($dayflag == $DAYLIGHT
  769.     || ($dayflag == $MAYBE && (localtime($jdate))[8])) {
  770.     $jdate -= 60 * 60;
  771.     }
  772.     return $jdate;
  773. }
  774.  
  775. sub dayconv
  776. {
  777.     local($ordday, $day, $now) = @_;
  778.     local(@loctime);
  779.     local($time_of_day);
  780.  
  781.     $time_of_day = $now;
  782.     @loctime = localtime($time_of_day);
  783.     $time_of_day += $daysec * (($day - $loctime[6] + 7) % 7);
  784.     $time_of_day += 7 * $daysec * ($ordday <= 0 ? $ordday : $ordday - 1);
  785.     return &daylcorr($time_of_day, $now);
  786. }
  787.  
  788. sub timeconv
  789. {
  790.     local($hh, $mm, $ss, $mer) = @_;
  791.  
  792.     return -1 if ($mm < 0 || $mm > 59 || $ss < 0 || $ss > 59);
  793.  
  794.     if ($mer == $AM) {
  795.     return -1 if ($hh < 1 || $hh > 12);
  796.     return 60 * (($hh % 12) * 60 + $mm) + $ss;
  797.     }
  798.     if ($mer == $PM) {
  799.     return -1 if ($hh < 1 || $hh > 12);
  800.     return 60 * (($hh % 12 + 12) * 60 + $mm) + $ss;
  801.     }
  802.     if ($mer == 24) {
  803.     return -1 if ($hh < 0 || $hh > 23);
  804.     return 60 * ($hh * 60 + $mm) + $ss;
  805.     }
  806.     return -1;
  807. }
  808.  
  809. sub monthadd
  810. {
  811.     local($sdate, $relmonth) = @_;
  812.     local(@ltime);
  813.     local($mm, $yy);
  814.     
  815.     return 0 if ($relmonth == 0);
  816.  
  817.     @ltime = localtime($sdate);
  818.     $mm = 12 * $ltime[5] + $ltime[4] + $relmonth;
  819.     $yy = int($mm / 12);
  820.     $mm = $mm % 12 + 1;
  821.     return &daylcorr(&dateconv($mm, $ltime[3], $yy, $ltime[2],
  822.                    $ltime[1], $ltime[0], 24, $ourzone, $MAYBE),
  823.              $sdate);
  824. }
  825.  
  826. sub daylcorr
  827. {
  828.     local($future, $now) = @_;
  829.     local($fdayl, $nowdayl);
  830.  
  831.     $nowdayl = ((localtime($now))[2] + 1) % 24;
  832.     $fdayl = ((localtime($future))[2] + 1) % 24;
  833.     return ($future - $now) + 60 * 60 * ($nowdayl - $fdayl);
  834. }
  835.  
  836. sub yylex
  837. {
  838.     local($pcnt, $sign);
  839.  
  840.     while (1) {
  841.     $dtstr =~ s/^\s*//;
  842.     
  843.     if ($dtstr =~ /^([-+])/) {
  844.         $sign = ($1 eq '-') ? -1 : 1;
  845.         $dtstr =~ s/^.//;
  846.         if ($dtstr =~ /^(\d+)/) {
  847.         $num = $1;
  848.         $num =~ s/^0+//;
  849.         if ($num eq '') {
  850.             $yylval = 0;
  851.         }
  852.         else {
  853.             $yylval = eval "$num * $sign";
  854.         }
  855.         $dtstr =~ s/^\d+//;
  856.         return $NUMBER;
  857.         }
  858.         else {
  859.         return &yylex;
  860.         }
  861.     }
  862.     elsif ($dtstr =~ /^(\d+)/) {
  863.         $num = $1;
  864.         $num =~ s/^0+//;
  865.         if ($num eq '') {
  866.         $yylval = 0;
  867.         }
  868.         else {
  869.         $yylval = eval "$num";
  870.         }
  871.         $dtstr =~ s/^\d+//;
  872.         return $NUMBER;
  873.     }
  874.     elsif ($dtstr =~ /^([a-zA-z][a-zA-Z.]*)/) {
  875.         $dtstr = substr($dtstr, length($1));
  876.         return &lookup($1);
  877.     }
  878.     elsif ($dtstr =~ /^\(/) {
  879.         $pcnt = 0;
  880.         do {
  881.         $dtstr = s/^(.)//;
  882.         return 0 if !defined($1);
  883.         $pcnt++ if ($1 eq '(');
  884.         $pcnt-- if ($1 eq ')');
  885.         } while ($pcnt > 0);
  886.     }
  887.     else {
  888.         $yylval = ord(substr($dtstr, 0, 1));
  889.         $dtstr =~ s/^.//;
  890.         return $yylval;
  891.     }
  892.     }
  893. }
  894.  
  895.  
  896. %mdtab = (
  897.       "January",    "$MONTH,1",
  898.       "February",    "$MONTH,2",
  899.       "March",     "$MONTH,3",
  900.       "April",    "$MONTH,4",
  901.       "May",    "$MONTH,5",
  902.       "June",    "$MONTH,6",
  903.       "July",    "$MONTH,7",
  904.       "August",    "$MONTH,8",
  905.       "September",    "$MONTH,9",
  906.       "Sept",    "$MONTH,9",
  907.       "October",    "$MONTH,10",
  908.       "November",    "$MONTH,11",
  909.       "December",    "$MONTH,12",
  910.  
  911.       "Sunday",    "$DAY,0",
  912.       "Monday",    "$DAY,1",
  913.       "Tuesday",    "$DAY,2",
  914.       "Tues",    "$DAY,2",
  915.       "Wednesday",    "$DAY,3",
  916.       "Wednes",    "$DAY,3",
  917.       "Thursday",    "$DAY,4",
  918.       "Thur",    "$DAY,4",
  919.       "Thurs",    "$DAY,4",
  920.       "Friday",    "$DAY,5",
  921.       "Saturday",    "$DAY,6"
  922.       );
  923.  
  924. $HRS='*60';
  925. $HALFHR='30';
  926.  
  927. %mztab = (
  928.       "a.m.",    "$MERIDIAN,$AM",
  929.       "am",        "$MERIDIAN,$AM",
  930.       "p.m.",    "$MERIDIAN,$PM",
  931.       "pm",        "$MERIDIAN,$PM",
  932.       "nst",    "$ZONE,3 $HRS + $HALFHR",    # Newfoundland
  933.       "n.s.t.",    "$ZONE,3 $HRS + $HALFHR",
  934.       "ast",    "$ZONE,4 $HRS",            # Atlantic
  935.       "a.s.t.",    "$ZONE,4 $HRS",
  936.       "adt",    "$DAYZONE,4 $HRS",
  937.       "a.d.t.",    "$DAYZONE,4 $HRS",
  938.       "est",    "$ZONE,5 $HRS",            # Eastern
  939.       "e.s.t.",    "$ZONE,5 $HRS",
  940.       "edt",    "$DAYZONE,5 $HRS",
  941.       "e.d.t.",    "$DAYZONE,5 $HRS",
  942.       "cst",    "$ZONE,6 $HRS",            # Central
  943.       "c.s.t.",    "$ZONE,6 $HRS",
  944.       "cdt",    "$DAYZONE,6 $HRS",
  945.       "c.d.t.",    "$DAYZONE,6 $HRS",
  946.       "mst",    "$ZONE,7 $HRS",            # Mountain
  947.       "m.s.t.",    "$ZONE,7 $HRS",
  948.       "mdt",    "$DAYZONE,7 $HRS",
  949.       "m.d.t.",    "$DAYZONE,7 $HRS",
  950.       "pst",    "$ZONE,8 $HRS",            # Pacific
  951.       "p.s.t.",    "$ZONE,8 $HRS",
  952.       "pdt",    "$DAYZONE,8 $HRS",
  953.       "p.d.t.",    "$DAYZONE,8 $HRS",
  954.       "yst",    "$ZONE,9 $HRS",            # Yukon
  955.       "y.s.t.",    "$ZONE,9 $HRS",
  956.       "ydt",    "$DAYZONE,9 $HRS",
  957.       "y.d.t.",    "$DAYZONE,9 $HRS",
  958.       "hst",    "$ZONE,10 $HRS",        # Hawaii
  959.       "h.s.t.",    "$ZONE,10 $HRS",
  960.       "hdt",    "$DAYZONE,10 $HRS",
  961.       "h.d.t.",    "$DAYZONE,10 $HRS",
  962.  
  963.       "gmt",    "$ZONE,0 $HRS",
  964.       "g.m.t.",    "$ZONE,0 $HRS",
  965.       "bst",    "$DAYZONE,0 $HRS",        # British Summer Time
  966.       "b.s.t.",    "$DAYZONE,0 $HRS",
  967.       "wet",    "$ZONE,0 $HRS ",        # Western European Time
  968.       "w.e.t.",    "$ZONE,0 $HRS ",
  969.       "west",    "$DAYZONE,0 $HRS",        # Western European Summer Time
  970.       "w.e.s.t.",    "$DAYZONE,0 $HRS",
  971.  
  972.       "met",    "$ZONE,-1 $HRS",        # Middle European Time
  973.       "m.e.t.",    "$ZONE,-1 $HRS",
  974.       "mest",    "$DAYZONE,-1 $HRS",        # Middle European Summer Time
  975.       "m.e.s.t.",    "$DAYZONE,-1 $HRS",
  976.       "eet",    "$ZONE,-2 $HRS",        # European Eastern Time
  977.       "e.e.t.",    "$ZONE,-2 $HRS",
  978.       "eest",    "$DAYZONE,-2 $HRS",        # European Eastern Summer Time
  979.       "e.e.s.t.",    "$DAYZONE,-2 $HRS",
  980.       "jst",    "$ZONE,-9 $HRS",        # Japan Standard Time
  981.       "j.s.t.",    "$ZONE,-9 $HRS",        # Japan Standard Time
  982.                               # No daylight savings time
  983.  
  984.       "aest",    "$ZONE,-10 $HRS",        # Australian Eastern Time
  985.       "a.e.s.t.",    "$ZONE,-10 $HRS",
  986.       "aesst",    "$DAYZONE,-10 $HRS",        # Australian Eastern Summer Time
  987.       "a.e.s.s.t.",    "$DAYZONE,-10 $HRS",
  988.       "acst",    "$ZONE,-(9 $HRS + $HALFHR)",    # Australian Central Time
  989.       "a.c.s.t.",    "$ZONE,-(9 $HRS + $HALFHR)",
  990.       "acsst",    "$DAYZONE,-(9 $HRS + $HALFHR)",    # Australian Central Summer
  991.       "a.c.s.s.t.",    "$DAYZONE,-(9 $HRS + $HALFHR)",
  992.       "awst",    "$ZONE,-8 $HRS",        # Australian Western Time
  993.       "a.w.s.t.",    "$ZONE,-8 $HRS"            # (no daylight time there, I'm told)
  994.       );
  995.  
  996. %unittab = (
  997.        "year",    "$MUNIT,12",
  998.        "month",    "$MUNIT,1",
  999.        "fortnight",    "$UNIT,14*24*60",
  1000.        "week",    "$UNIT,7*24*60",
  1001.        "day",    "$UNIT,1*24*60",
  1002.        "hour",    "$UNIT,60",
  1003.        "minute",    "$UNIT,1",
  1004.        "min",    "$UNIT,1",
  1005.        "second",    "$SUNIT,1",
  1006.        "sec",    "$SUNIT,1"
  1007.        );
  1008.  
  1009. %othertab = (
  1010.         "tomorrow",    "$UNIT,1*24*60",
  1011.         "yesterday","$UNIT,-1*24*60",
  1012.         "today",    "$UNIT,0",
  1013.         "now",    "$UNIT,0",
  1014.         "last",    "$NUMBER,-1",
  1015.         "this",    "$UNIT,0",
  1016.         "next",    "$NUMBER,2",
  1017.         "first",    "$NUMBER,1",
  1018.         # "second",    "$NUMBER,2",
  1019.         "third",    "$NUMBER,3",
  1020.         "fourth",    "$NUMBER,4",
  1021.         "fifth",    "$NUMBER,5",
  1022.         "sixth",    "$NUMBER,6",
  1023.         "seventh",    "$NUMBER,7",
  1024.         "eigth",    "$NUMBER,8",
  1025.         "ninth",    "$NUMBER,9",
  1026.         "tenth",    "$NUMBER,10",
  1027.         "eleventh",    "$NUMBER,11",
  1028.         "twelfth",    "$NUMBER,12",
  1029.         "ago",    "$AGO,1"
  1030.         );
  1031.  
  1032. %milzone = (
  1033.         "a",    "$ZONE,1 $HRS",
  1034.         "b",    "$ZONE,2 $HRS",
  1035.         "c",    "$ZONE,3 $HRS",
  1036.         "d",    "$ZONE,4 $HRS",
  1037.         "e",    "$ZONE,5 $HRS",
  1038.         "f",    "$ZONE,6 $HRS",
  1039.         "g",    "$ZONE,7 $HRS",
  1040.         "h",    "$ZONE,8 $HRS",
  1041.         "i",    "$ZONE,9 $HRS",
  1042.         "k",    "$ZONE,10 $HRS",
  1043.         "l",    "$ZONE,11 $HRS",
  1044.         "m",    "$ZONE,12 $HRS",
  1045.         "n",    "$ZONE,-1 $HRS",
  1046.         "o",    "$ZONE,-2 $HRS",
  1047.         "p",    "$ZONE,-3 $HRS",
  1048.         "q",    "$ZONE,-4 $HRS",
  1049.         "r",    "$ZONE,-5 $HRS",
  1050.         "s",    "$ZONE,-6 $HRS",
  1051.         "t",    "$ZONE,-7 $HRS",
  1052.         "u",    "$ZONE,-8 $HRS",
  1053.         "v",    "$ZONE,-9 $HRS",
  1054.         "w",    "$ZONE,-10 $HRS",
  1055.         "x",    "$ZONE,-11 $HRS",
  1056.         "y",    "$ZONE,-12 $HRS",
  1057.         "z",    "$ZONE,0 $HRS"
  1058.         );
  1059.  
  1060. sub lookup
  1061. {
  1062.     local($id) = @_;
  1063.     local($abbrev, $idvar, $key, $token);
  1064.  
  1065.     $idvar = $id;
  1066.     if (length($idvar) == 3) {
  1067.     $abbrev = 1;
  1068.     }
  1069.     elsif (length($idvar) == 4 && substr($idvar, 3, 1) eq '.') {
  1070.     $abbrev = 1;
  1071.     $idvar = substr($idvar, 0, 3);
  1072.     }
  1073.     else {
  1074.     $abbrev = 0;
  1075.     }
  1076.  
  1077.     substr($idvar, 0, 1) =~ tr/a-z/A-Z/;
  1078.     if (defined($mdtab{$idvar})) {
  1079.     ($token, $yylval) = split(/,/,$mdtab{$idvar});
  1080.     $yylval = eval "$yylval";
  1081.     return $token;
  1082.     }
  1083.     foreach $key (keys %mdtab) {
  1084.     if ($idvar eq substr($key, 0, 3)) {
  1085.         ($token, $yylval) = split(/,/,$mdtab{$key});
  1086.         $yylval = eval "$yylval";
  1087.         return $token;
  1088.     }
  1089.     }
  1090.     
  1091.     $idvar = $id;
  1092.     if (defined($mztab{$idvar})) {
  1093.     ($token, $yylval) = split(/,/,$mztab{$idvar});
  1094.     $yylval = eval "$yylval";
  1095.     return $token;
  1096.     }
  1097.     
  1098.     $idvar =~ tr/A-Z/a-z/;
  1099.     if (defined($mztab{$idvar})) {
  1100.     ($token, $yylval) = split(/,/,$mztab{$idvar});
  1101.     $yylval = eval "$yylval";
  1102.     return $token;
  1103.     }
  1104.     
  1105.     $idvar = $id;
  1106.     if (defined($unittab{$idvar})) {
  1107.     ($token, $yylval) = split(/,/,$unittab{$idvar});
  1108.     $yylval = eval "$yylval";
  1109.     return $token;
  1110.     }
  1111.     
  1112.     if ($idvar =~ /s$/) {
  1113.     $idvar =~ s/s$//;
  1114.     }
  1115.     if (defined($unittab{$idvar})) {
  1116.     ($token, $yylval) = split(/,/,$unittab{$idvar});
  1117.     $yylval = eval "$yylval";
  1118.     return $token;
  1119.     }
  1120.     
  1121.     $idvar = $id;
  1122.     if (defined($othertab{$idvar})) {
  1123.     ($token, $yylval) = split(/,/,$othertab{$idvar});
  1124.     $yylval = eval "$yylval";
  1125.     return $token;
  1126.     }
  1127.     
  1128.     if (length($idvar) == 1 && $idvar =~ /[a-zA-Z]/) {
  1129.     $idvar =~ tr/A-Z/a-z/;
  1130.     if (defined($milzone{$idvar})) {
  1131.         ($token, $yylval) = split(/,/,$milzone{$idvar});
  1132.         $yylval = eval "$yylval";
  1133.         return $token;
  1134.     }
  1135.     }
  1136.     
  1137.     return $ID;
  1138. }
  1139.  
  1140. sub main'getdate
  1141. {
  1142.     local($now);
  1143.     local(@lt);
  1144.     local($sdate);
  1145.     local($TZ);
  1146.  
  1147.     ($dtstr, $now, $ourzone) = @_;
  1148.  
  1149.     if (!$now) {
  1150.     $now = time;
  1151.     }
  1152.  
  1153.     if (!$ourzone) {
  1154.     $TZ = defined($ENV{'TZ'}) ? ($ENV{'TZ'} ? $ENV{'TZ'} : '') : '';
  1155.     if($TZ =~
  1156.        /^([^:\d+\-,]{3,})([+-]?\d{1,2}(:\d{1,2}){0,2})([^\d+\-,]{3,})?/) {
  1157.         $ourzone = $2 * 60;
  1158.     }
  1159.     else {
  1160.         @lt = localtime(0);
  1161.         $ourzone = $lt[2] * 60 + $lt[1];        # minutes east of GMT
  1162.         if ($ourzone > 0) {
  1163.         $ourzone = 24 * 60 - $ourzone;        # minutes west of GMT
  1164.             $ourzone -= 24 * 60 if $lt[5] == 70;    # account for date line
  1165.         }
  1166.     }
  1167.     }
  1168.  
  1169.     @lt = localtime($now);
  1170.     $year = 0;
  1171.     $month = $lt[4] + 1;
  1172.     $day = $lt[3];
  1173.     $relsec = $relmonth = 0;
  1174.     $timeflag = $zoneflag = $dateflag = $dayflag = $relflag = 0;
  1175.     $daylight = $MAYBE;
  1176.     $hh = $mm = $ss = 0;
  1177.     $merid = 24;
  1178.     
  1179.     $dtstr =~ tr/A-Z/a-z/;
  1180.  
  1181.     return -1 if &yyparse;
  1182.     
  1183.     return -1 if ($timeflag > 1 || $zoneflag > 1 || $dateflag > 1 || $dayflag > 1);
  1184.  
  1185.     if (!$year) {
  1186.     $year = ($month > ($lt[4] + 1)) ? ($lt[5] - 1) : $lt[5];
  1187.     }
  1188.  
  1189.     if ($dateflag || $timeflag || $dayflag) {
  1190.     $sdate = &dateconv($month, $day, $year, $hh, $mm, $ss,
  1191.                $merid, $ourzone, $daylight);
  1192.     if ($sdate < 0) {
  1193.         return -1;
  1194.     }
  1195.     }
  1196.     else {
  1197.     $sdate = $now;
  1198.     if ($relflag == 0) {
  1199.         $sdate -= ($lt[0] + $lt[1] * 60 + $lt[2] * (60 * 60));
  1200.     }
  1201.     }
  1202.     
  1203.     $sdate += $relsec + &monthadd($sdate, $relmonth);
  1204.     $sdate += &dayconv($dayord, $dayreq, $sdate) if ($dayflag && !$dateflag);
  1205.     
  1206.     return $sdate;
  1207. }
  1208.  
  1209. sub yyerror
  1210. {
  1211. }
  1212.  
  1213. 1;
  1214. #line 1215 "getdate.tab.pl"
  1215.