#include <stdio.h>
#include <ctype.h>
-/* The code at the top of get_date which figures out the offset of the
- current time zone checks various CPP symbols to see if special
- tricks are need, but defaults to using the gettimeofday system call.
- Include <sys/time.h> if that will be used. */
-
#if defined (vms)
-
#include <types.h>
#include <time.h>
-
#else
-
#include <sys/types.h>
-
#ifdef TIME_WITH_SYS_TIME
#include <sys/time.h>
#include <time.h>
#if defined (HAVE_SYS_TIMEB_H)
#include <sys/timeb.h>
#else
-/*
-** We use the obsolete `struct timeb' as part of our interface!
-** Since the system doesn't have it, we define it here;
-** our callers must do likewise.
-*/
-struct timeb {
+
+/* get_date uses the obsolete `struct timeb' in its interface! FIXME.
+ Since some systems don't have it, we define it here;
+ callers must do likewise. */
+struct timeb
+ {
time_t time; /* Seconds since the epoch */
unsigned short millitm; /* Field not used */
short timezone; /* Minutes west of GMT */
yyDayOrdinal = 1;
yyDayNumber = $1;
}
- | tUNUMBER tDAY {
+ | tUNUMBER tDAY { /* FIXME */
yyDayOrdinal = $1;
yyDayNumber = $2;
}
yyYear = $4;
}
| tUNUMBER tMONTH {
+ /* FIXME: `date -d 'next october'' is interpreted as 2 october. */
yyMonth = $2;
yyDay = $1;
}
| tSEC_UNIT {
yyRelSeconds++;
}
- | tSNUMBER tMONTH_UNIT {
+ | tSNUMBER tMONTH_UNIT { /* FIXME */
yyRelMonth += $1 * $2;
}
- | tUNUMBER tMONTH_UNIT {
+ | tUNUMBER tMONTH_UNIT { /* FIXME */
yyRelMonth += $1 * $2;
}
| tMONTH_UNIT {
case MERam:
if (Hours < 1 || Hours > 12)
return -1;
+ if (Hours == 12)
+ Hours = 0;
return (Hours * 60L + Minutes) * 60L + Seconds;
case MERpm:
if (Hours < 1 || Hours > 12)
return -1;
+ if (Hours == 12)
+ Hours = 0;
return ((Hours + 12) * 60L + Minutes) * 60L + Seconds;
default:
abort ();
Year += 1900;
DaysInMonth[1] = Year % 4 == 0 && (Year % 100 != 0 || Year % 400 == 0)
? 29 : 28;
- if (Year < EPOCH || Year > 1999
+ if (Year < EPOCH || Year > 2037
|| Month < 1 || Month > 12
/* Lint fluff: "conversion from long may lose accuracy" */
|| Day < 1 || Day > DaysInMonth[(int)--Month])
int ac;
char *av[];
{
- char buff[128];
- time_t d;
+ char buff[MAX_BUFF_LEN + 1];
+ time_t d;
(void)printf ("Enter date, or blank line to exit.\n\t> ");
(void)fflush (stdout);
+
+ buff[MAX_BUFF_LEN] = 0;
while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0]) {
d = get_date (buff, (struct timeb *)NULL);
if (d == -1)