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