mess822x 1.23
mess822x
Loading...
Searching...
No Matches
822date.c
Go to the documentation of this file.
1#include <sys/types.h>
2#include <time.h>
3#include "buffer.h"
4#include "logmsg.h"
5#include "getln.h"
6#include "mess822.h"
7#include "exit.h"
8#include "leapsecs.h"
9#include "caltime.h"
10#include "tai.h"
11
12#define WHO "822date"
13
14static void nomem()
15{
16 logmsg(WHO,111,FATAL,"out of memory");
17}
18
20struct tai sec;
21unsigned char secpack[TAI_PACK];
22time_t secunix;
23
26 { "date", 0, 0, 0, 0, &t, 0 }
27, { 0, 0, 0, 0, 0, 0, 0 }
28} ;
29
30stralloc line = {0};
32
33int main(int argc,char **argv)
34{
35 if (leapsecs_init() == -1)
36 logmsg(WHO,111,FATAL,"unable to init leapsecs: ");
37
38 if (argv[1])
39 a[0].name = argv[1];
40
41 if (!mess822_begin(&h,a)) nomem();
42 for (;;) {
43 if (getln(buffer_0,&line,&match,'\n') == -1)
44 logmsg(WHO,111,FATAL,"unable to read input: ");
45 if (!mess822_ok(&line)) break;
46 if (!mess822_line(&h,&line)) nomem();
47 if (!match) break;
48 }
49 if (!mess822_end(&h)) nomem();
50
51 if (!t.known) _exit(100);
52
53 if (!stralloc_ready(&line,caltime_fmt((char *) 0,&t.ct))) nomem();
54 buffer_put(buffer_1,line.s,caltime_fmt(line.s,&t.ct));
55 buffer_put(buffer_1,"\n",1);
56
58
59 caltime_utc(&t.ct,&sec,(int *) 0,(int *) 0);
60 if (!stralloc_ready(&line,caltime_fmt((char *) 0,&t.ct))) nomem();
61 buffer_put(buffer_1,line.s,caltime_fmt(line.s,&t.ct));
62 buffer_put(buffer_1,"\n",1);
63
64 tai_pack((char *)secpack,&sec);
65 secunix = secpack[0] - 64;
66 secunix = (secunix << 8) + secpack[1];
67 secunix = (secunix << 8) + secpack[2];
68 secunix = (secunix << 8) + secpack[3];
69 secunix = (secunix << 8) + secpack[4];
70 secunix = (secunix << 8) + secpack[5];
71 secunix = (secunix << 8) + secpack[6];
72 secunix = (secunix << 8) + secpack[7];
73 secunix -= 10;
74 buffer_puts(buffer_1,ctime(&secunix));
75
76 buffer_flush(buffer_1);
77 _exit(0);
78}
mess822_action a[]
Definition: 822date.c:25
struct tai sec
Definition: 822date.c:20
mess822_header h
Definition: 822date.c:24
stralloc line
Definition: 822date.c:30
time_t secunix
Definition: 822date.c:22
int match
Definition: 822date.c:31
#define WHO
Definition: 822date.c:12
unsigned char secpack[TAI_PACK]
Definition: 822date.c:21
mess822_time t
Definition: 822date.c:19
int main()
Definition: 822print.c:351
unsigned int caltime_fmt(char *s, struct caltime *ct)
Definition: caltime_fmt.c:4
int leapsecs_init(void)
Definition: leapsecs_init.c:5
int mess822_line(mess822_header *, stralloc *)
Definition: mess822_line.c:107
int mess822_end(mess822_header *)
Definition: mess822_line.c:26
int mess822_ok(stralloc *)
Definition: mess822_ok.c:4
#define MESS822_HEADER
Definition: mess822.h:48
int mess822_begin(mess822_header *, mess822_action *)
Definition: mess822_line.c:5
void caltime_tai(struct caltime *ct, struct tai *t)
Definition: caltime_tai.c:8
void caltime_utc(struct caltime *ct, struct tai *t, int *pwday, int *pyday)
Definition: caltime_utc.c:8
int known
Definition: mess822.h:9
struct caltime ct
Definition: mess822.h:8
char * name
Definition: mess822.h:13