|
|
1.1 root 1: /*
2: * This example uses a few of the many VIO calls.
3: *
4: * This example puts the time on the screen in large numbers.
5: */
6:
7: #include <stdio.h>
8: #include <doscalls.h>
9: #include <subcalls.h>
10:
11: #define CHAR_WIDTH 8
12: #define CHAR_HEIGHT 7
13:
14: #define CLOCK_ROW 10 /* row to start the clock */
15: #define TOTAL_COLMS 80 /* screen size in colms */
16: #define TOTAL_ROWS 24 /* screen size in rows */
17:
18:
19: char BigChars[10][CHAR_HEIGHT][CHAR_WIDTH] = {
20:
21: {
22: " 00 ",
23: " 0 0 ",
24: " 0 0",
25: " 0 0",
26: " 0 0",
27: " 0 0 ",
28: " 00 "
29: },
30: {
31: " 1 ",
32: " 1 ",
33: " 1 ",
34: " 1 ",
35: " 1 ",
36: " 1 ",
37: " 1 "
38: },
39: {
40: " 2222 ",
41: " 2 2",
42: " 2",
43: " 2 ",
44: " 2 ",
45: " 2 ",
46: " 222222"
47: },
48: {
49: " 33333 ",
50: " 3",
51: " 3",
52: " 333 ",
53: " 3",
54: " 3",
55: " 33333 "
56: },
57: {
58: " 44 ",
59: " 4 4 ",
60: " 4 4 ",
61: " 4 4 ",
62: " 444444",
63: " 4 ",
64: " 4 "
65: },
66: {
67: " 555555",
68: " 5 ",
69: " 55555 ",
70: " 5",
71: " 5",
72: " 5 5",
73: " 5555 "
74: },
75: {
76: " 6 ",
77: " 6 ",
78: " 6 ",
79: " 6666 ",
80: " 6 6",
81: " 6 6",
82: " 6666 "
83: },
84: {
85: " 777777",
86: " 7",
87: " 7 ",
88: " 7 ",
89: " 7 ",
90: " 7 ",
91: " 7 "
92: },
93: {
94: " 8888 ",
95: " 8 8",
96: " 8 8",
97: " 8888 ",
98: " 8 8",
99: " 8 8",
100: " 8888 "
101: },
102: {
103: " 9999 ",
104: " 9 9",
105: " 9 9",
106: " 9999 ",
107: " 9 ",
108: " 9 ",
109: " 9 "
110: }
111: };
112:
113:
114: main(argc, argv)
115: int argc;
116: char *argv[];
117: {
118: unsigned rc; /* return code */
119: struct DateTime Now; /* time struct for DOSGETSETTIME */
120:
121: /* clear the screen */
122:
123: VIOWRTNCELL( (char far *) " \07", TOTAL_ROWS * TOTAL_COLMS, 0, 0, 0 );
124:
125: /* paint separaters between hours and minutes, and minutes and seconds*/
126:
127: VIOWRTNCELL( (char far *) "|\07", 1, (CLOCK_ROW + 2), 27, 0 );
128: VIOWRTNCELL( (char far *) "|\07", 1, (CLOCK_ROW + 5), 27, 0 );
129: VIOWRTNCELL( (char far *) "|\07", 1, (CLOCK_ROW + 2), 52, 0 );
130: VIOWRTNCELL( (char far *) "|\07", 1, (CLOCK_ROW + 5), 52, 0 );
131:
132: for (;;) {
133:
134: /* get the system time */
135:
136: if (rc = DOSGETDATETIME( (struct DateTime far *) &Now)) {
137:
138: printf("DOSGETDATETIME failed, error: %d\n", rc);
139: DOSEXIT(1, 0);
140: }
141:
142: /* write the digits out to the screen */
143:
144: LoadNumber(Now.hour / 10, 5, CLOCK_ROW);
145: LoadNumber(Now.hour % 10, 15, CLOCK_ROW);
146: LoadNumber(Now.minutes / 10, 30, CLOCK_ROW);
147: LoadNumber(Now.minutes % 10, 40, CLOCK_ROW);
148: LoadNumber(Now.seconds / 10, 55, CLOCK_ROW);
149: LoadNumber(Now.seconds % 10, 65, CLOCK_ROW);
150:
151: DOSSLEEP((long) 900);
152: }
153: }
154:
155:
156: /* display the digit at the given coordinates */
157:
158: LoadNumber( dig, x, y )
159: unsigned dig;
160: unsigned x;
161: unsigned y;
162: {
163: int i;
164:
165: /* write a list of char strings to make up a display number */
166:
167: for (i=0; (i < CHAR_HEIGHT); i++)
168:
169: /* write a character string starting from the coordinates */
170:
171: VIOWRTCHARSTR( BigChars[dig][i], CHAR_WIDTH, y++, x, 0);
172: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.