|
|
1.1 root 1: #include <vector>
2: #include <stdio.h>
3:
4: template <class T>
5: std::vector<T>
6: splitx(const char *buf)
7: {
8: std::vector<T> rv;
9: T v = 0;
10: bool a = false;
11:
12: for (; *buf; buf++) {
13: char c = *buf;
14: if ('0' <= c && c <= '9') {
15: v = v * 16 + (c - '0');
16: a = true;
17: } else if ('A' <= c && c <= 'F') {
18: v = v * 16 + (c - 'A' + 10);
19: a = true;
20: } else if ('a' <= c && c <= 'f') {
21: v = v * 16 + (c - 'a' + 10);
22: a = true;
23: } else {
24: if (a) {
25: rv.push_back(v);
26: v = 0;
27: a = false;
28: }
29: }
30: }
31: if (a) {
32: rv.push_back(v);
33: }
34: return rv;
35: }
36:
37: int
38: main(int ac, char *av[])
39: {
40: int d[2];
41: int line = 0;
42: char buf[1024];
43:
44: for (;;line = (line + 1) % 5) {
45: auto p = fgets(buf, sizeof(buf), stdin);
46: if (p == NULL) {
47: return 0;
48: }
49: switch (line) {
50: case 0:
51: case 1:
52: d[line] = splitx<int>(buf)[1];
53: break;
54: case 2 ... 3:
55: break;
56: case 4:
57: auto v0 = splitx<int>(buf);
58: auto v = decltype(v0) (v0.begin() + 1, v0.end());
59: int y = d[1] & 0xff;
60: int m = (d[1] >> 8) & 0xff;
61: int md = (d[1] >> 16) & 0xff;
62: int wd = (d[1] >> 24) & 0xff;
63: int h = d[0] & 0xff;
64: int n = (d[0] >> 8) & 0xff;
65: int s = (d[0] >> 16) & 0xff;
66: printf("%02x/%02x/%02x(%02x) %02x:%02x:%02x"
67: " | %02x/%02x/%02x(%02x) %02x:%02x:%02x\n",
68: y, m, md, wd, h, n, s,
69: v[7], v[6], v[5], v[4], v[3], v[2], v[1]);
70: break;
71: }
72: }
73: return 0;
74: }
75:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.