home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 1
/
FREEWARE.BIN
/
gunix
/
cscc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-10-17
|
3KB
|
140 lines
/*
* cscc.c ------ Change Screen Color for the Console Environment.
*
* Written by Masaya Oct/2/89
*
*/
#include <stdio.h>
#include <dos.h>
#include <ctype.h>
#define P_ADDR 0x0fd90
#define P_BLUE 0x0fd92
#define P_RED 0x0fd94
#define P_GREEN 0x0fd96
#define BACKGROUND 0 /* background color */
#define FORGROUND 1 /* forground color */
#define OUTLINE 2 /* boader color */
#define NOTICE 3 /* notice color */
#define DEBUGMSG 5 /* debug message color */
static int ptbl[5][6]={
{0, 2, EOF, EOF, EOF, EOF}, /* Background */
{1, 3, EOF, EOF, EOF, EOF}, /* Forground */
{4, 5, 6, EOF, EOF, EOF}, /* Boarder */
{8, 10, 12, 14, EOF, EOF}, /* Notice */
{7, 9, 11, 13, 15, EOF} /* Debug Message */
};
usage()
{
printf("Color.0 : Background (Gray)\n");
printf("Color.1 : Forground (White)\n");
printf("Color.2 : Outline Boader (Yellow)\n");
printf("Color.3 : Notice (Red)\n");
printf("Color.4 : Debug Message (Black)\n");
printf("Blue Red Green ( 0 - 255)\n");
}
set_color_value( plane, ac, av )
char **av;
{
int b, r, g, color, i;
sscanf( av[ac+1], "%d", &b);
sscanf( av[ac+2], "%d", &r);
sscanf( av[ac+3], "%d", &g);
for( i=0; i<5; i++ ){
if ( ptbl[plane][i] == EOF )
break;
color = ptbl[plane][i];
outp(P_ADDR,(char)color);
outp(P_BLUE, (char)b);
outp(P_RED, (char)r);
outp(P_GREEN, (char)g);
}
}
main( ac, av )
char **av;
{
int plane=EOF, b, r, g, i, color, c;
for ( i=1; i<ac; i++ ){
if ( av[i][0] == '-' ){
c = tolower( av[i][1] );
switch( c ){
case 'b':
case '0':
plane = BACKGROUND;
set_color_value( plane, i, av );
i+=3;
break;
case 'f':
case '1':
plane = FORGROUND;
set_color_value( plane, i, av );
i+=3;
break;
case 'o':
case '2':
plane = OUTLINE;
set_color_value( plane, i, av );
i+=3;
break;
case 'n':
case '3':
plane = NOTICE;
set_color_value( plane, i, av );
i+=3;
break;
case 'd':
case '4':
plane = DEBUGMSG;
set_color_value( plane, i, av );
i+=3;
break;
default:
usage();
exit(1);
}
}
else{
usage();
exit(1);
}
}
if ( plane != EOF )
exit(0);
/* Start Interractive processing */
printf("Change Screen Color for the Console (Gunix)\n");
printf("Copyright (C) Panic Corp 1989. All rights reserved ではありません\n");
while(1){
printf(" ^C to exit\n");
usage();
printf("Color Blue Red Green ===>> ");
scanf("%d %d %d %d", &plane, &b, &r, &g);
if ( plane >= 0 && plane < 5 ){
for( i=0; i<5; i++ ){
if ( ptbl[plane][i] == EOF )
break;
color = ptbl[plane][i];
outp(P_ADDR,(char)color);
outp(P_BLUE, (char)b);
outp(P_RED, (char)r);
outp(P_GREEN, (char)g);
}
}
else{
printf("\nInvalid Color [%d]\n", plane );
}
}
/* Not reached hear */
}