Skip to content

Commit

Permalink
Implemented color output.
Browse files Browse the repository at this point in the history
  • Loading branch information
Adam Gates authored and mist64 committed Jul 4, 2010
1 parent df3832c commit 6d994a2
Show file tree
Hide file tree
Showing 4 changed files with 170 additions and 0 deletions.
86 changes: 86 additions & 0 deletions console.c
Expand Up @@ -139,3 +139,89 @@ void get_cursor(int* x, int* y)
*y = 0;
#endif /* _WIN32 */
}

void set_color(int c)
{
#ifdef _WIN32
HANDLE h;
CONSOLE_SCREEN_BUFFER_INFO info;
WORD bg;

h = GetStdHandle(STD_OUTPUT_HANDLE);
if( h == INVALID_HANDLE_VALUE || GetConsoleScreenBufferInfo(h, &info) == FALSE )
return;

bg = info.wAttributes & (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY);
switch (c)
{
case COLOR_WHITE:
info.wAttributes = bg | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
break;

case COLOR_RED:
info.wAttributes = bg | FOREGROUND_RED;
break;

case COLOR_GREEN:
info.wAttributes = bg | FOREGROUND_GREEN;
break;

case COLOR_BLUE:
info.wAttributes = bg | FOREGROUND_BLUE;
break;

case COLOR_BLACK:
info.wAttributes = bg;
break;

case COLOR_PURPLE:
info.wAttributes = bg | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
break;

case COLOR_YELLOW:
info.wAttributes = bg | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
break;

case COLOR_CYAN:
info.wAttributes = bg | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
break;

case COLOR_ORANGE:
info.wAttributes = bg | FOREGROUND_GREEN | FOREGROUND_BLUE;
break;

case COLOR_BROWN:
info.wAttributes = bg | FOREGROUND_RED | FOREGROUND_GREEN;
break;

case COLOR_LTRED:
info.wAttributes = bg | FOREGROUND_RED | FOREGROUND_INTENSITY;
break;

case COLOR_GREY1:
info.wAttributes = bg | FOREGROUND_RED | FOREGROUND_BLUE;
break;

case COLOR_GREY2:
info.wAttributes = bg | FOREGROUND_INTENSITY;
break;

case COLOR_LTGREEN:
info.wAttributes = bg | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
break;

case COLOR_LTBLUE:
info.wAttributes = bg | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
break;

case COLOR_GREY3:
info.wAttributes = bg | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN;
break;
}

SetConsoleTextAttribute(h, info.wAttributes);

#else /* ANSI */
/* TODO */
#endif /* _WIN32 */
}
20 changes: 20 additions & 0 deletions console.h
@@ -1,12 +1,32 @@
#ifndef CONSOLE_H_INCLUDED
#define CONSOLE_H_INCLUDED

enum {
COLOR_WHITE,
COLOR_RED,
COLOR_GREEN,
COLOR_BLUE,
COLOR_BLACK,
COLOR_PURPLE,
COLOR_YELLOW,
COLOR_CYAN,
COLOR_ORANGE,
COLOR_BROWN,
COLOR_LTRED,
COLOR_GREY1,
COLOR_GREY2,
COLOR_LTGREEN,
COLOR_LTBLUE,
COLOR_GREY3,
};

void clear_screen();
void up_cursor();
void down_cursor();
void left_cursor();
void right_cursor();
void move_cursor(int x, int y);
void get_cursor(int* x, int* y);
void set_color(int c);

#endif /* CONSOLE_H_INCLUDED */
48 changes: 48 additions & 0 deletions runtime.c
Expand Up @@ -455,6 +455,9 @@ printf("CHROUT: %d @ %x,%x,%x,%x\n", A, a, b, c, d);
C = 0;
} else {
switch (A) {
case 5:
set_color(COLOR_WHITE);
break;
case 10:
kernal_quote = 0;
break;
Expand All @@ -469,9 +472,24 @@ printf("CHROUT: %d @ %x,%x,%x,%x\n", A, a, b, c, d);
case 19: /* CSR HOME */
move_cursor(0, 0);
break;
case 28:
set_color(COLOR_RED);
break;
case 29: /* CSR RIGHT */
right_cursor();
break;
case 30:
set_color(COLOR_GREEN);
break;
case 31:
set_color(COLOR_BLUE);
break;
case 129:
set_color(COLOR_ORANGE);
break;
case 144:
set_color(COLOR_BLACK);
break;
case 145: /* CSR UP */
up_cursor();
break;
Expand All @@ -481,6 +499,36 @@ printf("CHROUT: %d @ %x,%x,%x,%x\n", A, a, b, c, d);
clear_screen();
#endif
break;
case 149:
set_color(COLOR_BROWN);
break;
case 150:
set_color(COLOR_LTRED);
break;
case 151:
set_color(COLOR_GREY1);
break;
case 152:
set_color(COLOR_GREY2);
break;
case 153:
set_color(COLOR_LTGREEN);
break;
case 154:
set_color(COLOR_LTBLUE);
break;
case 155:
set_color(COLOR_GREY3);
break;
case 156:
set_color(COLOR_PURPLE);
break;
case 158:
set_color(COLOR_YELLOW);
break;
case 159:
set_color(COLOR_CYAN);
break;
case 157: /* CSR LEFT */
left_cursor();
break;
Expand Down
16 changes: 16 additions & 0 deletions test/color.bas
@@ -0,0 +1,16 @@
50 PRINT CHR$(144),"BLACK"
10 PRINT CHR$(5),"WHITE"
20 PRINT CHR$(28),"RED"
80 PRINT CHR$(159),"CYAN"
60 PRINT CHR$(156),"PURPLE"
30 PRINT CHR$(30),"GREEN"
40 PRINT CHR$(31),"BLUE"
70 PRINT CHR$(158),"YELLOW"
90 PRINT CHR$(129),"ORANGE"
100 PRINT CHR$(149),"BROWN"
110 PRINT CHR$(150),"LT. RED"
120 PRINT CHR$(151),"DK. GREY"
130 PRINT CHR$(152),"GREY"
140 PRINT CHR$(153),"LT. GREEN"
150 PRINT CHR$(154),"LT. BLUE"
160 PRINT CHR$(155),"LT. GREY"

0 comments on commit 6d994a2

Please sign in to comment.