Preliminary color console support.
This commit is contained in:
parent
c38189df49
commit
9c77b4747f
|
@ -150,6 +150,14 @@ void CONSOLE_Refresh()
|
||||||
driver.refresh();
|
driver.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CONSOLE_AllocColor(int color)
|
||||||
|
{
|
||||||
|
if (driver.allocColor)
|
||||||
|
return driver.allocColor(color);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* This function is only at the CONSOLE level. */
|
/* This function is only at the CONSOLE level. */
|
||||||
/* Admittably, calling the variable norefresh might be a bit dumb...*/
|
/* Admittably, calling the variable norefresh might be a bit dumb...*/
|
||||||
void CONSOLE_SetRefresh(int setting)
|
void CONSOLE_SetRefresh(int setting)
|
||||||
|
@ -201,6 +209,12 @@ void CONSOLE_NotifyResizeScreen(int x, int y)
|
||||||
driver.notifyResizeScreen(x, y);
|
driver.notifyResizeScreen(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CONSOLE_SetBackgroundColor(int fg, int bg)
|
||||||
|
{
|
||||||
|
if (driver.setBackgroundColor)
|
||||||
|
driver.setBackgroundColor(fg, bg);
|
||||||
|
}
|
||||||
|
|
||||||
void CONSOLE_WriteRawString(char *str)
|
void CONSOLE_WriteRawString(char *str)
|
||||||
{
|
{
|
||||||
/* This is a special function that is only for internal use and
|
/* This is a special function that is only for internal use and
|
||||||
|
|
|
@ -31,6 +31,8 @@
|
||||||
|
|
||||||
SCREEN *ncurses_screen;
|
SCREEN *ncurses_screen;
|
||||||
|
|
||||||
|
static int get_color_pair(int fg_color, int bg_color);
|
||||||
|
|
||||||
void NCURSES_Start()
|
void NCURSES_Start()
|
||||||
{
|
{
|
||||||
/* This should be the root driver so we can ignore anything
|
/* This should be the root driver so we can ignore anything
|
||||||
|
@ -45,6 +47,8 @@ void NCURSES_Start()
|
||||||
driver.getCursorPosition = NCURSES_GetCursorPosition;
|
driver.getCursorPosition = NCURSES_GetCursorPosition;
|
||||||
driver.getCharacterAtCursor = NCURSES_GetCharacterAtCursor;
|
driver.getCharacterAtCursor = NCURSES_GetCharacterAtCursor;
|
||||||
driver.clearScreen = NCURSES_ClearScreen;
|
driver.clearScreen = NCURSES_ClearScreen;
|
||||||
|
driver.allocColor = NCURSES_AllocColor;
|
||||||
|
driver.setBackgroundColor = NCURSES_SetBackgroundColor;
|
||||||
#ifdef HAVE_RESIZETERM
|
#ifdef HAVE_RESIZETERM
|
||||||
driver.notifyResizeScreen = NCURSES_NotifyResizeScreen;
|
driver.notifyResizeScreen = NCURSES_NotifyResizeScreen;
|
||||||
#endif
|
#endif
|
||||||
|
@ -60,10 +64,11 @@ void NCURSES_Init()
|
||||||
ncurses_screen = newterm("xterm", driver.console_out,
|
ncurses_screen = newterm("xterm", driver.console_out,
|
||||||
driver.console_in);
|
driver.console_in);
|
||||||
set_term(ncurses_screen);
|
set_term(ncurses_screen);
|
||||||
cbreak();
|
start_color();
|
||||||
|
raw();
|
||||||
noecho();
|
noecho();
|
||||||
nonl();
|
nonl();
|
||||||
intrflush(stdscr, FALSE);
|
/* intrflush(stdscr, FALSE); */
|
||||||
keypad(stdscr, TRUE);
|
keypad(stdscr, TRUE);
|
||||||
nodelay(stdscr, TRUE);
|
nodelay(stdscr, TRUE);
|
||||||
}
|
}
|
||||||
|
@ -71,9 +76,17 @@ void NCURSES_Init()
|
||||||
void NCURSES_Write(char output, int fg, int bg, int attribute)
|
void NCURSES_Write(char output, int fg, int bg, int attribute)
|
||||||
{
|
{
|
||||||
char row, col;
|
char row, col;
|
||||||
|
int pair;
|
||||||
|
|
||||||
/* We can discard all extended information. */
|
if (!fg)
|
||||||
if (waddch(stdscr, output) == ERR)
|
fg = COLOR_WHITE; /* Default */
|
||||||
|
|
||||||
|
if (!bg)
|
||||||
|
bg = COLOR_BLACK; /* Default */
|
||||||
|
|
||||||
|
pair = get_color_pair(fg, bg);
|
||||||
|
|
||||||
|
if (waddch(stdscr, output | COLOR_PAIR(pair)) == ERR)
|
||||||
{
|
{
|
||||||
NCURSES_GetCursorPosition(&row, &col);
|
NCURSES_GetCursorPosition(&row, &col);
|
||||||
FIXME(console, "NCURSES: waddch() failed at %d, %d.\n", row, col);
|
FIXME(console, "NCURSES: waddch() failed at %d, %d.\n", row, col);
|
||||||
|
@ -150,6 +163,36 @@ void NCURSES_ClearScreen()
|
||||||
werase(stdscr);
|
werase(stdscr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int NCURSES_AllocColor(int color)
|
||||||
|
{
|
||||||
|
/* Currently support only internal colors */
|
||||||
|
switch (color)
|
||||||
|
{
|
||||||
|
case WINE_BLACK: return COLOR_BLACK;
|
||||||
|
case WINE_WHITE: return COLOR_WHITE;
|
||||||
|
case WINE_RED: return COLOR_RED;
|
||||||
|
case WINE_GREEN: return COLOR_GREEN;
|
||||||
|
case WINE_YELLOW: return COLOR_YELLOW;
|
||||||
|
case WINE_BLUE: return COLOR_BLUE;
|
||||||
|
case WINE_MAGENTA: return COLOR_MAGENTA;
|
||||||
|
case WINE_CYAN: return COLOR_CYAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
FIXME(console, "Unable to allocate color %d\n", color);
|
||||||
|
|
||||||
|
/* Don't allocate a color... yet */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NCURSES_SetBackgroundColor(int fg, int bg)
|
||||||
|
{
|
||||||
|
int pair;
|
||||||
|
|
||||||
|
pair = get_color_pair(fg, bg);
|
||||||
|
|
||||||
|
bkgdset(COLOR_PAIR(pair));
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_RESIZETERM
|
#ifdef HAVE_RESIZETERM
|
||||||
|
|
||||||
void NCURSES_NotifyResizeScreen(int x, int y)
|
void NCURSES_NotifyResizeScreen(int x, int y)
|
||||||
|
@ -161,6 +204,37 @@ void NCURSES_NotifyResizeScreen(int x, int y)
|
||||||
resizeterm(y, x);
|
resizeterm(y, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif /* HAVE_RESIZETERM */
|
||||||
|
|
||||||
|
static int get_color_pair(int fg_color, int bg_color)
|
||||||
|
{
|
||||||
|
/* ncurses internally uses "color pairs" in addition to the "pallet" */
|
||||||
|
/* This isn't the best way to do this. Or even close */
|
||||||
|
|
||||||
|
static int current = 0;
|
||||||
|
static int fg[255]; /* 16 x 16 is enough */
|
||||||
|
static int bg[255];
|
||||||
|
int x;
|
||||||
|
|
||||||
|
/* The first pair is hardwired into ncurses */
|
||||||
|
fg[0] = COLOR_WHITE;
|
||||||
|
bg[0] = COLOR_BLACK;
|
||||||
|
|
||||||
|
for (x = 0; x <= current; x++)
|
||||||
|
{
|
||||||
|
if ((fg_color == fg[x]) && (bg_color == bg[x]))
|
||||||
|
{
|
||||||
|
TRACE(console, "Color pair: already allocated\n");
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Need to allocate new color */
|
||||||
|
current++;
|
||||||
|
fg[current] = fg_color;
|
||||||
|
bg[current] = bg_color;
|
||||||
|
TRACE(console, "Color pair: allocated.\n");
|
||||||
|
return init_pair(current, fg_color, bg_color);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* WINE_NCURSES */
|
#endif /* WINE_NCURSES */
|
||||||
|
|
|
@ -35,6 +35,10 @@ typedef struct CONSOLE_DRIVER
|
||||||
void (*getCharacterAtCursor)(char *, int *, int *, int *);
|
void (*getCharacterAtCursor)(char *, int *, int *, int *);
|
||||||
void (*clearScreen)();
|
void (*clearScreen)();
|
||||||
|
|
||||||
|
/* Color-control functions */
|
||||||
|
int (*allocColor)(int color);
|
||||||
|
void (*setBackgroundColor)(int fg, int bg);
|
||||||
|
|
||||||
/* Keyboard Functions */
|
/* Keyboard Functions */
|
||||||
int (*checkForKeystroke)(char *, char *);
|
int (*checkForKeystroke)(char *, char *);
|
||||||
void (*getKeystroke)(char *, char *);
|
void (*getKeystroke)(char *, char *);
|
||||||
|
@ -83,6 +87,8 @@ char CONSOLE_GetCharacter();
|
||||||
void CONSOLE_ResizeScreen();
|
void CONSOLE_ResizeScreen();
|
||||||
void CONSOLE_NotifyResizeScreen();
|
void CONSOLE_NotifyResizeScreen();
|
||||||
void CONSOLE_WriteRawString(char *);
|
void CONSOLE_WriteRawString(char *);
|
||||||
|
int CONSOLE_AllocColor(int);
|
||||||
|
void CONSOLE_SetBackgroundColor(int fg, int bg);
|
||||||
|
|
||||||
/* Generic Defines */
|
/* Generic Defines */
|
||||||
void GENERIC_Start();
|
void GENERIC_Start();
|
||||||
|
@ -111,6 +117,8 @@ void NCURSES_GetCharacterAtCursor(char *, int *, int *, int *);
|
||||||
void NCURSES_Refresh();
|
void NCURSES_Refresh();
|
||||||
void NCURSES_ClearScreen();
|
void NCURSES_ClearScreen();
|
||||||
void NCURSES_NotifyResizeScreen(int x, int y);
|
void NCURSES_NotifyResizeScreen(int x, int y);
|
||||||
|
int NCURSES_AllocColor(int);
|
||||||
|
void NCURSES_SetBackgroundColor(int fg, int bg);
|
||||||
|
|
||||||
#endif /* WINE_NCURSES */
|
#endif /* WINE_NCURSES */
|
||||||
|
|
||||||
|
@ -120,4 +128,23 @@ void XTERM_Close();
|
||||||
void XTERM_Init();
|
void XTERM_Init();
|
||||||
void XTERM_ResizeScreen(int x, int y);
|
void XTERM_ResizeScreen(int x, int y);
|
||||||
|
|
||||||
|
/* Color defines */
|
||||||
|
/* These will eventually be hex triples for dynamic allocation */
|
||||||
|
#define WINE_BLACK 1
|
||||||
|
#define WINE_BLUE 2
|
||||||
|
#define WINE_GREEN 3
|
||||||
|
#define WINE_CYAN 4
|
||||||
|
#define WINE_MAGENTA 5
|
||||||
|
#define WINE_BROWN 6
|
||||||
|
#define WINE_RED 7
|
||||||
|
#define WINE_LIGHT_GRAY 8
|
||||||
|
#define WINE_DARK_GRAY 9
|
||||||
|
#define WINE_LIGHT_BLUE 10
|
||||||
|
#define WINE_LIGHT_GREEN 11
|
||||||
|
#define WINE_LIGHT_RED 12
|
||||||
|
#define WINE_LIGHT_MAGENTA 13
|
||||||
|
#define WINE_LIGHT_CYAN 14
|
||||||
|
#define WINE_YELLOW 15
|
||||||
|
#define WINE_WHITE 16
|
||||||
|
|
||||||
#endif /* CONSOLE_H */
|
#endif /* CONSOLE_H */
|
||||||
|
|
126
msdos/int10.c
126
msdos/int10.c
|
@ -9,14 +9,15 @@
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
|
|
||||||
static int conv_text_mode_attribute_attribute(char attribute);
|
static void conv_text_mode_attributes(char attribute, int *fg, int *bg,
|
||||||
static int conv_text_mode_attribute_fg_color(char attribute);
|
int *wattribute);
|
||||||
static int conv_text_mode_attribute_bg_color(char attribute);
|
|
||||||
static void write_char_attribute_at_cursor(char output, char page_num,
|
static void write_char_attribute_at_cursor(char output, char page_num,
|
||||||
char attribute, short times);
|
char attribute, short times);
|
||||||
static void scroll_window(int direction, char lines, char row1,
|
static void scroll_window(int direction, char lines, char row1,
|
||||||
char col1, char row2, char col2, char attribute);
|
char col1, char row2, char col2, char attribute);
|
||||||
|
|
||||||
|
static int color_pallet[16];
|
||||||
|
|
||||||
#define SCROLL_UP 1
|
#define SCROLL_UP 1
|
||||||
#define SCROLL_DOWN 2
|
#define SCROLL_DOWN 2
|
||||||
|
|
||||||
|
@ -48,23 +49,53 @@ static void scroll_window(int direction, char lines, char row1,
|
||||||
|
|
||||||
void WINAPI INT_Int10Handler( CONTEXT *context )
|
void WINAPI INT_Int10Handler( CONTEXT *context )
|
||||||
{
|
{
|
||||||
|
static int registered_colors = FALSE;
|
||||||
|
static int video_mode = 7;
|
||||||
|
static int video_columns = 80;
|
||||||
|
|
||||||
|
if (!registered_colors)
|
||||||
|
{
|
||||||
|
/* Colors:
|
||||||
|
0000b black 1000b dark gray
|
||||||
|
0001b blue 1001b light blue
|
||||||
|
0010b green 1010b light green
|
||||||
|
0011b cyan 1011b light cyan
|
||||||
|
0100b red 1100b light red
|
||||||
|
0101b magenta 1101b light magenta
|
||||||
|
0110b brown 1110b yellow
|
||||||
|
0111b light gray 1111b white
|
||||||
|
*/
|
||||||
|
|
||||||
|
color_pallet[0] = CONSOLE_AllocColor(WINE_BLACK);
|
||||||
|
color_pallet[1] = CONSOLE_AllocColor(WINE_BLUE);
|
||||||
|
color_pallet[2] = CONSOLE_AllocColor(WINE_GREEN);
|
||||||
|
color_pallet[3] = CONSOLE_AllocColor(WINE_CYAN);
|
||||||
|
color_pallet[4] = CONSOLE_AllocColor(WINE_RED);
|
||||||
|
color_pallet[5] = CONSOLE_AllocColor(WINE_MAGENTA);
|
||||||
|
color_pallet[6] = CONSOLE_AllocColor(WINE_BROWN);
|
||||||
|
color_pallet[7] = CONSOLE_AllocColor(WINE_LIGHT_GRAY);
|
||||||
|
color_pallet[8] = CONSOLE_AllocColor(WINE_DARK_GRAY);
|
||||||
|
color_pallet[9] = CONSOLE_AllocColor(WINE_LIGHT_BLUE);
|
||||||
|
color_pallet[10] = CONSOLE_AllocColor(WINE_LIGHT_GREEN);
|
||||||
|
color_pallet[11] = CONSOLE_AllocColor(WINE_LIGHT_CYAN);
|
||||||
|
color_pallet[12] = CONSOLE_AllocColor(WINE_LIGHT_RED);
|
||||||
|
color_pallet[13] = CONSOLE_AllocColor(WINE_LIGHT_MAGENTA);
|
||||||
|
color_pallet[14] = CONSOLE_AllocColor(WINE_YELLOW);
|
||||||
|
color_pallet[15] = CONSOLE_AllocColor(WINE_WHITE);
|
||||||
|
}
|
||||||
|
|
||||||
switch(AH_reg(context)) {
|
switch(AH_reg(context)) {
|
||||||
|
|
||||||
case 0x00: /* SET VIDEO MODE */
|
case 0x00: /* SET VIDEO MODE */
|
||||||
/* Text Modes: (can xterm or similar change text rows/cols?) */
|
/* Text Modes: */
|
||||||
/* Answer: Yes. We can add that later. */
|
|
||||||
/* Er, maybe. I thought resizeterm() did it, I was wrong. */
|
|
||||||
/* (mode) (text rows/cols)
|
/* (mode) (text rows/cols)
|
||||||
0x00 - 40x25
|
0x00 - 40x25
|
||||||
0x01 - 40x25
|
0x01 - 40x25
|
||||||
0x02 - 80x25
|
0x02 - 80x25
|
||||||
0x03 - 80x25 or 80x43 or 80x50
|
0x03 - 80x25 or 80x43 or 80x50 (assume 80x25)
|
||||||
0x07 - 80x25
|
0x07 - 80x25
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* We may or may not want to do a refresh between the resize and
|
|
||||||
the clear... */
|
|
||||||
|
|
||||||
switch (AL_reg(context)) {
|
switch (AL_reg(context)) {
|
||||||
case 0x00: /* 40x25 */
|
case 0x00: /* 40x25 */
|
||||||
case 0x01:
|
case 0x01:
|
||||||
|
@ -73,6 +104,8 @@ void WINAPI INT_Int10Handler( CONTEXT *context )
|
||||||
AL_reg(context));
|
AL_reg(context));
|
||||||
CONSOLE_ResizeScreen(40, 25);
|
CONSOLE_ResizeScreen(40, 25);
|
||||||
CONSOLE_ClearScreen();
|
CONSOLE_ClearScreen();
|
||||||
|
video_mode = AL_reg(context);
|
||||||
|
video_columns = 40;
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case 0x02:
|
||||||
case 0x03:
|
case 0x03:
|
||||||
|
@ -82,10 +115,13 @@ void WINAPI INT_Int10Handler( CONTEXT *context )
|
||||||
AL_reg(context));
|
AL_reg(context));
|
||||||
CONSOLE_ResizeScreen(80, 25);
|
CONSOLE_ResizeScreen(80, 25);
|
||||||
CONSOLE_ClearScreen();
|
CONSOLE_ClearScreen();
|
||||||
|
video_mode = AL_reg(context);
|
||||||
|
video_columns = 80;
|
||||||
break;
|
break;
|
||||||
case 0x13:
|
case 0x13:
|
||||||
TRACE(int10, "Setting VGA 320x200 256-color mode\n");
|
TRACE(int10, "Setting VGA 320x200 256-color mode\n");
|
||||||
VGA_SetMode(320,200,8);
|
VGA_SetMode(320,200,8);
|
||||||
|
video_mode = AL_reg(context);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME(int10, "Set Video Mode (0x%x) - Not Supported\n",
|
FIXME(int10, "Set Video Mode (0x%x) - Not Supported\n",
|
||||||
|
@ -184,7 +220,8 @@ void WINAPI INT_Int10Handler( CONTEXT *context )
|
||||||
case 0x0b:
|
case 0x0b:
|
||||||
switch BH_reg(context) {
|
switch BH_reg(context) {
|
||||||
case 0x00: /* SET BACKGROUND/BORDER COLOR */
|
case 0x00: /* SET BACKGROUND/BORDER COLOR */
|
||||||
FIXME(int10, "Set Background/Border Color - Not Supported\n");
|
/* In text modes, this sets only the border */
|
||||||
|
TRACE(int10, "Set Background/Border Color - Ignored\n");
|
||||||
break;
|
break;
|
||||||
case 0x01: /* SET PALETTE */
|
case 0x01: /* SET PALETTE */
|
||||||
FIXME(int10, "Set Palette - Not Supported\n");
|
FIXME(int10, "Set Palette - Not Supported\n");
|
||||||
|
@ -214,8 +251,8 @@ void WINAPI INT_Int10Handler( CONTEXT *context )
|
||||||
case 0x0f: /* GET CURRENT VIDEO MODE */
|
case 0x0f: /* GET CURRENT VIDEO MODE */
|
||||||
TRACE(int10, "Get Current Video Mode\n");
|
TRACE(int10, "Get Current Video Mode\n");
|
||||||
/* Note: This should not be a constant value. */
|
/* Note: This should not be a constant value. */
|
||||||
AL_reg(context) = 0x07; /* 80x25 text mode */
|
AL_reg(context) = video_mode;
|
||||||
AH_reg(context) = 80; /* 80 columns */
|
AH_reg(context) = video_columns;
|
||||||
BH_reg(context) = 0; /* Display page 0 */
|
BH_reg(context) = 0; /* Display page 0 */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -421,9 +458,10 @@ static void write_char_attribute_at_cursor(char output, char page_num,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wattribute = conv_text_mode_attribute_attribute(attribute);
|
conv_text_mode_attributes(attribute, &fg_color, &bg_color,
|
||||||
fg_color = conv_text_mode_attribute_fg_color(attribute);
|
&wattribute);
|
||||||
bg_color = conv_text_mode_attribute_bg_color(attribute);
|
|
||||||
|
TRACE(int10, "Fore: %d Back: %d\n", fg_color, bg_color);
|
||||||
|
|
||||||
CONSOLE_GetCursorPosition(&x, &y);
|
CONSOLE_GetCursorPosition(&x, &y);
|
||||||
|
|
||||||
|
@ -436,65 +474,29 @@ static void write_char_attribute_at_cursor(char output, char page_num,
|
||||||
CONSOLE_MoveCursor(x, y);
|
CONSOLE_MoveCursor(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int conv_text_mode_attribute_fg_color(char attribute)
|
static void conv_text_mode_attributes(char attribute, int *fg, int *bg,
|
||||||
|
int *wattribute)
|
||||||
{
|
{
|
||||||
/* This is a local function to convert the color values
|
/* This is a local function to convert the text-mode attributes
|
||||||
in text-mode attributes to Wine's scheme */
|
to Wine's color and attribute scheme */
|
||||||
|
|
||||||
/* Foreground Color is stored in bits 3 through 0 */
|
/* Foreground Color is stored in bits 3 through 0 */
|
||||||
|
|
||||||
/* Colors:
|
|
||||||
0000b black 1000b dark gray
|
|
||||||
0001b blue 1001b light blue
|
|
||||||
0010b green 1010b light green
|
|
||||||
0011b cyan 1011b light cyan
|
|
||||||
0100b red 1100b light red
|
|
||||||
0101b magenta 1101b light magenta
|
|
||||||
0110b brown 1110b yellow
|
|
||||||
0111b light gray 1111b white
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* FIXME - We need color values for those and some generic constants */
|
|
||||||
|
|
||||||
return 0; /* Bogus, temporary data. */
|
|
||||||
}
|
|
||||||
|
|
||||||
static int conv_text_mode_attribute_bg_color(char attribute)
|
|
||||||
{
|
|
||||||
/* This is a local function to convert the color values
|
|
||||||
in text-mode attributes to Wine's scheme */
|
|
||||||
|
|
||||||
/* Background Color is stored in bits 6 through 4 */
|
/* Background Color is stored in bits 6 through 4 */
|
||||||
|
|
||||||
/* Colors same as above, but only the left column */
|
|
||||||
|
|
||||||
/* FIXME - We need color values for those and some generic constants */
|
|
||||||
|
|
||||||
return 0; /* Bogus, temporary data. */
|
|
||||||
}
|
|
||||||
|
|
||||||
static int conv_text_mode_attribute_attribute(char attribute)
|
|
||||||
{
|
|
||||||
/* This is a local function to convert the attribute values
|
|
||||||
in text-mode attributes to Wine's scheme */
|
|
||||||
|
|
||||||
/* If this has bit 7 set, then we need to blink */
|
/* If this has bit 7 set, then we need to blink */
|
||||||
|
|
||||||
if (255 && attribute)
|
*fg = color_pallet[attribute & 15];
|
||||||
{
|
*bg = color_pallet[(attribute & 112) / 16];
|
||||||
/* return TEXT_ATTRIBUTE_BLINK; */
|
*wattribute = attribute & 128;
|
||||||
}
|
|
||||||
|
|
||||||
return 0; /* Bogus data */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void scroll_window(int direction, char lines, char row1,
|
static void scroll_window(int direction, char lines, char row1,
|
||||||
char col1, char row2, char col2, char attribute)
|
char col1, char row2, char col2, char attribute)
|
||||||
{
|
{
|
||||||
int wattribute, bg_color;
|
int wattribute, bg_color, fg_color;
|
||||||
|
|
||||||
wattribute = conv_text_mode_attribute_attribute(attribute);
|
conv_text_mode_attributes(attribute, &fg_color, &bg_color,
|
||||||
bg_color = conv_text_mode_attribute_bg_color(attribute);
|
&wattribute);
|
||||||
|
|
||||||
if (!lines) /* Actually, clear the window */
|
if (!lines) /* Actually, clear the window */
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue