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 --- |