-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathctime.c
115 lines (104 loc) · 1.84 KB
/
ctime.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
* Ctime for HI-TECH C - no daylight saving
*/
#include <time.h>
unsigned char monlen[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
static
put2d(cp, i, cl, ct)
char * cp, cl, ct;
unsigned i;
{
*cp = ct;
*--cp = i%10 + '0';
if(i /= 10)
*--cp = i + '0';
else
*--cp = cl;
}
static
dylen(yr)
unsigned yr;
{
if(yr%4)
return(365);
return(366);
}
struct tm *
localtime(tp)
time_t * tp;
{
time_t t;
t = *tp - time_zone*60;
return gmtime(&t);
}
struct tm *
gmtime(tp)
time_t * tp;
{
unsigned day, mon, yr, cumday;
time_t t;
static struct tm tim;
t = *tp;
tim.tm_sec = t % 60L;
t /= 60L;
tim.tm_min = t % 60L;
t /= 60L;
tim.tm_hour = t % 24L;
day = t / 24L;
tim.tm_wday = (day + 4) % 7;
yr = 70;
cumday = 0;
while((cumday += dylen(yr)) <= day)
yr++;
tim.tm_year = yr;
cumday -= dylen(yr);
day -= cumday;
tim.tm_yday = day;
cumday = 0;
mon = 0;
if((yr % 4) == 0)
monlen[1] = 29;
else
monlen[1] = 28;
while((cumday += monlen[mon]) <= day)
mon++;
cumday -= monlen[mon];
day -= cumday;
tim.tm_mday = day + 1;
tim.tm_mon = mon;
return &tim;
}
char *
asctime(tim)
register struct tm * tim;
{
register char * s, * cp;
short i;
static char buf[27];
s = &"SunMonTueWedThuFriSat"[tim->tm_wday*3];
i = 3;
cp = buf;
do
*cp++ = *s++;
while(--i);
*cp++ = ' ';
s = &"JanFebMarAprMayJunJulAugSepOctNovDec"[tim->tm_mon*3];
i = 3;
do
*cp++ = *s++;
while(--i);
buf[7] = ' ';
put2d(buf+10, tim->tm_mday, ' ', ' ');
put2d(buf+13, tim->tm_hour, '0', ':');
put2d(buf+16, tim->tm_min, '0', ':');
put2d(buf+19, tim->tm_sec, '0', ' ');
put2d(buf+22, tim->tm_year/100 + 19, ' ', 0);
put2d(buf+24, tim->tm_year%100, '0', '\n');
return(buf);
}
char *
ctime(tp)
time_t * tp;
{
return asctime(localtime(tp));
}