DSTXXX stuff for some reason. Not a good idea, as that code is required for
proper printing of numeric-offset timezones that have daylight saving time.
Without that code, -0700 during DST gets printed as MST instead of PDT.
+Mon Jul 24 15:52:55 2000 Dan Harkless <dan-nmh@dilvish.speed.net>
+
+ * When Shantonu wrote the new, more portable dtimep.lex, he left
+ out the #ifdef DSTXXX stuff for some reason. Not a good idea, as
+ that code is required for proper printing of numeric-offset
+ timezones that have daylight saving time. Without that code,
+ -0700 during DST gets printed as MST instead of PDT.
+
Thu Jul 20 20:30:52 2000 Dan Harkless <dan-nmh@dilvish.speed.net>
* Moved Kimmo's new "--with-hash-backup" to be output with the
Thu Jul 20 20:30:52 2000 Dan Harkless <dan-nmh@dilvish.speed.net>
* Moved Kimmo's new "--with-hash-backup" to be output with the
--cp; }
#define SKIPTOSP() { while ( !isspace(*cp++) ) ; \
--cp; }
--cp; }
#define SKIPTOSP() { while ( !isspace(*cp++) ) ; \
--cp; }
+
+#ifdef DSTXXX
+# ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+# else
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+# endif
+
+static void
+zonehack (struct tws *tw)
+{
+ register struct tm *tm;
+
+ if (dmktime (tw) == (time_t) -1)
+ return;
+
+ tm = localtime (&tw->tw_clock);
+ if (tm->tm_isdst) {
+ tw->tw_flags |= TW_DST;
+ tw->tw_zone -= 60;
+ }
+}
+#endif /* DSTXXX */
/* The year can either be 2 digits, or 4. However, after
Y2K, we found that some MUA were reporting the year 100, hence
the middle term here. yyterminate() resolves the actual
/* The year can either be 2 digits, or 4. However, after
Y2K, we found that some MUA were reporting the year 100, hence
the middle term here. yyterminate() resolves the actual
register char *yy_cp, *yy_bp;
register int yy_act;
register char *yy_cp, *yy_bp;
register int yy_act;
/* This section begins the definition of dparsetime().
/* This section begins the definition of dparsetime().
YY_BREAK
case 2:
YY_RULE_SETUP
YY_BREAK
case 2:
YY_RULE_SETUP
YY_BREAK
case 3:
YY_RULE_SETUP
YY_BREAK
case 3:
YY_RULE_SETUP
YY_BREAK
case 4:
YY_RULE_SETUP
YY_BREAK
case 4:
YY_RULE_SETUP
YY_BREAK
case 5:
YY_RULE_SETUP
YY_BREAK
case 5:
YY_RULE_SETUP
YY_BREAK
case 6:
YY_RULE_SETUP
YY_BREAK
case 6:
YY_RULE_SETUP
YY_BREAK
case 7:
YY_RULE_SETUP
YY_BREAK
case 7:
YY_RULE_SETUP
YY_BREAK
case 8:
YY_RULE_SETUP
YY_BREAK
case 8:
YY_RULE_SETUP
{
INIT();
if(europeandate) {
{
INIT();
if(europeandate) {
YY_BREAK
case 9:
YY_RULE_SETUP
YY_BREAK
case 9:
YY_RULE_SETUP
{
INIT();
if(europeandate) {
{
INIT();
if(europeandate) {
YY_BREAK
case 10:
YY_RULE_SETUP
YY_BREAK
case 10:
YY_RULE_SETUP
YY_BREAK
case 11:
YY_RULE_SETUP
YY_BREAK
case 11:
YY_RULE_SETUP
tw.tw_hour += 12;
YY_BREAK
case 12:
YY_RULE_SETUP
tw.tw_hour += 12;
YY_BREAK
case 12:
YY_RULE_SETUP
{
INIT();
SKIPTOD();
SETZONE(atoi(cp));
{
INIT();
SKIPTOD();
SETZONE(atoi(cp));
+#ifdef DSTXXX
+ zonehack (&tw);
+#endif /* DSTXXX */
}
YY_BREAK
case 13:
YY_RULE_SETUP
}
YY_BREAK
case 13:
YY_RULE_SETUP
{
INIT();
SKIPTOD();
SETZONE(-atoi(cp));
{
INIT();
SKIPTOD();
SETZONE(-atoi(cp));
+#ifdef DSTXXX
+ zonehack (&tw);
+#endif /* DSTXXX */
}
YY_BREAK
case 14:
YY_RULE_SETUP
}
YY_BREAK
case 14:
YY_RULE_SETUP
INIT(); SETZONE(0);
YY_BREAK
case 15:
YY_RULE_SETUP
INIT(); SETZONE(0);
YY_BREAK
case 15:
YY_RULE_SETUP
INIT(); SETZONE(0);
YY_BREAK
case 16:
YY_RULE_SETUP
INIT(); SETZONE(0);
YY_BREAK
case 16:
YY_RULE_SETUP
INIT(); SETZONE(200);
YY_BREAK
case 17:
YY_RULE_SETUP
INIT(); SETZONE(200);
YY_BREAK
case 17:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(2);
YY_BREAK
case 18:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(2);
YY_BREAK
case 18:
YY_RULE_SETUP
INIT(); SETZONE(-500);
YY_BREAK
case 19:
YY_RULE_SETUP
INIT(); SETZONE(-500);
YY_BREAK
case 19:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-500);
YY_BREAK
case 20:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-500);
YY_BREAK
case 20:
YY_RULE_SETUP
INIT(); SETZONE(-600);
YY_BREAK
case 21:
YY_RULE_SETUP
INIT(); SETZONE(-600);
YY_BREAK
case 21:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-600);
YY_BREAK
case 22:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-600);
YY_BREAK
case 22:
YY_RULE_SETUP
INIT(); SETZONE(-700);
YY_BREAK
case 23:
YY_RULE_SETUP
INIT(); SETZONE(-700);
YY_BREAK
case 23:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-700);
YY_BREAK
case 24:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-700);
YY_BREAK
case 24:
YY_RULE_SETUP
INIT(); SETZONE(-800);
YY_BREAK
case 25:
YY_RULE_SETUP
INIT(); SETZONE(-800);
YY_BREAK
case 25:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-800);
YY_BREAK
case 26:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-800);
YY_BREAK
case 26:
YY_RULE_SETUP
INIT(); SETZONE(-330);
YY_BREAK
case 27:
YY_RULE_SETUP
INIT(); SETZONE(-330);
YY_BREAK
case 27:
YY_RULE_SETUP
INIT(); SETZONE(-400);
YY_BREAK
case 28:
YY_RULE_SETUP
INIT(); SETZONE(-400);
YY_BREAK
case 28:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-400);
YY_BREAK
case 29:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-400);
YY_BREAK
case 29:
YY_RULE_SETUP
INIT(); SETZONE(-900);
YY_BREAK
case 30:
YY_RULE_SETUP
INIT(); SETZONE(-900);
YY_BREAK
case 30:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-900);
YY_BREAK
case 31:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-900);
YY_BREAK
case 31:
YY_RULE_SETUP
INIT(); SETZONE(-1000);
YY_BREAK
case 32:
YY_RULE_SETUP
INIT(); SETZONE(-1000);
YY_BREAK
case 32:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-1000);
YY_BREAK
case 33:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-1000);
YY_BREAK
case 33:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-100);
YY_BREAK
case 34:
YY_RULE_SETUP
INIT(); SETDST(); SETZONE(-100);
YY_BREAK
case 34:
YY_RULE_SETUP
{
INIT();
SETZONE(100*(('a'-1) - tolower(*cp)));
{
INIT();
SETZONE(100*(('a'-1) - tolower(*cp)));
YY_BREAK
case 35:
YY_RULE_SETUP
YY_BREAK
case 35:
YY_RULE_SETUP
{
INIT();
SETZONE(100*('a' - tolower(*cp)));
{
INIT();
SETZONE(100*('a' - tolower(*cp)));
YY_BREAK
case 36:
YY_RULE_SETUP
YY_BREAK
case 36:
YY_RULE_SETUP
{
INIT();
SETZONE(100*(tolower(*cp) - 'm'));
{
INIT();
SETZONE(100*(tolower(*cp) - 'm'));
YY_BREAK
case 37:
YY_RULE_SETUP
YY_BREAK
case 37:
YY_RULE_SETUP
YY_BREAK
case 38:
YY_RULE_SETUP
YY_BREAK
case 38:
YY_RULE_SETUP
ECHO;
YY_BREAK
case YY_STATE_EOF(INITIAL):
ECHO;
YY_BREAK
case YY_STATE_EOF(INITIAL):
--cp; }
#define SKIPTOSP() { while ( !isspace(*cp++) ) ; \
--cp; }
--cp; }
#define SKIPTOSP() { while ( !isspace(*cp++) ) ; \
--cp; }
+
+#ifdef DSTXXX
+# ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+# else
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+# endif
+
+static void
+zonehack (struct tws *tw)
+{
+ register struct tm *tm;
+
+ if (dmktime (tw) == (time_t) -1)
+ return;
+
+ tm = localtime (&tw->tw_clock);
+ if (tm->tm_isdst) {
+ tw->tw_flags |= TW_DST;
+ tw->tw_zone -= 60;
+ }
+}
+#endif /* DSTXXX */
INIT();
SKIPTOD();
SETZONE(atoi(cp));
INIT();
SKIPTOD();
SETZONE(atoi(cp));
+#ifdef DSTXXX
+ zonehack (&tw);
+#endif /* DSTXXX */
}
"-"{D}{d}{d} {
INIT();
SKIPTOD();
SETZONE(-atoi(cp));
}
"-"{D}{d}{d} {
INIT();
SKIPTOD();
SETZONE(-atoi(cp));
+#ifdef DSTXXX
+ zonehack (&tw);
+#endif /* DSTXXX */
}
"-"?("ut"|"UT") INIT(); SETZONE(0);
"-"?("gmt"|"GMT") INIT(); SETZONE(0);
}
"-"?("ut"|"UT") INIT(); SETZONE(0);
"-"?("gmt"|"GMT") INIT(); SETZONE(0);