/* time.c module to give the ST something a little more standard in
* the way of time calls. Add your own calls to get special time
* arguments, or compile and make calls to time() to get the complete
* time string.
* Author: Some by Robert Royar
* Date: Fri Jan 30 12:02:42 EST 1987 (that's the way a time string looks)
* Compiled: Alcyon v 4.14 (the other compilers give you this free don't they?)
*/
#include <stdio.h>
#include <osbind.h>
static int _day[2][12] = {
{0,31,59,90,120,151,181,212,243,273,304,334},
{0,31,60,91,121,152,182,213,244,274,305,335}
static char *months[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",Quote:};
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
static char *wdays[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
int __date, __time;
char *tzone = "EST";
typedef struct TIME {
int t_sec; /* second */
int t_min; /* minute */
int t_hr; /* hour */
int t_md; /* day of month */
int t_mnt; /* month */
int t_year; /* year */
int t_wday; /* day of week */
int t_yd; /* day of year */
extern char *time();Quote:} TIME;
extern TIME *ctime();
/* from the _C Programming Language_ by Kernighan and Ritchie */
year_day(day, month, year)
register int day, month, year;
{
register int leap;
leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
return(day+_day[leap][month]);
/* given a year and the day of the year (returned above) return an index toQuote:}
* the correct day of the week
*/
week_day(year,day)
register int year, day;
{
/* this array covers 1980-2000. Each number indexes into the
* days array for the first day of the year */
static int firstdays[] = {2, 4, 5, 6, 0, 2, 3, 4, 5, 0, 1, 2, 3, 5,
6, 0, 1, 3, 4, 5, 6};
register int begdat;
if (year < 1980)
return(NULL); /* everyday is sunday before 1980 */
year -= 1980;
begdat = firstdays[year];
day = (begdat+day)-1;
if (day < 7)
return(day);
else
return(day%7);
/* return a pointer to a structure of type TIME after filling the structureQuote:}
* with the proper values.
*/
TIME *
ctime()
{
static TIME tm;
__date = Tgetdate();
__time = Tgettime();
tm.t_sec = (__time&31)*2;
tm.t_min = (__time>>5)&63;
tm.t_hr = (__time>>11)&31;
tm.t_md = (__date&31);
tm.t_mnt = ((__date>>5)&15)-1;
tm.t_year = ((__date>>9)&31)+1980;
tm.t_yd = year_day(tm.t_md,tm.t_mnt,tm.t_year);
tm.t_wday = week_day(tm.t_year,tm.t_yd);
return(&tm);
/* create an ASCII fixed length string and copy it into timeline. CallerQuote:}
* should make sure timeline has 30 characters space.
*/
char *
time(timeline)
char timeline[];
{
extern TIME *ctime();
extern char *getenv();
register TIME *tm;
/* write your own getenv(), but the ST env section is
* a total farce with only 128 bytes for storage
*/
tzone = getenv("timezone");
tm = ctime();
sprintf(timeline,"%s %s %02d %d:%02d:%02d %s %d\n",
wdays[tm->t_wday],months[tm->t_mnt],tm->t_md,tm->t_hr,tm->t_min,
tm->t_sec,tzone,tm->t_year);
return(&timeline);
Quote:}