ack/lang/cem/libcc/gen/asctime.c
1987-07-17 09:38:18 +00:00

67 lines
1.2 KiB
C

/* $Header$ */
#ifdef __BSD4_2
#include <sys/time.h>
#else
#include <time.h>
#endif
#define DATE_STR "??? ??? ?? ??:??:?? ????\n"
static char *days[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
static char *two_digits();
static char *four_digits();
char *
asctime(tm)
register struct tm *tm;
{
static char buf[32];
register char *pb = buf, *ps;
strcpy(pb, DATE_STR);
ps = days[tm->tm_wday];
while (*ps) *pb++ = *ps++;
pb++;
ps = months[tm->tm_mon];
while (*ps) *pb++ = *ps++;
pb++;
pb = two_digits(
two_digits(
two_digits(
two_digits(pb, tm->tm_mday, 0),
tm->tm_hour, 1),
tm->tm_min, 1),
tm->tm_sec, 1);
four_digits(pb, tm->tm_year+1900);
return(buf);
}
static char *
two_digits(pb, i, nospace)
register char *pb;
{
*pb = (i / 10) % 10 + '0';
if (!nospace && *pb == '0') *pb = ' ';
pb++;
*pb++ = (i % 10) + '0';
return ++pb;
}
static char *
four_digits(pb, i)
register char *pb;
{
i %= 10000;
*pb++ = (i / 1000) + '0';
i %= 1000;
*pb++ = (i / 100) + '0';
i %= 100;
*pb++ = (i / 10) + '0';
*pb++ = (i % 10) + '0';
return ++pb;
}