Deleted Added
full compact
vidcontrol.c (6239) vidcontrol.c (6628)
1/*-
2 * Copyright (c) 1994-1995 S�ren Schmidt
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
1/*-
2 * Copyright (c) 1994-1995 S�ren Schmidt
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $Id: vidcontrol.c,v 1.7 1995/02/07 11:56:21 sos Exp $
28 * $Id: vidcontrol.c,v 1.8 1995/02/08 01:07:16 dima Exp $
29 */
30
31#include <ctype.h>
32#include <stdio.h>
33#include <machine/console.h>
34#include <sys/errno.h>
35#include "path.h"
36
29 */
30
31#include <ctype.h>
32#include <stdio.h>
33#include <machine/console.h>
34#include <sys/errno.h>
35#include "path.h"
36
37
38char legal_colors[16][16] = {
39 "black", "blue", "green", "cyan",
40 "red", "magenta", "brown", "white",
41 "grey", "lightblue", "lightgreen", "lightcyan",
42 "lightred", "lightmagenta", "yellow", "lightwhite"
37char legal_colors[16][16] = {
38 "black", "blue", "green", "cyan",
39 "red", "magenta", "brown", "white",
40 "grey", "lightblue", "lightgreen", "lightcyan",
41 "lightred", "lightmagenta", "yellow", "lightwhite"
43 };
42};
44int hex = 0;
45int number;
46char letter;
47struct vid_info info;
48
49
43int hex = 0;
44int number;
45char letter;
46struct vid_info info;
47
48
49void
50usage()
51{
52 fprintf(stderr,
53"Usage: vidcontrol mode (available modes: VGA_40x25, VGA_80x25,\n"
54" VGA_80x50, VGA_320x200,\n"
55" EGA_80x25, EGA_80x43)\n"
56" (experimental) VGA_80x30, VGA_80x60)\n"
57"\n"
58" show (show available colors)\n"
59" fgcol bgcol (set fore- & background colors)\n"
60" -r fgcol bgcol (set reverse fore- & background colors)\n"
61" -b color (set border color)\n"
62" -c normal (set cursor to inverting block)\n"
63" -c blink (set cursor to blinking inverted block)\n"
64" -c destructive (set cursor to blinking destructive char)\n"
65" -d (dump screenmap to stdout)\n"
66" -l filename (load srceenmap file filename)\n"
67" -L (load default screenmap)\n"
68" -f DxL filename (load font, D dots wide & L lines high)\n"
69" -s saver | help (set screensaver type or help for a list)\n"
70" -t N (set screensaver timeout in seconds)\n"
71" -x (use hex numbers for output)\n"
72 );
73}
74
50char *
51nextarg(int ac, char **av, int *indp, int oc)
52{
53 if (*indp < ac)
54 return(av[(*indp)++]);
55 fprintf(stderr, "%s: option requires two arguments -- %c\n", av[0], oc);
56 usage();
57 exit(1);
58 return("");
59}
60
75char *
76nextarg(int ac, char **av, int *indp, int oc)
77{
78 if (*indp < ac)
79 return(av[(*indp)++]);
80 fprintf(stderr, "%s: option requires two arguments -- %c\n", av[0], oc);
81 usage();
82 exit(1);
83 return("");
84}
85
61
62char *
63mkfullname(const char *s1, const char *s2, const char *s3)
64{
86char *
87mkfullname(const char *s1, const char *s2, const char *s3)
88{
65static char *buf = NULL;
66static int bufl = 0;
67int f;
89 static char *buf = NULL;
90 static int bufl = 0;
91 int f;
68
92
69
70 f = strlen(s1) + strlen(s2) + strlen(s3) + 1;
71 if (f > bufl)
72 if (buf)
73 buf = (char *)realloc(buf, f);
74 else
75 buf = (char *)malloc(f);
76 if (!buf) {
77 bufl = 0;
78 return(NULL);
79 }
80
81 bufl = f;
82 strcpy(buf, s1);
83 strcat(buf, s2);
84 strcat(buf, s3);
85 return(buf);
86}
87
93 f = strlen(s1) + strlen(s2) + strlen(s3) + 1;
94 if (f > bufl)
95 if (buf)
96 buf = (char *)realloc(buf, f);
97 else
98 buf = (char *)malloc(f);
99 if (!buf) {
100 bufl = 0;
101 return(NULL);
102 }
103
104 bufl = f;
105 strcpy(buf, s1);
106 strcat(buf, s2);
107 strcat(buf, s3);
108 return(buf);
109}
110
88
89void
90load_scrnmap(char *filename)
91{
92 FILE *fd;
93 int i, size;
94 char *name;
95 scrmap_t scrnmap;
96 char *prefix[] = {"", "", SCRNMAP_PATH, SCRNMAP_PATH, NULL};

--- 17 unchanged lines hidden (view full) ---

114 return;
115 }
116 }
117 if (ioctl(0, PIO_SCRNMAP, &scrnmap) < 0)
118 perror("can't load screenmap");
119 close(fd);
120}
121
111void
112load_scrnmap(char *filename)
113{
114 FILE *fd;
115 int i, size;
116 char *name;
117 scrmap_t scrnmap;
118 char *prefix[] = {"", "", SCRNMAP_PATH, SCRNMAP_PATH, NULL};

--- 17 unchanged lines hidden (view full) ---

136 return;
137 }
138 }
139 if (ioctl(0, PIO_SCRNMAP, &scrnmap) < 0)
140 perror("can't load screenmap");
141 close(fd);
142}
143
122
123void
124load_default_scrnmap()
125{
144void
145load_default_scrnmap()
146{
126 int i;
127 scrmap_t scrnmap;
147 scrmap_t scrnmap;
148 int i;
128
129 for (i=0; i<256; i++)
130 *((char*)&scrnmap + i) = i;
131 if (ioctl(0, PIO_SCRNMAP, &scrnmap) < 0)
132 perror("can't load default screenmap");
133}
134
149
150 for (i=0; i<256; i++)
151 *((char*)&scrnmap + i) = i;
152 if (ioctl(0, PIO_SCRNMAP, &scrnmap) < 0)
153 perror("can't load default screenmap");
154}
155
135
136void
137print_scrnmap()
138{
139 unsigned char map[256];
140 int i;
141
142 if (ioctl(0, GIO_SCRNMAP, &map) < 0) {
143 perror("getting scrnmap");

--- 6 unchanged lines hidden (view full) ---

150 fprintf(stdout, " %02x", map[i]);
151 else
152 fprintf(stdout, " %03d", map[i]);
153 }
154 fprintf(stdout, "\n");
155
156}
157
156void
157print_scrnmap()
158{
159 unsigned char map[256];
160 int i;
161
162 if (ioctl(0, GIO_SCRNMAP, &map) < 0) {
163 perror("getting scrnmap");

--- 6 unchanged lines hidden (view full) ---

170 fprintf(stdout, " %02x", map[i]);
171 else
172 fprintf(stdout, " %03d", map[i]);
173 }
174 fprintf(stdout, "\n");
175
176}
177
158
159void
160load_font(char *type, char *filename)
161{
162 FILE *fd;
163 int i, io, size;
164 char *name, *fontmap;
165 char *prefix[] = {"", "", FONT_PATH, FONT_PATH, NULL};
166 char *postfix[] = {"", ".fnt", "", ".fnt"};

--- 35 unchanged lines hidden (view full) ---

202 }
203 }
204 if (ioctl(0, io, fontmap) < 0)
205 perror("can't load font");
206 close(fd);
207 free(fontmap);
208}
209
178void
179load_font(char *type, char *filename)
180{
181 FILE *fd;
182 int i, io, size;
183 char *name, *fontmap;
184 char *prefix[] = {"", "", FONT_PATH, FONT_PATH, NULL};
185 char *postfix[] = {"", ".fnt", "", ".fnt"};

--- 35 unchanged lines hidden (view full) ---

221 }
222 }
223 if (ioctl(0, io, fontmap) < 0)
224 perror("can't load font");
225 close(fd);
226 free(fontmap);
227}
228
210
211void
212set_screensaver_timeout(char *arg)
213{
214 int nsec;
215
216 if (!strcmp(arg, "off"))
217 nsec = 0;
218 else {
219 nsec = atoi(arg);
220 if ((*arg == '\0') || (nsec < 1)) {
221 fprintf(stderr, "argument must be a positive number\n");
222 return;
223 }
224 }
225 if (ioctl(0, CONS_BLANKTIME, &nsec) == -1)
226 perror("setting screensaver period");
227}
228
229void
230set_screensaver_timeout(char *arg)
231{
232 int nsec;
233
234 if (!strcmp(arg, "off"))
235 nsec = 0;
236 else {
237 nsec = atoi(arg);
238 if ((*arg == '\0') || (nsec < 1)) {
239 fprintf(stderr, "argument must be a positive number\n");
240 return;
241 }
242 }
243 if (ioctl(0, CONS_BLANKTIME, &nsec) == -1)
244 perror("setting screensaver period");
245}
246
229
230void
247void
231set_screensaver_type(char *type)
232{
233 ssaver_t saver;
234 int i, e;
235
236 if (!strcmp(type, "help")) {
237 i = 0;
238 printf("available screen saver types:\n");
239 do {
240 saver.num = i;
241 e = ioctl(0, CONS_GSAVER, &saver);
242 i ++;
243 if (e == 0)
244 printf("\t%s\n", saver.name);
245 } while (e == 0);
246 if (e == -1 && errno != EIO)
247 perror("getting screensaver info");
248 } else {
249 i = 0;
250 do {
251 saver.num = i;
252 e = ioctl(0, CONS_GSAVER, &saver);
253 i ++;
254 if (e == 0 && !strcmp(type, saver.name)) {
255 if (ioctl(0, CONS_SSAVER, &saver) == -1)
256 perror("setting screensaver type");
257 return;
258 }
259 } while (e == 0);
260 if (e == -1 && errno != EIO)
261 perror("getting screensaver info");
262 else
263 fprintf(stderr, "%s: No such screensaver\n", type);
264 }
265}
266
267void
268set_cursor_type(char *appearence)
269{
270 int type;
271
272 if (!strcmp(appearence, "normal"))
273 type = 0;
274 else if (!strcmp(appearence, "blink"))
275 type = 1;
276 else if (!strcmp(appearence, "destructive"))
277 type = 3;
278 else {
279 fprintf(stderr,
280 "argument to -c must be normal, blink or destructive\n");
281 return;
282 }
283 ioctl(0, CONS_CURSORTYPE, &type);
284}
285
248set_cursor_type(char *appearence)
249{
250 int type;
251
252 if (!strcmp(appearence, "normal"))
253 type = 0;
254 else if (!strcmp(appearence, "blink"))
255 type = 1;
256 else if (!strcmp(appearence, "destructive"))
257 type = 3;
258 else {
259 fprintf(stderr,
260 "argument to -c must be normal, blink or destructive\n");
261 return;
262 }
263 ioctl(0, CONS_CURSORTYPE, &type);
264}
265
286
287int
288video_mode(int argc, char **argv, int *index)
289{
290 int mode;
291
292 if (*index < argc) {
293 if (!strcmp(argv[*index], "VGA_40x25"))
294 mode = SW_VGA_C40x25;

--- 15 unchanged lines hidden (view full) ---

310 return;
311 if (ioctl(0, mode, NULL) < 0)
312 perror("Cannot set videomode");
313 (*index)++;
314 }
315 return;
316}
317
266int
267video_mode(int argc, char **argv, int *index)
268{
269 int mode;
270
271 if (*index < argc) {
272 if (!strcmp(argv[*index], "VGA_40x25"))
273 mode = SW_VGA_C40x25;

--- 15 unchanged lines hidden (view full) ---

289 return;
290 if (ioctl(0, mode, NULL) < 0)
291 perror("Cannot set videomode");
292 (*index)++;
293 }
294 return;
295}
296
318
319int
320get_color_number(char *color)
321{
322 int i;
323
324 for (i=0; i<16; i++)
325 if (!strcmp(color, legal_colors[i]))
326 return i;
327 return -1;
328}
329
297int
298get_color_number(char *color)
299{
300 int i;
301
302 for (i=0; i<16; i++)
303 if (!strcmp(color, legal_colors[i]))
304 return i;
305 return -1;
306}
307
330
331int
332set_normal_colors(int argc, char **argv, int *index)
333{
334 int color;
335
336 if (*index < argc && (color = get_color_number(argv[*index])) != -1) {
337 (*index)++;
338 fprintf(stderr, "[=%dF", color);
339 if (*index < argc
340 && (color = get_color_number(argv[*index])) != -1
341 && color < 8) {
342 (*index)++;
343 fprintf(stderr, "[=%dG", color);
344 }
345 }
346}
347
308int
309set_normal_colors(int argc, char **argv, int *index)
310{
311 int color;
312
313 if (*index < argc && (color = get_color_number(argv[*index])) != -1) {
314 (*index)++;
315 fprintf(stderr, "[=%dF", color);
316 if (*index < argc
317 && (color = get_color_number(argv[*index])) != -1
318 && color < 8) {
319 (*index)++;
320 fprintf(stderr, "[=%dG", color);
321 }
322 }
323}
324
348
349set_reverse_colors(int argc, char **argv, int *index)
350{
351 int color;
352
353 if ((color = get_color_number(argv[*(index)-1])) != -1) {
354 fprintf(stderr, "[=%dH", color);
355 if (*index < argc
356 && (color = get_color_number(argv[*index])) != -1
357 && color < 8) {
358 (*index)++;
359 fprintf(stderr, "[=%dI", color);
360 }
361 }
362}
363
325set_reverse_colors(int argc, char **argv, int *index)
326{
327 int color;
328
329 if ((color = get_color_number(argv[*(index)-1])) != -1) {
330 fprintf(stderr, "[=%dH", color);
331 if (*index < argc
332 && (color = get_color_number(argv[*index])) != -1
333 && color < 8) {
334 (*index)++;
335 fprintf(stderr, "[=%dI", color);
336 }
337 }
338}
339
364
365set_border_color(char *arg)
366{
367 int color;
368
369 if ((color = get_color_number(arg)) != -1) {
370 fprintf(stderr, "[=%dA", color);
371 }
372 else
373 usage();
374}
375
340set_border_color(char *arg)
341{
342 int color;
343
344 if ((color = get_color_number(arg)) != -1) {
345 fprintf(stderr, "[=%dA", color);
346 }
347 else
348 usage();
349}
350
376
377test_frame()
378{
379 int i;
380
381 fprintf(stdout, "[=0G\n\n");
382 for (i=0; i<8; i++) {
383 fprintf(stdout, "[=15F[=0G %2d [=%dF%-16s"
384 "[=15F[=0G %2d [=%dF%-16s "
385 "[=15F %2d [=%dGBACKGROUND[=0G\n",
386 i, i, legal_colors[i], i+8, i+8,
387 legal_colors[i+8], i, i);
388 }
389 fprintf(stdout, "[=%dF[=%dG[=%dH[=%dI\n",
390 info.mv_norm.fore, info.mv_norm.back,
391 info.mv_rev.fore, info.mv_rev.back);
392}
393
351test_frame()
352{
353 int i;
354
355 fprintf(stdout, "[=0G\n\n");
356 for (i=0; i<8; i++) {
357 fprintf(stdout, "[=15F[=0G %2d [=%dF%-16s"
358 "[=15F[=0G %2d [=%dF%-16s "
359 "[=15F %2d [=%dGBACKGROUND[=0G\n",
360 i, i, legal_colors[i], i+8, i+8,
361 legal_colors[i+8], i, i);
362 }
363 fprintf(stdout, "[=%dF[=%dG[=%dH[=%dI\n",
364 info.mv_norm.fore, info.mv_norm.back,
365 info.mv_rev.fore, info.mv_rev.back);
366}
367
394
395usage()
396{
397 fprintf(stderr,
398"Usage: vidcontrol mode (available modes: VGA_40x25, VGA_80x25,\n"
399" VGA_80x50, VGA_320x200,\n"
400" EGA_80x25, EGA_80x43)\n"
401" (experimental) VGA_80x30, VGA_80x60)\n"
402"\n"
403" show (show available colors)\n"
404" fgcol bgcol (set fore- & background colors)\n"
405" -r fgcol bgcol (set reverse fore- & background colors)\n"
406" -b color (set border color)\n"
407" -c normal (set cursor to inverting block)\n"
408" -c blink (set cursor to blinking inverted block)\n"
409" -c destructive (set cursor to blinking destructive char)\n"
410" -d (dump screenmap to stdout)\n"
411" -l filename (load srceenmap file filename)\n"
412" -L (load default screenmap)\n"
413" -f DxL filename (load font, D dots wide & L lines high)\n"
414" -s saver | help (set screensaver type or help for a list)\n"
415" -t N (set screensaver timeout in seconds)\n"
416" -x (use hex numbers for output)\n"
417 );
418}
419
420
421void
422main(int argc, char **argv)
423{
424 extern char *optarg;
425 extern int optind;
426 int opt;
427
428
429 info.size = sizeof(info);
430 if (ioctl(0, CONS_GETINFO, &info) < 0) {
368void
369main(int argc, char **argv)
370{
371 extern char *optarg;
372 extern int optind;
373 int opt;
374
375
376 info.size = sizeof(info);
377 if (ioctl(0, CONS_GETINFO, &info) < 0) {
431 perror("Must be on a vrtual console");
378 perror("Must be on a virtual console");
432 exit(1);
433 }
379 exit(1);
380 }
434 while((opt = getopt(argc, argv, "b:c:df:l:Lr:s:t:x")) != -1)
381 while((opt = getopt(argc, argv, "b:c:df:l:Lr:t:x")) != -1)
435 switch(opt) {
436 case 'c':
437 set_cursor_type(optarg);
438 break;
439 case 'b':
440 set_border_color(optarg);
441 break;
442 case 'd':

--- 7 unchanged lines hidden (view full) ---

450 load_scrnmap(optarg);
451 break;
452 case 'L':
453 load_default_scrnmap();
454 break;
455 case 'r':
456 set_reverse_colors(argc, argv, &optind);
457 break;
382 switch(opt) {
383 case 'c':
384 set_cursor_type(optarg);
385 break;
386 case 'b':
387 set_border_color(optarg);
388 break;
389 case 'd':

--- 7 unchanged lines hidden (view full) ---

397 load_scrnmap(optarg);
398 break;
399 case 'L':
400 load_default_scrnmap();
401 break;
402 case 'r':
403 set_reverse_colors(argc, argv, &optind);
404 break;
458 case 's':
459 set_screensaver_type(optarg);
460 break;
461 case 't':
462 set_screensaver_timeout(optarg);
463 break;
464 case 'x':
465 hex = 1;
466 break;
467 default:
468 usage();

--- 15 unchanged lines hidden ---
405 case 't':
406 set_screensaver_timeout(optarg);
407 break;
408 case 'x':
409 hex = 1;
410 break;
411 default:
412 usage();

--- 15 unchanged lines hidden ---