]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/cwfs/time.c
merge
[plan9front.git] / sys / src / cmd / cwfs / time.c
1 #include "all.h"
2
3 Timet
4 toytime(void)
5 {
6         return time(nil);
7 }
8
9 void
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
19 prdate(void)
20 {
21         print("%T\n", time(nil));
22 }
23
24 static void
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
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
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
114 delay(int l)
115 {
116         sleep(l);
117 }