-
-/*
- * dtime.c -- time/date routines
+/* dtime.c -- time/date routines
*
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
"Saturday", NULL
};
-struct zone {
- char *std;
- char *dst;
- int shift;
-};
-
static int dmsize[] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
if (tm->tm_isdst) /* if DST is in effect */
tw.tw_zone -= 60; /* reset to normal offset */
#else
- tzset();
+ {
+ static bool deja_vu;
+
+ if (!deja_vu) {
+ deja_vu = true;
+ tzset();
+ }
+ }
tw.tw_zone = -(timezone / 60);
#endif
tw.tw_flags &= ~TW_SDAY;
tw.tw_flags |= TW_SEXP;
- tw.tw_flags &= ~TW_SZONE;
tw.tw_flags |= TW_SZEXP;
tw.tw_clock = *clock;
tw.tw_flags &= ~TW_SDAY;
tw.tw_flags |= TW_SEXP;
- tw.tw_flags &= ~TW_SZONE;
tw.tw_flags |= TW_SZEXP;
tw.tw_clock = *clock;
if (alpha_timezone)
/* use alpha-numeric timezones */
return dasctime (dlocaltime (clock), TW_NULL);
- else
- /* use numeric timezones */
- return dasctime (dlocaltime (clock), TW_ZONE);
+
+ /* use numeric timezones */
+ return dasctime (dlocaltime (clock), TW_ZONE);
}
{
char buffer[80];
static char result[80];
+ int twf;
if (!tw)
return NULL;
/* Display timezone if known */
- if ((tw->tw_flags & TW_SZONE) == TW_SZNIL)
- result[0] = '\0';
- else
+ if (tw->tw_flags & TW_SZEXP)
snprintf(result, sizeof(result), " %s", dtimezone(tw->tw_zone, tw->tw_flags | flags));
+ else
+ result[0] = '\0';
snprintf(buffer, sizeof(buffer), "%02d %s %0*d %02d:%02d:%02d%s",
tw->tw_mday, tw_moty[tw->tw_mon],
tw->tw_year < 100 ? 2 : 4, tw->tw_year,
tw->tw_hour, tw->tw_min, tw->tw_sec, result);
- if ((tw->tw_flags & TW_SDAY) == TW_SEXP)
- snprintf (result, sizeof(result), "%s, %s", tw_dotw[tw->tw_wday], buffer);
- else
- if ((tw->tw_flags & TW_SDAY) == TW_SNIL)
- strncpy (result, buffer, sizeof(result));
- else
- snprintf (result, sizeof(result), "%s (%s)", buffer, tw_dotw[tw->tw_wday]);
+ if ((twf = tw->tw_flags & TW_SDAY)) {
+ if (twf == TW_SEXP)
+ snprintf(result, sizeof(result), "%s, %s", tw_dotw[tw->tw_wday], buffer);
+ else
+ snprintf(result, sizeof(result), "%s (%s)", buffer, tw_dotw[tw->tw_wday]);
+ } else
+ strncpy(result, buffer, sizeof(result));
return result;
}
/*
- * Get the timezone for given offset
+ * Get the timezone for given offset.
+ * This used to return a three-letter abbreviation for some offset
+ * values. But not many. Until there's a good way to do that,
+ * return the string representation of the numeric offset.
*/
char *
hours = offset / 60;
}
- if (!(flags & TW_ZONE) && mins == 0) {
- tzset();
- return ((flags & TW_DST) ? tzname[1] : tzname[0]);
- }
-
#ifdef ADJUST_NUMERIC_ONLY_TZ_OFFSETS_WRT_DST
if (flags & TW_DST)
hours += 1;
}
-/*
- * Copy nmh time structure
- */
-
-void
-twscopy (struct tws *tb, struct tws *tw)
-{
- *tb = *tw; /* struct copy */
-
-#if 0
- tb->tw_sec = tw->tw_sec;
- tb->tw_min = tw->tw_min;
- tb->tw_hour = tw->tw_hour;
- tb->tw_mday = tw->tw_mday;
- tb->tw_mon = tw->tw_mon;
- tb->tw_year = tw->tw_year;
- tb->tw_wday = tw->tw_wday;
- tb->tw_yday = tw->tw_yday;
- tb->tw_zone = tw->tw_zone;
- tb->tw_clock = tw->tw_clock;
- tb->tw_flags = tw->tw_flags;
-#endif
-}
-
-
/*
* Compare two nmh time structures
*/