1*01a344a2SDavid du Colombier #include "all.h"
2*01a344a2SDavid du Colombier
3*01a344a2SDavid du Colombier Timet
toytime(void)4*01a344a2SDavid du Colombier toytime(void)
5*01a344a2SDavid du Colombier {
6*01a344a2SDavid du Colombier return time(nil);
7*01a344a2SDavid du Colombier }
8*01a344a2SDavid du Colombier
9*01a344a2SDavid du Colombier void
datestr(char * s,Timet t)10*01a344a2SDavid du Colombier datestr(char *s, Timet t)
11*01a344a2SDavid du Colombier {
12*01a344a2SDavid du Colombier Tm *tm;
13*01a344a2SDavid du Colombier
14*01a344a2SDavid du Colombier tm = localtime(t);
15*01a344a2SDavid du Colombier sprint(s, "%.4d%.2d%.2d", tm->year+1900, tm->mon+1, tm->mday);
16*01a344a2SDavid du Colombier }
17*01a344a2SDavid du Colombier
18*01a344a2SDavid du Colombier void
prdate(void)19*01a344a2SDavid du Colombier prdate(void)
20*01a344a2SDavid du Colombier {
21*01a344a2SDavid du Colombier print("%T\n", time(nil));
22*01a344a2SDavid du Colombier }
23*01a344a2SDavid du Colombier
24*01a344a2SDavid du Colombier static void
ct_numb(char * cp,int n)25*01a344a2SDavid du Colombier ct_numb(char *cp, int n)
26*01a344a2SDavid du Colombier {
27*01a344a2SDavid du Colombier if(n >= 10)
28*01a344a2SDavid du Colombier cp[0] = (n/10)%10 + '0';
29*01a344a2SDavid du Colombier else
30*01a344a2SDavid du Colombier cp[0] = ' ';
31*01a344a2SDavid du Colombier cp[1] = n%10 + '0';
32*01a344a2SDavid du Colombier }
33*01a344a2SDavid du Colombier
34*01a344a2SDavid du Colombier int
Tfmt(Fmt * fmt)35*01a344a2SDavid du Colombier Tfmt(Fmt* fmt)
36*01a344a2SDavid du Colombier {
37*01a344a2SDavid du Colombier char s[30];
38*01a344a2SDavid du Colombier char *cp;
39*01a344a2SDavid du Colombier Timet t;
40*01a344a2SDavid du Colombier Tm *tm;
41*01a344a2SDavid du Colombier
42*01a344a2SDavid du Colombier t = va_arg(fmt->args, Timet);
43*01a344a2SDavid du Colombier if(t == 0)
44*01a344a2SDavid du Colombier return fmtstrcpy(fmt, "The Epoch");
45*01a344a2SDavid du Colombier
46*01a344a2SDavid du Colombier tm = localtime(t);
47*01a344a2SDavid du Colombier strcpy(s, "Day Mon 00 00:00:00 1900");
48*01a344a2SDavid du Colombier cp = &"SunMonTueWedThuFriSat"[tm->wday*3];
49*01a344a2SDavid du Colombier s[0] = cp[0];
50*01a344a2SDavid du Colombier s[1] = cp[1];
51*01a344a2SDavid du Colombier s[2] = cp[2];
52*01a344a2SDavid du Colombier cp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[tm->mon*3];
53*01a344a2SDavid du Colombier s[4] = cp[0];
54*01a344a2SDavid du Colombier s[5] = cp[1];
55*01a344a2SDavid du Colombier s[6] = cp[2];
56*01a344a2SDavid du Colombier ct_numb(s+8, tm->mday);
57*01a344a2SDavid du Colombier ct_numb(s+11, tm->hour+100);
58*01a344a2SDavid du Colombier ct_numb(s+14, tm->min+100);
59*01a344a2SDavid du Colombier ct_numb(s+17, tm->sec+100);
60*01a344a2SDavid du Colombier if(tm->year >= 100) {
61*01a344a2SDavid du Colombier s[20] = '2';
62*01a344a2SDavid du Colombier s[21] = '0';
63*01a344a2SDavid du Colombier }
64*01a344a2SDavid du Colombier ct_numb(s+22, tm->year+100);
65*01a344a2SDavid du Colombier
66*01a344a2SDavid du Colombier return fmtstrcpy(fmt, s);
67*01a344a2SDavid du Colombier }
68*01a344a2SDavid du Colombier
69*01a344a2SDavid du Colombier /*
70*01a344a2SDavid du Colombier * compute the next time after t
71*01a344a2SDavid du Colombier * that has hour hr and is not on
72*01a344a2SDavid du Colombier * day in bitpattern --
73*01a344a2SDavid du Colombier * for automatic dumps
74*01a344a2SDavid du Colombier */
75*01a344a2SDavid du Colombier Timet
nextime(Timet t,int hr,int day)76*01a344a2SDavid du Colombier nextime(Timet t, int hr, int day)
77*01a344a2SDavid du Colombier {
78*01a344a2SDavid du Colombier int nhr;
79*01a344a2SDavid du Colombier Tm *tm;
80*01a344a2SDavid du Colombier
81*01a344a2SDavid du Colombier if(hr < 0 || hr >= 24)
82*01a344a2SDavid du Colombier hr = 5;
83*01a344a2SDavid du Colombier if((day&0x7f) == 0x7f)
84*01a344a2SDavid du Colombier day = 0;
85*01a344a2SDavid du Colombier for (;;) {
86*01a344a2SDavid du Colombier tm = localtime(t);
87*01a344a2SDavid du Colombier t -= tm->sec;
88*01a344a2SDavid du Colombier t -= tm->min*60;
89*01a344a2SDavid du Colombier nhr = tm->hour;
90*01a344a2SDavid du Colombier do {
91*01a344a2SDavid du Colombier t += 60*60;
92*01a344a2SDavid du Colombier nhr++;
93*01a344a2SDavid du Colombier } while(nhr%24 != hr);
94*01a344a2SDavid du Colombier tm = localtime(t);
95*01a344a2SDavid du Colombier if(tm->hour != hr) {
96*01a344a2SDavid du Colombier t += 60*60;
97*01a344a2SDavid du Colombier tm = localtime(t);
98*01a344a2SDavid du Colombier if(tm->hour != hr) {
99*01a344a2SDavid du Colombier t -= 60*60;
100*01a344a2SDavid du Colombier tm = localtime(t);
101*01a344a2SDavid du Colombier }
102*01a344a2SDavid du Colombier }
103*01a344a2SDavid du Colombier if(day & (1<<tm->wday))
104*01a344a2SDavid du Colombier t += 12*60*60;
105*01a344a2SDavid du Colombier else
106*01a344a2SDavid du Colombier return t;
107*01a344a2SDavid du Colombier }
108*01a344a2SDavid du Colombier }
109*01a344a2SDavid du Colombier
110*01a344a2SDavid du Colombier /*
111*01a344a2SDavid du Colombier * delay for l milliseconds more or less.
112*01a344a2SDavid du Colombier */
113*01a344a2SDavid du Colombier void
delay(int l)114*01a344a2SDavid du Colombier delay(int l)
115*01a344a2SDavid du Colombier {
116*01a344a2SDavid du Colombier sleep(l);
117*01a344a2SDavid du Colombier }
118