#ifndef _STDDEF
typedef int ptrdiff_t; /* result type of pointer difference */
typedef unsigned size_t; /* type yielded by sizeof */
typedef unsigned short wchar_t; /* wide char type */
#define _STDDEF
#define offsetof(ty, mem) ((int)&(((ty *)0)->mem))
#endif /* _STDDEF */
typedef long time_t; /* for representing times in seconds */
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
extern int time_zone; /* minutes WESTWARD of Greenwich */
/* this value defaults to 0 since with
operating systems like MS-DOS there is
no time zone information available */
extern time_t time(time_t *); /* seconds since 00:00:00 Jan 1 1970 */
extern int stime(time_t *); /* set time */
extern char * asctime(const struct tm *); /* converts struct tm to ascii time */
extern char * ctime(const time_t *); /* current local time in ascii form */
extern struct tm * gmtime(const time_t *); /* Universal time */
extern struct tm * localtime(const time_t *); /* local time */
extern time_t mktime(struct tm *);
extern size_t strftime(char *, size_t, const char *, const struct tm *);
static long
years_to_days (unsigned yr)
{
return yr * 365L + yr / 4 - yr / 100 + yr / 400;
}
/*
* Return the number of days. The function takes
* into account leap years.
*
* yr : must be greater than 0
* mo : must be between 1 and 12
* day: must be between 1 and 32
* */
static long
ymd_to_scalar(unsigned yr, unsigned mo, unsigned day)
{
long scalar;
scalar = day + months_to_days(mo);
if ( mo > 2 ) /* adjust if past February */
scalar -= isleap(yr) ? 1 : 2;
yr--;
scalar += years_to_days(yr);
return scalar;
}