Lines 1-10
Link Here
|
1 |
/* |
1 |
/* |
2 |
* Grand digital clock for curses compatible terminals |
2 |
* Grand digital clock for curses compatible terminals |
3 |
* Usage: grdc [-s] [n] -- run for n seconds (default infinity) |
3 |
* Usage: grdc [-s] [n] -- run for n seconds (default infinity) |
|
|
4 |
* grdc -t n -- countdown n seconds |
4 |
* Flags: -s: scroll |
5 |
* Flags: -s: scroll |
|
|
6 |
* -t: timer mode |
5 |
* |
7 |
* |
6 |
* modified 10-18-89 for curses (jrl) |
8 |
* modified 10-18-89 for curses (jrl) |
7 |
* 10-18-89 added signal handling |
9 |
* 10-18-89 added signal handling |
|
|
10 |
* 02-18-02 added countdown timer mode |
8 |
* |
11 |
* |
9 |
* $FreeBSD: src/games/grdc/grdc.c,v 1.9 2001/09/25 13:45:46 ru Exp $ |
12 |
* $FreeBSD: src/games/grdc/grdc.c,v 1.9 2001/09/25 13:45:46 ru Exp $ |
10 |
*/ |
13 |
*/ |
Lines 25-30
Link Here
|
25 |
|
28 |
|
26 |
/* it won't be */ |
29 |
/* it won't be */ |
27 |
time_t now; /* yeah! */ |
30 |
time_t now; /* yeah! */ |
|
|
31 |
time_t end; /* for timer mode */ |
28 |
struct tm *tm; |
32 |
struct tm *tm; |
29 |
|
33 |
|
30 |
short disp[11] = { |
34 |
short disp[11] = { |
Lines 58-72
Link Here
|
58 |
int i, j, s, k; |
62 |
int i, j, s, k; |
59 |
int n; |
63 |
int n; |
60 |
int ch; |
64 |
int ch; |
61 |
int scrol; |
65 |
int scrol = 0; |
|
|
66 |
int timer = 0; |
67 |
int hour, minute, second; |
62 |
|
68 |
|
63 |
scrol = 0; |
69 |
while ((ch = getopt(argc, argv, "st")) != -1) |
64 |
|
|
|
65 |
while ((ch = getopt(argc, argv, "s")) != -1) |
66 |
switch (ch) { |
70 |
switch (ch) { |
67 |
case 's': |
71 |
case 's': |
68 |
scrol = 1; |
72 |
scrol = 1; |
69 |
break; |
73 |
break; |
|
|
74 |
case 't': |
75 |
timer = 1; |
76 |
break; |
70 |
case '?': |
77 |
case '?': |
71 |
default: |
78 |
default: |
72 |
usage(); |
79 |
usage(); |
Lines 75-81
Link Here
|
75 |
argc -= optind; |
82 |
argc -= optind; |
76 |
argv += optind; |
83 |
argv += optind; |
77 |
|
84 |
|
78 |
if (argc > 1) { |
85 |
if ((argc > 1) || (argc == 0 && timer)) { |
79 |
usage(); |
86 |
usage(); |
80 |
/* NOTREACHED */ |
87 |
/* NOTREACHED */ |
81 |
} |
88 |
} |
Lines 85-90
Link Here
|
85 |
else |
92 |
else |
86 |
n = 0; |
93 |
n = 0; |
87 |
|
94 |
|
|
|
95 |
if (timer && n == 0) |
96 |
return(0); |
97 |
|
88 |
initscr(); |
98 |
initscr(); |
89 |
|
99 |
|
90 |
signal(SIGINT,sighndl); |
100 |
signal(SIGINT,sighndl); |
Lines 127-142
Link Here
|
127 |
|
137 |
|
128 |
attrset(COLOR_PAIR(2)); |
138 |
attrset(COLOR_PAIR(2)); |
129 |
} |
139 |
} |
|
|
140 |
time(&end); |
141 |
end += n; |
130 |
do { |
142 |
do { |
131 |
mask = 0; |
143 |
mask = 0; |
132 |
time(&now); |
144 |
time(&now); |
133 |
tm = localtime(&now); |
145 |
if (!timer) { |
134 |
set(tm->tm_sec%10, 0); |
146 |
tm = localtime(&now); |
135 |
set(tm->tm_sec/10, 4); |
147 |
hour = tm->tm_hour; |
136 |
set(tm->tm_min%10, 10); |
148 |
minute = tm->tm_min; |
137 |
set(tm->tm_min/10, 14); |
149 |
second = tm->tm_sec; |
138 |
set(tm->tm_hour%10, 20); |
150 |
} else { |
139 |
set(tm->tm_hour/10, 24); |
151 |
n = end - now; |
|
|
152 |
if (n <= 0) |
153 |
break; |
154 |
hour = (n/3600)%100; |
155 |
minute = (n/60)%60; |
156 |
second = n%60; |
157 |
} |
158 |
set(second%10, 0); |
159 |
set(second/10, 4); |
160 |
set(minute%10, 10); |
161 |
set(minute/10, 14); |
162 |
set(hour%10, 20); |
163 |
set(hour/10, 24); |
140 |
set(10, 7); |
164 |
set(10, 7); |
141 |
set(10, 17); |
165 |
set(10, 17); |
142 |
for(k=0; k<6; k++) { |
166 |
for(k=0; k<6; k++) { |
Lines 229-234
Link Here
|
229 |
usage(void) |
253 |
usage(void) |
230 |
{ |
254 |
{ |
231 |
|
255 |
|
232 |
(void)fprintf(stderr, "usage: grdc [-s] [n]\n"); |
256 |
(void)fprintf(stderr, "usage: grdc [-s] [n]\n grdc -t n\n"); |
233 |
exit(1); |
257 |
exit(1); |
234 |
} |
258 |
} |