Category : C Source Code
Archive   : CSRC2.ZIP
Filename : CTIME.C

 
Output of file : CTIME.C contained in archive : CSRC2.ZIP
/*
* c t i m e . c
*/

/*)LIBRARY
*/

#ifdef DOCUMENTATION

title ctime Convert time value to ascii
index Convert time value to ascii
index asctime Convert time buffer to ascii
index localtime Convert time() to time buffer

Usage
.s.nf
#include

char *
ctime(tloc)
long *tloc; /* Time value pointer */

char *
asctime(tm)
struct tm *tm; /* Time buffer pointer */

struct tm *
localtime(tloc)
.s.f
Description

ctime() converts a time value, as returned by time()
to an ascii string. For compatibility with previous
versions, ctime(NULL) obtains and converts the current
time of day and removes the trailing newline. Note,
however, that ctime(NULL) is not portable.

asctime() converts a time vector, as returned by localtime()
to an ascii string which is statically allocated. It has
the format

Sun Sep 16 01:03:52 1973\n\0
012345678901234567890123 4 5
0 1 2

All the fields have constant width. To remove the trailing
newline, just:

char *tp;
extern char *ctime();
long tloc;

time(&tloc); /* Get time */
tp = ctime(&tloc); /* in Ascii */
tp[24] = '\0'; /* Fix newline */

localtime() converts the time() value (seconds since Jan. 1,
1970) to a structure containing the components:

struct tm {
int tm_sec; /* Seconds */
int tm_min; /* Minutes */
int tm_hour; /* Hours */
int tm_mday; /* Day in month */
int tm_mon; /* Month, Jan = 0 */
int tm_year; /* Year - 1900 */
int tm_wday; /* Day in week, Sun = 0 */
int tm_yday; /* Days since Jan 1 */
int tm_isdst; /* Daylight savings */
}

Bugs

There is no range checking on the information passed.

#endif

#include
#include
#ifdef M68000
#include
#endif
#define EOS 0
#define FALSE 0
#define TRUE 1

char *
ctime(tloc)
register long *tloc;
/*
* Convert time() value to ascii string.
*/
{
long temptime;
register char *result;
extern char *asctime();
extern struct tm *localtime();

if (tloc == (long *)NULL) {
time(&temptime);
result = ctime(&temptime);
result[24] = EOS;
}
else return (asctime(localtime(tloc)));
}

#ifdef M68000
RAM_SECT(ram00)
#endif

static char ctime_work[25];

#ifdef M68000
ROM_SECT(rom00)
#endif

char dayname[] = "SunMonTueWedThuFriSat";
char monname[] = "JanFebMarAprMayJunJulAugSepOctNovDec";

#ifdef M68000
IRAM_SECT(iram00)
#endif

static short montab[] = {
31, 28, 31, 30, 31, 30, /* Thirty days hath September */
31, 31, 30, 31, 30, 31, /* All the rest I don't remember */
};

#ifdef M68000
ROM_SECT(strings)
#endif

char *
asctime(tm)
register struct tm *tm;
/*
* Format the time buffer
*/
{
sprintf(ctime_work, "%.3s %.3s %2d %02d:%02d:%02d %4d\n",
&dayname[tm->tm_wday * 3],
&monname[tm->tm_mon * 3],
tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec,
tm->tm_year + 1900);
return (ctime_work);
}

static struct tm tbuf;

struct tm *
localtime(tloc)
long *tloc;
/*
* Break time() value into its component parts.
*/
{
register long tod;
register short todi; /* For year.day */
register short diy; /* Days in this year */
register short temp;

if ((tod = *tloc) < 0)
tod = 0;
tbuf.tm_sec = tod % 60; tod /= 60;
tbuf.tm_min = tod % 60; tod /= 60;
tbuf.tm_hour = tod % 24; todi = tod / 24;
tbuf.tm_wday = (todi + 4) % 7;
for (temp = 70; (diy = 365 + (((temp & 3) == 0) ? 1 : 0)) < todi;) {
temp++;
todi -= diy;
}
tbuf.tm_year = temp;
tbuf.tm_yday = todi;
for (temp = 0; todi >= montab[temp]; temp++) {
todi -= montab[temp];
if (temp == 1 && (tbuf.tm_year & 3) == 0)
todi--;
}
tbuf.tm_mon = temp;
tbuf.tm_mday = todi + 1;
return (&tbuf);
}

#ifdef M68000
ROM_SECT(const)
#endif

#ifdef TESTING

main() {
long tvec;

time(&tvec);
printf(ctime(&tvec));
}
#endif


  3 Responses to “Category : C Source Code
Archive   : CSRC2.ZIP
Filename : CTIME.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/