16
char *fmt = "%a %b %d %H:%M:%S %Z %Y";
17
int max_diff = 2*60*60; // default: 2 hours
28
if (t < 0 || t > 235959 || t%100 > 59 || t/100%100 > 59)
32
tm = localtime(&sys_t);
34
// Now convert to UTC seconds
35
t = t/100/100 * 60*60 + t/100%100 * 60 + t%100;
37
t -= tm->tm_gmtoff; // dst already included...
44
dt = t - sys_t % (24*60*60);
48
if (dt <= -max_diff || dt >= max_diff)
49
fatal("time diff to big (%2d:%02d:%02d)", dt/60/60, abs(dt)/60%60, abs(dt)%60);
59
if (settimeofday(tv, 0) == -1)
60
ioerror("settimeofday");
64
tm = localtime(&sys_t);
65
if (strftime(buf, sizeof(buf), fmt, tm))
72
event(void *_, struct vt_event *ev)
76
/* vbi may generate EV_PAGE, EV_HEADER, EV_XPACKET */
77
/* for event arguments see vt.h */
79
case EV_HEADER: // a new title line (for running headers)
81
static int last_t = -1;
85
if (ev->i2 & PG_OUTOFSEQ)
88
for (i = 32; i < 40; ++i)
89
if (s[i] >= '0' && s[i] <= '9')
90
t = t * 10+ s[i] - '0';
91
if (t >= 1000000 && t <= 1235959)
92
if (t == last_t || t - last_t == 1)
93
chk_time(t - 1000000);
96
printf("%06d\n", t-1000000);
106
usage(FILE *fp, int exit_val)
108
fprintf(fp, "usage: %s [options]\n", prgname);
111
" Valid options:\tDefault:\n"
117
" -delta <max_secs>\t7200 (2 hours)\n"
118
" -format <fmtstr>\t%%c\n"
119
" -timeout <seconds>\tnone\n"
125
option(int argc, char **argv, int *ind, char **arg)
127
static struct { char *nam, *altnam; int arg; } opts[] = {
129
{ "-delta", "-d", 1 },
130
{ "-format", "-f", 1 },
131
{ "-vbi", "-dev", 1 },
132
{ "-timeout", "-t", 1 },
133
{ "--version", "-v", 0 },
134
{ "--help", "-h", 0 },
135
{ "-newbttv", "-new", 0 },
136
{ "-oldbttv", "-old", 0 },
143
*arg = argv[(*ind)++];
144
for (i = 0; i < NELEM(opts); ++i)
145
if (streq(*arg, opts[i].nam) || streq(*arg, opts[i].altnam))
149
*arg = argv[(*ind)++];
151
fatal("option %s requires an argument", *arg);
157
fatal("%s: invalid option", *arg);
165
main(int argc, char **argv)
167
char *vbi_name = "/dev/vbi";
177
while (opt = option(argc, argv, &ind, &arg))
185
max_diff = atoi(arg);
187
fatal("-delta: illegal value '%s'", arg);
188
if (max_diff > 12*60*60)
191
error("-delta: %d too big. assuming %d", arg, max_diff);
202
if (timeout < 1 || timeout > 60*60)
203
fatal("-timeout: illegal value '%s'", arg);
206
printf("AleVT-Date Version "VERSION"\n");
226
signal(SIGALRM, SIG_DFL); // kill me
230
vbi = vbi_open(vbi_name, 0, 1, big_buf); // open device
232
fatal_ioerror(vbi_name);
234
vbi_add_handler(vbi, event, 0); // register event handler
237
fdset_select(fds, -1); // call scheduler
240
vbi_del_handler(vbi, event, 0);