diff options
author | Eric Andersen <andersen@codepoet.org> | 2003-12-20 07:07:22 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2003-12-20 07:07:22 +0000 |
commit | 08573e0ac480485c3ad4cd3f4bba235ebd4f4081 (patch) | |
tree | 71a93ffea8eca3aa477d04ad9159e1f44ec1104a /console-tools | |
parent | 02e035550456f7ebce6306f6023e87a7c1d44749 (diff) | |
download | busybox-w32-08573e0ac480485c3ad4cd3f4bba235ebd4f4081.tar.gz busybox-w32-08573e0ac480485c3ad4cd3f4bba235ebd4f4081.tar.bz2 busybox-w32-08573e0ac480485c3ad4cd3f4bba235ebd4f4081.zip |
Kill off the loadacm applet. It is unused, unmaintained
garbage leftover from before I started maintaining BusyBox.
As the Klingon's like to say, Today is a good day to die.
-Erik
Diffstat (limited to 'console-tools')
-rw-r--r-- | console-tools/Config.in | 6 | ||||
-rw-r--r-- | console-tools/Makefile.in | 1 | ||||
-rw-r--r-- | console-tools/loadacm.c | 354 | ||||
-rw-r--r-- | console-tools/reset.c | 12 |
4 files changed, 11 insertions, 362 deletions
diff --git a/console-tools/Config.in b/console-tools/Config.in index 83694a824..e261794ab 100644 --- a/console-tools/Config.in +++ b/console-tools/Config.in | |||
@@ -31,12 +31,6 @@ config CONFIG_DUMPKMAP | |||
31 | This program dumps the kernel's keyboard translation table to | 31 | This program dumps the kernel's keyboard translation table to |
32 | stdout, in binary format. You can then use loadkmap to load it. | 32 | stdout, in binary format. You can then use loadkmap to load it. |
33 | 33 | ||
34 | config CONFIG_LOADACM | ||
35 | bool "loadacm" | ||
36 | default n | ||
37 | help | ||
38 | This program loads an acm from standard input. | ||
39 | |||
40 | config CONFIG_LOADFONT | 34 | config CONFIG_LOADFONT |
41 | bool "loadfont" | 35 | bool "loadfont" |
42 | default n | 36 | default n |
diff --git a/console-tools/Makefile.in b/console-tools/Makefile.in index 1c4ac5222..032b194f6 100644 --- a/console-tools/Makefile.in +++ b/console-tools/Makefile.in | |||
@@ -27,7 +27,6 @@ CONSOLETOOLS_DIR-$(CONFIG_CHVT) += chvt.o | |||
27 | CONSOLETOOLS_DIR-$(CONFIG_CLEAR) += clear.o | 27 | CONSOLETOOLS_DIR-$(CONFIG_CLEAR) += clear.o |
28 | CONSOLETOOLS_DIR-$(CONFIG_DEALLOCVT) += deallocvt.o | 28 | CONSOLETOOLS_DIR-$(CONFIG_DEALLOCVT) += deallocvt.o |
29 | CONSOLETOOLS_DIR-$(CONFIG_DUMPKMAP) += dumpkmap.o | 29 | CONSOLETOOLS_DIR-$(CONFIG_DUMPKMAP) += dumpkmap.o |
30 | CONSOLETOOLS_DIR-$(CONFIG_LOADACM) += loadacm.o | ||
31 | CONSOLETOOLS_DIR-$(CONFIG_LOADFONT) += loadfont.o | 30 | CONSOLETOOLS_DIR-$(CONFIG_LOADFONT) += loadfont.o |
32 | CONSOLETOOLS_DIR-$(CONFIG_LOADKMAP) += loadkmap.o | 31 | CONSOLETOOLS_DIR-$(CONFIG_LOADKMAP) += loadkmap.o |
33 | CONSOLETOOLS_DIR-$(CONFIG_OPENVT) += openvt.o | 32 | CONSOLETOOLS_DIR-$(CONFIG_OPENVT) += openvt.o |
diff --git a/console-tools/loadacm.c b/console-tools/loadacm.c deleted file mode 100644 index edaf51afb..000000000 --- a/console-tools/loadacm.c +++ /dev/null | |||
@@ -1,354 +0,0 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
2 | /* | ||
3 | * Derived from | ||
4 | * mapscrn.c - version 0.92 | ||
5 | * | ||
6 | * Was taken from console-tools and adapted by | ||
7 | * Peter Novodvorsky <petya@logic.ru> | ||
8 | */ | ||
9 | |||
10 | #include <stdio.h> | ||
11 | #include <stdlib.h> | ||
12 | #include <memory.h> | ||
13 | #include <string.h> | ||
14 | #include <unistd.h> | ||
15 | #include <fcntl.h> | ||
16 | #include <assert.h> | ||
17 | #include <errno.h> | ||
18 | #include <signal.h> | ||
19 | #include <sys/kd.h> | ||
20 | #include <sys/types.h> | ||
21 | #include <sys/ioctl.h> | ||
22 | #include "busybox.h" | ||
23 | |||
24 | typedef unsigned short unicode; | ||
25 | |||
26 | static long int ctoi(unsigned char *s, int *is_unicode); | ||
27 | static int old_screen_map_read_ascii(FILE * fp, unsigned char buf[]); | ||
28 | static int uni_screen_map_read_ascii(FILE * fp, unicode buf[], int *is_unicode); | ||
29 | static unicode utf8_to_ucs2(char *buf); | ||
30 | static int screen_map_load(int fd, FILE * fp); | ||
31 | |||
32 | int loadacm_main(int argc, char **argv) | ||
33 | { | ||
34 | int fd; | ||
35 | |||
36 | if (argc>=2 && *argv[1]=='-') { | ||
37 | bb_show_usage(); | ||
38 | } | ||
39 | |||
40 | fd = bb_xopen(CURRENT_VC, O_RDWR); | ||
41 | |||
42 | if (screen_map_load(fd, stdin)) { | ||
43 | bb_perror_msg_and_die("Error loading acm"); | ||
44 | } | ||
45 | |||
46 | write(fd, "\033(K", 3); | ||
47 | |||
48 | return EXIT_SUCCESS; | ||
49 | } | ||
50 | |||
51 | static int screen_map_load(int fd, FILE * fp) | ||
52 | { | ||
53 | struct stat stbuf; | ||
54 | unicode wbuf[E_TABSZ]; | ||
55 | unsigned char buf[E_TABSZ]; | ||
56 | int parse_failed = 0; | ||
57 | int is_unicode; | ||
58 | |||
59 | if (fstat(fileno(fp), &stbuf)) | ||
60 | bb_perror_msg_and_die("Cannot stat map file"); | ||
61 | |||
62 | /* first try a UTF screen-map: either ASCII (no restriction) or binary (regular file) */ | ||
63 | if (! | ||
64 | (parse_failed = | ||
65 | (-1 == uni_screen_map_read_ascii(fp, wbuf, &is_unicode))) | ||
66 | || (S_ISREG(stbuf.st_mode) && (stbuf.st_size == (sizeof(unicode) * E_TABSZ)))) { /* test for binary UTF map by size */ | ||
67 | if (parse_failed) { | ||
68 | if (-1 == fseek(fp, 0, SEEK_SET)) { | ||
69 | if (errno == ESPIPE) | ||
70 | bb_error_msg_and_die("16bit screen-map MUST be a regular file."); | ||
71 | else | ||
72 | bb_perror_msg_and_die("fseek failed reading binary 16bit screen-map"); | ||
73 | } | ||
74 | |||
75 | if (fread(wbuf, sizeof(unicode) * E_TABSZ, 1, fp) != 1) | ||
76 | bb_perror_msg_and_die("Cannot read [new] map from file"); | ||
77 | #if 0 | ||
78 | else | ||
79 | bb_error_msg("Input screen-map is binary."); | ||
80 | #endif | ||
81 | } | ||
82 | |||
83 | /* if it was effectively a 16-bit ASCII, OK, else try to read as 8-bit map */ | ||
84 | /* same if it was binary, ie. if parse_failed */ | ||
85 | if (parse_failed || is_unicode) { | ||
86 | if (ioctl(fd, PIO_UNISCRNMAP, wbuf)) | ||
87 | bb_perror_msg_and_die("PIO_UNISCRNMAP ioctl"); | ||
88 | else | ||
89 | return 0; | ||
90 | } | ||
91 | } | ||
92 | |||
93 | /* rewind... */ | ||
94 | if (-1 == fseek(fp, 0, SEEK_SET)) { | ||
95 | if (errno == ESPIPE) | ||
96 | bb_error_msg("Assuming 8bit screen-map - MUST be a regular file."), | ||
97 | exit(1); | ||
98 | else | ||
99 | bb_perror_msg_and_die("fseek failed assuming 8bit screen-map"); | ||
100 | } | ||
101 | |||
102 | /* ... and try an old 8-bit screen-map */ | ||
103 | if (!(parse_failed = (-1 == old_screen_map_read_ascii(fp, buf))) || | ||
104 | (S_ISREG(stbuf.st_mode) && (stbuf.st_size == E_TABSZ))) { /* test for binary old 8-bit map by size */ | ||
105 | if (parse_failed) { | ||
106 | if (-1 == fseek(fp, 0, SEEK_SET)) { | ||
107 | if (errno == ESPIPE) | ||
108 | /* should not - it succedeed above */ | ||
109 | bb_error_msg_and_die("fseek() returned ESPIPE !"); | ||
110 | else | ||
111 | bb_perror_msg_and_die("fseek for binary 8bit screen-map"); | ||
112 | } | ||
113 | |||
114 | if (fread(buf, E_TABSZ, 1, fp) != 1) | ||
115 | bb_perror_msg_and_die("Cannot read [old] map from file"); | ||
116 | #if 0 | ||
117 | else | ||
118 | bb_error_msg("Input screen-map is binary."); | ||
119 | #endif | ||
120 | } | ||
121 | |||
122 | if (ioctl(fd, PIO_SCRNMAP, buf)) | ||
123 | bb_perror_msg_and_die("PIO_SCRNMAP ioctl"); | ||
124 | else | ||
125 | return 0; | ||
126 | } | ||
127 | bb_error_msg("Error parsing symbolic map"); | ||
128 | return(1); | ||
129 | } | ||
130 | |||
131 | |||
132 | /* | ||
133 | * - reads `fp' as a 16-bit ASCII SFM file. | ||
134 | * - returns -1 on error. | ||
135 | * - returns it in `unicode' in an E_TABSZ-elements array. | ||
136 | * - sets `*is_unicode' flagiff there were any non-8-bit | ||
137 | * (ie. real 16-bit) mapping. | ||
138 | * | ||
139 | * FIXME: ignores everything after second word | ||
140 | */ | ||
141 | static int uni_screen_map_read_ascii(FILE * fp, unicode buf[], int *is_unicode) | ||
142 | { | ||
143 | char buffer[256]; /* line buffer reading file */ | ||
144 | char *p, *q; /* 1st + 2nd words in line */ | ||
145 | int in, on; /* the same, as numbers */ | ||
146 | int tmp_is_unicode; /* tmp for is_unicode calculation */ | ||
147 | int i; /* loop index - result holder */ | ||
148 | int ret_code = 0; /* return code */ | ||
149 | sigset_t acmsigset, old_sigset; | ||
150 | |||
151 | assert(is_unicode); | ||
152 | |||
153 | *is_unicode = 0; | ||
154 | |||
155 | /* first 128 codes defaults to ASCII */ | ||
156 | for (i = 0; i < 128; i++) | ||
157 | buf[i] = i; | ||
158 | /* remaining defaults to replacement char (usually E_TABSZ = 256) */ | ||
159 | for (; i < E_TABSZ; i++) | ||
160 | buf[i] = 0xfffd; | ||
161 | |||
162 | /* block SIGCHLD */ | ||
163 | sigemptyset(&acmsigset); | ||
164 | sigaddset(&acmsigset, SIGCHLD); | ||
165 | sigprocmask(SIG_BLOCK, &acmsigset, &old_sigset); | ||
166 | |||
167 | do { | ||
168 | if (NULL == fgets(buffer, sizeof(buffer), fp)) { | ||
169 | if (feof(fp)) | ||
170 | break; | ||
171 | else | ||
172 | bb_perror_msg_and_die("uni_screen_map_read_ascii() can't read line"); | ||
173 | } | ||
174 | |||
175 | /* get "charset-relative charcode", stripping leading spaces */ | ||
176 | p = strtok(buffer, " \t\n"); | ||
177 | |||
178 | /* skip empty lines and comments */ | ||
179 | if (!p || *p == '#') | ||
180 | continue; | ||
181 | |||
182 | /* get unicode mapping */ | ||
183 | q = strtok(NULL, " \t\n"); | ||
184 | if (q) { | ||
185 | in = ctoi(p, NULL); | ||
186 | if (in < 0 || in > 255) { | ||
187 | ret_code = -1; | ||
188 | break; | ||
189 | } | ||
190 | |||
191 | on = ctoi(q, &tmp_is_unicode); | ||
192 | if (in < 0 && on > 65535) { | ||
193 | ret_code = -1; | ||
194 | break; | ||
195 | } | ||
196 | |||
197 | *is_unicode |= tmp_is_unicode; | ||
198 | buf[in] = on; | ||
199 | } else { | ||
200 | ret_code = -1; | ||
201 | break; | ||
202 | } | ||
203 | } | ||
204 | while (1); /* terminated by break on feof() */ | ||
205 | |||
206 | /* restore sig mask */ | ||
207 | sigprocmask(SIG_SETMASK, &old_sigset, NULL); | ||
208 | |||
209 | return ret_code; | ||
210 | } | ||
211 | |||
212 | |||
213 | static int old_screen_map_read_ascii(FILE * fp, unsigned char buf[]) | ||
214 | { | ||
215 | char buffer[256]; | ||
216 | int in, on; | ||
217 | char *p, *q; | ||
218 | |||
219 | for (in = 0; in < 256; in++) | ||
220 | buf[in] = in; | ||
221 | |||
222 | while (fgets(buffer, sizeof(buffer) - 1, fp)) { | ||
223 | p = strtok(buffer, " \t\n"); | ||
224 | |||
225 | if (!p || *p == '#') | ||
226 | continue; | ||
227 | |||
228 | q = strtok(NULL, " \t\n#"); | ||
229 | if (q) { | ||
230 | in = ctoi(p, NULL); | ||
231 | if (in < 0 || in > 255) | ||
232 | return -1; | ||
233 | |||
234 | on = ctoi(q, NULL); | ||
235 | if (in < 0 && on > 255) | ||
236 | return -1; | ||
237 | |||
238 | buf[in] = on; | ||
239 | } else | ||
240 | return -1; | ||
241 | } | ||
242 | |||
243 | return (0); | ||
244 | } | ||
245 | |||
246 | |||
247 | /* | ||
248 | * - converts a string into an int. | ||
249 | * - supports dec and hex bytes, hex UCS2, single-quoted byte and UTF8 chars. | ||
250 | * - returns the converted value | ||
251 | * - if `is_unicode != NULL', use it to tell whether it was unicode | ||
252 | * | ||
253 | * CAVEAT: will report valid UTF mappings using only 1 byte as 8-bit ones. | ||
254 | */ | ||
255 | static long int ctoi(unsigned char *s, int *is_unicode) | ||
256 | { | ||
257 | int i; | ||
258 | size_t ls; | ||
259 | |||
260 | ls = strlen(s); | ||
261 | if (is_unicode) | ||
262 | *is_unicode = 0; | ||
263 | |||
264 | /* hex-specified UCS2 */ | ||
265 | if ((strncmp(s, "U+", 2) == 0) && | ||
266 | (strspn(s + 2, "0123456789abcdefABCDEF") == ls - 2)) { | ||
267 | sscanf(s + 2, "%x", &i); | ||
268 | if (is_unicode) | ||
269 | *is_unicode = 1; | ||
270 | } | ||
271 | |||
272 | /* hex-specified byte */ | ||
273 | else if ((ls <= 4) && (strncmp(s, "0x", 2) == 0) && | ||
274 | (strspn(s + 2, "0123456789abcdefABCDEF") == ls - 2)) | ||
275 | sscanf(s + 2, "%x", &i); | ||
276 | |||
277 | /* oct-specified number (byte) */ | ||
278 | else if ((*s == '0') && (strspn(s, "01234567") == ls)) | ||
279 | sscanf(s, "%o", &i); | ||
280 | |||
281 | /* dec-specified number (byte) */ | ||
282 | else if (strspn(s, "0123456789") == ls) | ||
283 | sscanf(s, "%d", &i); | ||
284 | |||
285 | /* single-byte quoted char */ | ||
286 | else if ((strlen(s) == 3) && (s[0] == '\'') && (s[2] == '\'')) | ||
287 | i = s[1]; | ||
288 | |||
289 | /* multi-byte UTF8 quoted char */ | ||
290 | else if ((s[0] == '\'') && (s[ls - 1] == '\'')) { | ||
291 | s[ls - 1] = 0; /* ensure we'll not "parse UTF too far" */ | ||
292 | i = utf8_to_ucs2(s + 1); | ||
293 | if (is_unicode) | ||
294 | *is_unicode = 1; | ||
295 | } else | ||
296 | return (-1); | ||
297 | |||
298 | return (i); | ||
299 | } | ||
300 | |||
301 | |||
302 | static unicode utf8_to_ucs2(char *buf) | ||
303 | { | ||
304 | int utf_count = 0; | ||
305 | long utf_char = 0; | ||
306 | unicode tc = 0; | ||
307 | unsigned char c; | ||
308 | |||
309 | do { | ||
310 | c = *buf; | ||
311 | buf++; | ||
312 | |||
313 | /* if byte should be part of multi-byte sequence */ | ||
314 | if (c & 0x80) { | ||
315 | /* if we have already started to parse a UTF8 sequence */ | ||
316 | if (utf_count > 0 && (c & 0xc0) == 0x80) { | ||
317 | utf_char = (utf_char << 6) | (c & 0x3f); | ||
318 | utf_count--; | ||
319 | if (utf_count == 0) | ||
320 | tc = utf_char; | ||
321 | else | ||
322 | continue; | ||
323 | } else { /* Possibly 1st char of a UTF8 sequence */ | ||
324 | |||
325 | if ((c & 0xe0) == 0xc0) { | ||
326 | utf_count = 1; | ||
327 | utf_char = (c & 0x1f); | ||
328 | } else if ((c & 0xf0) == 0xe0) { | ||
329 | utf_count = 2; | ||
330 | utf_char = (c & 0x0f); | ||
331 | } else if ((c & 0xf8) == 0xf0) { | ||
332 | utf_count = 3; | ||
333 | utf_char = (c & 0x07); | ||
334 | } else if ((c & 0xfc) == 0xf8) { | ||
335 | utf_count = 4; | ||
336 | utf_char = (c & 0x03); | ||
337 | } else if ((c & 0xfe) == 0xfc) { | ||
338 | utf_count = 5; | ||
339 | utf_char = (c & 0x01); | ||
340 | } else | ||
341 | utf_count = 0; | ||
342 | continue; | ||
343 | } | ||
344 | } else { /* not part of multi-byte sequence - treat as ASCII | ||
345 | * this makes incomplete sequences to be ignored | ||
346 | */ | ||
347 | tc = c; | ||
348 | utf_count = 0; | ||
349 | } | ||
350 | } | ||
351 | while (utf_count); | ||
352 | |||
353 | return tc; | ||
354 | } | ||
diff --git a/console-tools/reset.c b/console-tools/reset.c index a3f01aab0..3f9ae984d 100644 --- a/console-tools/reset.c +++ b/console-tools/reset.c | |||
@@ -25,11 +25,21 @@ | |||
25 | 25 | ||
26 | #include <stdio.h> | 26 | #include <stdio.h> |
27 | #include <stdlib.h> | 27 | #include <stdlib.h> |
28 | #include <unistd.h> | ||
28 | #include "busybox.h" | 29 | #include "busybox.h" |
29 | 30 | ||
30 | extern int reset_main(int argc, char **argv) | 31 | extern int reset_main(int argc, char **argv) |
31 | { | 32 | { |
32 | printf("\033[?25h\033c\033[J"); | 33 | if (isatty(0) || isatty(0) || isatty(0)) { |
34 | /* See 'man 4 console_codes' for details: | ||
35 | * "ESC c" -- Reset | ||
36 | * "ESC ( K" -- Select user mapping | ||
37 | * "ESC [ J" -- Erase display | ||
38 | * "ESC [ 0 m" -- Reset all Graphics Rendition display attributes | ||
39 | * "ESC [ ? 25 h" -- Make cursor visible. | ||
40 | */ | ||
41 | printf("\033c\033(K\033[J\033[0m\033[?25h"); | ||
42 | } | ||
33 | return EXIT_SUCCESS; | 43 | return EXIT_SUCCESS; |
34 | } | 44 | } |
35 | 45 | ||