Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
}