home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / gnu / sh-utils-1.12-src.lha / sh-utils-1.12 / lib / getdate.c < prev    next >
C/C++ Source or Header  |  1994-11-05  |  49KB  |  1,913 lines

  1.  
  2. /*  A Bison parser, made from ./getdate.y with Bison version GNU Bison version 1.22
  3.   */
  4.  
  5. #define YYBISON 1  /* Identify Bison output.  */
  6.  
  7. #define    tAGO    258
  8. #define    tDAY    259
  9. #define    tDAYZONE    260
  10. #define    tID    261
  11. #define    tMERIDIAN    262
  12. #define    tMINUTE_UNIT    263
  13. #define    tMONTH    264
  14. #define    tMONTH_UNIT    265
  15. #define    tSEC_UNIT    266
  16. #define    tSNUMBER    267
  17. #define    tUNUMBER    268
  18. #define    tZONE    269
  19. #define    tDST    270
  20.  
  21. #line 1 "./getdate.y"
  22.  
  23. /*
  24. **  Originally written by Steven M. Bellovin <smb@research.att.com> while
  25. **  at the University of North Carolina at Chapel Hill.  Later tweaked by
  26. **  a couple of people on Usenet.  Completely overhauled by Rich $alz
  27. **  <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990;
  28. **  send any email to Rich.
  29. **
  30. **  This grammar has 10 shift/reduce conflicts.
  31. **
  32. **  This code is in the public domain and has no copyright.
  33. */
  34. /* SUPPRESS 287 on yaccpar_sccsid *//* Unused static variable */
  35. /* SUPPRESS 288 on yyerrlab *//* Label unused */
  36.  
  37. #ifdef HAVE_CONFIG_H
  38. #include <config.h>
  39. #endif
  40.  
  41. /* Since the code of getdate.y is not included in the Emacs executable
  42.    itself, there is no need to #define static in this file.  Even if
  43.    the code were included in the Emacs executable, it probably
  44.    wouldn't do any harm to #undef it here; this will only cause
  45.    problems if we try to write to a static variable, which I don't
  46.    think this code needs to do.  */
  47. #ifdef emacs
  48. #undef static
  49. #endif
  50.  
  51. #include <stdio.h>
  52. #include <ctype.h>
  53.  
  54. /* The code at the top of get_date which figures out the offset of the
  55.    current time zone checks various CPP symbols to see if special
  56.    tricks are need, but defaults to using the gettimeofday system call.
  57.    Include <sys/time.h> if that will be used.  */
  58.  
  59. #if    defined (vms)
  60.  
  61. #include <types.h>
  62. #include <time.h>
  63.  
  64. #else
  65.  
  66. #include <sys/types.h>
  67.  
  68. #ifdef TIME_WITH_SYS_TIME
  69. #include <sys/time.h>
  70. #include <time.h>
  71. #else
  72. #ifdef HAVE_SYS_TIME_H
  73. #include <sys/time.h>
  74. #else
  75. #include <time.h>
  76. #endif
  77. #endif
  78.  
  79. #ifdef timezone
  80. #undef timezone /* needed for sgi */
  81. #endif
  82.  
  83. #if defined (HAVE_SYS_TIMEB_H)
  84. #include <sys/timeb.h>
  85. #else
  86. /*
  87. ** We use the obsolete `struct timeb' as part of our interface!
  88. ** Since the system doesn't have it, we define it here;
  89. ** our callers must do likewise.
  90. */
  91. struct timeb {
  92.     time_t        time;        /* Seconds since the epoch    */
  93.     unsigned short    millitm;    /* Field not used        */
  94.     short        timezone;    /* Minutes west of GMT        */
  95.     short        dstflag;    /* Field not used        */
  96. };
  97. #endif /* defined (HAVE_SYS_TIMEB_H) */
  98.  
  99. #endif    /* defined (vms) */
  100.  
  101. #if defined (STDC_HEADERS) || defined (USG)
  102. #include <string.h>
  103. #endif
  104.  
  105. /* Some old versions of bison generate parsers that use bcopy.
  106.    That loses on systems that don't provide the function, so we have
  107.    to redefine it here.  */
  108. #if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy)
  109. #define bcopy(from, to, len) memcpy ((to), (from), (len))
  110. #endif
  111.  
  112. extern struct tm    *gmtime ();
  113. extern struct tm    *localtime ();
  114.  
  115. #define yyparse getdate_yyparse
  116. #define yylex getdate_yylex
  117. #define yyerror getdate_yyerror
  118.  
  119. static int yylex ();
  120. static int yyerror ();
  121.  
  122. #define EPOCH        1970
  123. #define HOUR(x)        ((time_t)(x) * 60)
  124. #define SECSPERDAY    (24L * 60L * 60L)
  125.  
  126. #define MAX_BUFF_LEN    128   /* size of buffer to read the date into */
  127.  
  128. /*
  129. **  An entry in the lexical lookup table.
  130. */
  131. typedef struct _TABLE {
  132.     const char    *name;
  133.     int        type;
  134.     time_t    value;
  135. } TABLE;
  136.  
  137.  
  138. /*
  139. **  Daylight-savings mode:  on, off, or not yet known.
  140. */
  141. typedef enum _DSTMODE {
  142.     DSTon, DSToff, DSTmaybe
  143. } DSTMODE;
  144.  
  145. /*
  146. **  Meridian:  am, pm, or 24-hour style.
  147. */
  148. typedef enum _MERIDIAN {
  149.     MERam, MERpm, MER24
  150. } MERIDIAN;
  151.  
  152.  
  153. /*
  154. **  Global variables.  We could get rid of most of these by using a good
  155. **  union as the yacc stack.  (This routine was originally written before
  156. **  yacc had the %union construct.)  Maybe someday; right now we only use
  157. **  the %union very rarely.
  158. */
  159. static char    *yyInput;
  160. static DSTMODE    yyDSTmode;
  161. static time_t    yyDayOrdinal;
  162. static time_t    yyDayNumber;
  163. static int    yyHaveDate;
  164. static int    yyHaveDay;
  165. static int    yyHaveRel;
  166. static int    yyHaveTime;
  167. static int    yyHaveZone;
  168. static time_t    yyTimezone;
  169. static time_t    yyDay;
  170. static time_t    yyHour;
  171. static time_t    yyMinutes;
  172. static time_t    yyMonth;
  173. static time_t    yySeconds;
  174. static time_t    yyYear;
  175. static MERIDIAN    yyMeridian;
  176. static time_t    yyRelMonth;
  177. static time_t    yyRelSeconds;
  178.  
  179.  
  180. #line 160 "./getdate.y"
  181. typedef union {
  182.     time_t        Number;
  183.     enum _MERIDIAN    Meridian;
  184. } YYSTYPE;
  185.  
  186. #ifndef YYLTYPE
  187. typedef
  188.   struct yyltype
  189.     {
  190.       int timestamp;
  191.       int first_line;
  192.       int first_column;
  193.       int last_line;
  194.       int last_column;
  195.       char *text;
  196.    }
  197.   yyltype;
  198.  
  199. #define YYLTYPE yyltype
  200. #endif
  201.  
  202. #include <stdio.h>
  203.  
  204. #ifndef __cplusplus
  205. #ifndef __STDC__
  206. #define const
  207. #endif
  208. #endif
  209.  
  210.  
  211.  
  212. #define    YYFINAL        52
  213. #define    YYFLAG        -32768
  214. #define    YYNTBASE    19
  215.  
  216. #define YYTRANSLATE(x) ((unsigned)(x) <= 270 ? yytranslate[x] : 29)
  217.  
  218. static const char yytranslate[] = {     0,
  219.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  220.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  221.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  222.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  223.      2,     2,     2,    17,     2,     2,    18,     2,     2,     2,
  224.      2,     2,     2,     2,     2,     2,     2,    16,     2,     2,
  225.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  226.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  227.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  228.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  229.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  230.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  231.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  232.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  233.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  234.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  235.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  236.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  237.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  238.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  239.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  240.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  241.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  242.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  243.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  244.      2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
  245.      6,     7,     8,     9,    10,    11,    12,    13,    14,    15
  246. };
  247.  
  248. #if YYDEBUG != 0
  249. static const short yyprhs[] = {     0,
  250.      0,     1,     4,     6,     8,    10,    12,    14,    16,    19,
  251.     24,    29,    36,    43,    45,    47,    50,    52,    55,    58,
  252.     62,    68,    72,    76,    79,    84,    87,    91,    94,    96,
  253.     99,   102,   104,   107,   110,   112,   115,   118,   120,   122,
  254.    123
  255. };
  256.  
  257. static const short yyrhs[] = {    -1,
  258.     19,    20,     0,    21,     0,    22,     0,    24,     0,    23,
  259.      0,    25,     0,    27,     0,    13,     7,     0,    13,    16,
  260.     13,    28,     0,    13,    16,    13,    12,     0,    13,    16,
  261.     13,    16,    13,    28,     0,    13,    16,    13,    16,    13,
  262.     12,     0,    14,     0,     5,     0,    14,    15,     0,     4,
  263.      0,     4,    17,     0,    13,     4,     0,    13,    18,    13,
  264.      0,    13,    18,    13,    18,    13,     0,    13,    12,    12,
  265.      0,    13,     9,    12,     0,     9,    13,     0,     9,    13,
  266.     17,    13,     0,    13,     9,     0,    13,     9,    13,     0,
  267.     26,     3,     0,    26,     0,    13,     8,     0,    12,     8,
  268.      0,     8,     0,    12,    11,     0,    13,    11,     0,    11,
  269.      0,    12,    10,     0,    13,    10,     0,    10,     0,    13,
  270.      0,     0,     7,     0
  271. };
  272.  
  273. #endif
  274.  
  275. #if YYDEBUG != 0
  276. static const short yyrline