avoid licensing hassles

SCCS-file: localtime.c
SCCS-SID: 1.4
This commit is contained in:
Arthur David Olson
2012-07-18 03:01:34 -04:00
committed by Paul Eggert
parent 86766b3778
commit d75e885ac0
+17 -190
View File
@@ -9,9 +9,11 @@
static char sccsid[] = "%W%";
#endif
extern char * strcpy();
extern char * strcat();
extern char * getenv();
extern char * asctime();
extern struct tm * gmtime();
extern char * strcpy();
extern char * strcat();
extern char * getenv();
static struct tzinfo tzinfo;
@@ -76,63 +78,6 @@ gmt:
return (tzname[0] == 0) ? 0 : -1;
}
/*
* This routine converts time as follows.
* The epoch is 0000 Jan 1 1970 GMT.
* The argument time is in seconds since then.
* The localtime(t) entry returns a pointer to an array
* containing
* seconds (0-59)
* minutes (0-59)
* hours (0-23)
* day of month (1-31)
* month (0-11)
* year-1970
* weekday (0-6, Sun is 0)
* day of the year
* daylight savings flag
*
* asctime(tvec))
* where tvec is produced by localtime
* returns a ptr to a character string
* that has the ascii time in the form
* Thu Jan 01 00:00:00 1970n0\\
* 01234567890123456789012345
* 0 1 2
*
*/
static char cbuf[26 + TZ_ABBR_LEN + 1];
static int dmsize[12] =
{
31,
28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31
};
struct tm *gmtime();
char *ct_numb();
struct tm *localtime();
char *ctime();
char *ct_num();
char *asctime();
char *
ctime(t)
long *t;
{
return(asctime(localtime(t)));
}
static struct dsinfo * getdsp(t)
register long t;
{
@@ -151,157 +96,39 @@ register long t;
}
char *
newctime(tim)
long *tim;
newctime(timep)
long *timep;
{
register struct dsinfo * dsp;
register char * cp;
register char * dp;
long copyt;
static char buf[26 + TZ_ABBR_LEN + 1];
dsp = getdsp(*tim);
copyt = *tim + dsp->ds_gmtoff;
(void) asctime(gmtime(&copyt));
dp = &cbuf[24];
dsp = getdsp(*timep);
copyt = *timep + dsp->ds_gmtoff;
(void) strcpy(buf, asctime(gmtime(&copyt)));
dp = &buf[24];
*dp++ = ' ';
cp = dsp->ds_abbr;
while ((*dp = *cp++) != '\0')
++dp;
*dp++ = '\n';
*dp++ = '\0';
return cbuf;
return buf;
}
struct tm *
localtime(tim)
long *tim;
newlocaltime(timep)
long *timep;
{
register struct dsinfo * dsp;
long copyt;
register struct tm * ct;
dsp = getdsp(*tim);
copyt = *tim + dsp->ds_gmtoff;
dsp = getdsp(*timep);
copyt = *timep + dsp->ds_gmtoff;
ct = gmtime(&copyt);
ct->tm_isdst = dsp->ds_isdst != 0;
return ct;
}
/*
** Things are unchanged from here down!
*/
struct tm *
gmtime(tim)
long *tim;
{
register int d0, d1;
long hms, day;
register int *tp;
static struct tm xtime;
/*
* break initial number into days
*/
hms = *tim % 86400;
day = *tim / 86400;
if (hms<0) {
hms += 86400;
day -= 1;
}
tp = (int *)&xtime;
/*
* generate hours:minutes:seconds
*/
*tp++ = hms%60;
d1 = hms/60;
*tp++ = d1%60;
d1 /= 60;
*tp++ = d1;
/*
* day is the day number.
* generate day of the week.
* The addend is 4 mod 7 (1/1/1970 was Thursday)
*/
xtime.tm_wday = (day+7340036)%7;
/*
* year number
*/
if (day>=0) for(d1=70; day >= dysize(d1); d1++)
day -= dysize(d1);
else for (d1=70; day<0; d1--)
day += dysize(d1-1);
xtime.tm_year = d1;
xtime.tm_yday = d0 = day;
/*
* generate month
*/
if (dysize(d1)==366)
dmsize[1] = 29;
for(d1=0; d0 >= dmsize[d1]; d1++)
d0 -= dmsize[d1];
dmsize[1] = 28;
*tp++ = d0+1;
*tp++ = d1;
xtime.tm_isdst = 0;
return(&xtime);
}
char *
asctime(t)
struct tm *t;
{
register char *cp, *ncp;
register int *tp;
cp = cbuf;
for (ncp = "Day Mon 00 00:00:00 1900\n"; *cp++ = *ncp++;);
ncp = &"SunMonTueWedThuFriSat"[3*t->tm_wday];
cp = cbuf;
*cp++ = *ncp++;
*cp++ = *ncp++;
*cp++ = *ncp++;
cp++;
tp = &t->tm_mon;
ncp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[(*tp)*3];
*cp++ = *ncp++;
*cp++ = *ncp++;
*cp++ = *ncp++;
cp = ct_numb(cp, *--tp);
cp = ct_numb(cp, *--tp+100);
cp = ct_numb(cp, *--tp+100);
cp = ct_numb(cp, *--tp+100);
if (t->tm_year>=100) {
cp[1] = '2';
cp[2] = '0';
}
cp += 2;
cp = ct_numb(cp, t->tm_year+100);
return(cbuf);
}
dysize(y)
{
if((y%4) == 0)
return(366);
return(365);
}
static char *
ct_numb(cp, n)
register char *cp;
{
cp++;
if (n>=10)
*cp++ = (n/10)%10 + '0';
else
*cp++ = ' ';
*cp++ = n%10 + '0';
return(cp);
}