|
|
1.1 root 1: #include <stdio.h>
2: #include <time.h>
3:
4: void
5: X(struct tm& tm)
6: {
7: printf("450007f8;l,80%02x%02x%02x\n",
8: tm.tm_sec, tm.tm_min, tm.tm_hour);
9: printf("450007fc;l,%02x%02x%02x%02x\n",
10: tm.tm_wday, tm.tm_mday, tm.tm_mon, tm.tm_year);
11: printf("450007f8;,0\n");
12: printf("@1010\n");
13: printf("450007f8\n");
14: return;
15: }
16:
17: // x が正常な BCD でかつ start <= x <= end ならば true
18: bool
19: BCDCheck(int x, int start, int end)
20: {
21: int xh = (x >> 4) & 0xf;
22: int xl = x & 0xf;
23:
24: if ((0 <= xh && xh <= 9) && (0 <= xl && xl <= 9)) {
25: int v = xh * 10 + xl;
26: return (start <= v && v <= end);
27: }
28: return false;
29: }
30:
31:
32: int
33: main(int ac, char *av[])
34: {
35: struct tm tm {};
36:
37: // 0 リセット
38: X(tm);
39:
40: // 秒テスト
41: for (int i = 0; i <= 0x7f; i++) {
42: if (BCDCheck(i, 0, 58)) {
43: continue;
44: }
45: tm.tm_sec = i;
46: X(tm);
47: }
48: tm.tm_sec = 0x59;
49:
50: // 分テスト
51: for (int i = 0; i <= 0x7f; i++) {
52: if (BCDCheck(i, 0, 58)) {
53: continue;
54: }
55: tm.tm_min = i;
56: X(tm);
57: }
58: tm.tm_min = 0x59;
59:
60: // 時テスト
61: for (int i = 0; i <= 0x3f; i++) {
62: if (BCDCheck(i, 0, 22)) {
63: continue;
64: }
65: tm.tm_hour = i;
66: X(tm);
67: }
68: tm.tm_hour = 0x23;
69:
70: // 曜日テスト
71: for (int i = 0; i <= 7; i++) {
72: tm.tm_wday = i;
73: X(tm);
74: }
75:
76: // 年月日テスト
77: for (int y = 0; y <= 1; y++) {
78: tm.tm_year = y;
79: for (int m = 0; m <= 0x1f; m++) {
80: tm.tm_mon = m;
81: for (int d = 0; d <= 0x3f; d++) {
82: if (BCDCheck(d, 2, 27)) {
83: continue;
84: }
85: tm.tm_mday = d;
86: X(tm);
87: }
88: }
89: }
90: return 0;
91: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.