diff --git a/src/conio/console.c b/src/conio/console.c index e7a28a1aec1c7f84f00b18e32669f3112f729b79..5b707779086c7a59539e98a6ce586b649f22ed7d 100644 --- a/src/conio/console.c +++ b/src/conio/console.c @@ -60,7 +60,6 @@ int CurrMode; sem_t console_mode_changed; int InitCS; int InitCE; -BYTE VideoMode; int FW, FH; WORD DpyCols; BYTE DpyRows; @@ -118,7 +117,6 @@ struct x11 { struct x11 x11; /* X pixel values for the RGB triples */ -struct dac_colors *dac_rgb; DWORD pixels[16]; #define NUMMODES (sizeof(vparams) / sizeof(struct video_params)) @@ -996,9 +994,9 @@ dac2rgb(XColor *color, int i) { int m; - color->red = dac_rgb[palette[i]].red << 10; - color->green = dac_rgb[palette[i]].green << 10; - color->blue = dac_rgb[palette[i]].blue << 10; + color->red = dac_default16[palette[i]].red << 10; + color->green = dac_default16[palette[i]].green << 10; + color->blue = dac_default16[palette[i]].blue << 10; } /* Calculate 'pixels[]' from the current DAC table and palette. @@ -1049,6 +1047,7 @@ init_mode(int mode) idx = find_vmode(mode); if (idx == -1) { fprintf(stderr,"Cannot initialize selected mode (%d)\n",mode); + console_new_mode=NO_NEW_MODE; sem_post(&console_mode_changed); return(-1); } @@ -1065,7 +1064,7 @@ init_mode(int mode) /* Point 'palette[]' to the Attribute Controller space. We will only use the first 16 slots. */ - palette = palettes[vmode.colour]; + palette = palettes[vmode.palette]; /* Load 'pixels[]' from default DAC values. */ update_pixels(); @@ -1132,28 +1131,6 @@ init_window() return(0); } -/* Initialize the VGA emulator - - XXX This is not nearly finished right now. -*/ -static int -init_vga(void) -{ - int i; - - /* Zero-fill 'dac_rgb' on allocation; the default (EGA) table has only - 64 entries. */ - dac_rgb = (struct dac_colors *)calloc(256, sizeof(struct dac_colors)); - if (dac_rgb == NULL) - return(-1); - - /* Copy the default DAC table to a working copy we can trash. */ - for (i = 0; i < 64; i++) - dac_rgb[i] = dac_default64[i]; /* Structure copy */ - - return(0); -} - int kbd_init() { @@ -1293,10 +1270,6 @@ video_init() if(init_window()) return(-1); - /* Set VGA emulator to a sane state */ - if(init_vga()) - return(-1); - /* Initialize mode 3 (text, 80x25, 16 colors) */ if(init_mode(3)) { return(-1); diff --git a/src/conio/console.h b/src/conio/console.h index 64202bb8340d92effb9e032c02c287de7de54c00..0951d8799269d218b1718b2580391686818ada18 100644 --- a/src/conio/console.h +++ b/src/conio/console.h @@ -50,9 +50,7 @@ struct dac_colors { BYTE blue; }; -/* We need a working copy of the default DAC table. This is filled from - 'dac_default{64,256}[]' in 'video.c:init_vga()'. */ -extern struct dac_colors *dac_rgb; +extern int CurrMode; extern int InitCS; extern int InitCE; @@ -64,7 +62,6 @@ extern BYTE CursCol; extern BYTE CursStart; extern BYTE CursEnd; -extern BYTE VideoMode; extern WORD DpyCols; extern BYTE DpyRows; diff --git a/src/conio/vidmodes.h b/src/conio/vidmodes.h index b5ab6b18de9eb9736cb5a747079be307471d9499..ef9aed381e6025c7197729ef868b0f55177bbc2d 100644 --- a/src/conio/vidmodes.h +++ b/src/conio/vidmodes.h @@ -41,7 +41,7 @@ struct video_params { int mode; - int colour; + int palette; int cols; int rows; int curs_start; @@ -50,110 +50,105 @@ struct video_params { int charwidth; }; +enum { + MONO_PALETTE + ,GREYSCALE_PALETTE + ,COLOUR_PALETTE +}; + struct video_params vparams[] = { /* BW 40x25 */ - {BW40, 0, 40, 25, 14, 15, 16, 8}, + {BW40, GREYSCALE_PALETTE, 40, 25, 14, 15, 16, 8}, /* CO 40x25 */ - {C40, 1, 40, 25, 14, 15, 16, 8}, + {C40, COLOUR_PALETTE, 40, 25, 14, 15, 16, 8}, /* BW 80x25 */ - {BW80, 0, 80, 25, 14, 15, 16, 8}, + {BW80, GREYSCALE_PALETTE, 80, 25, 14, 15, 16, 8}, /* CO 80x25 */ - {C80, 1, 80, 25, 14, 15, 16, 8}, + {C80, COLOUR_PALETTE, 80, 25, 14, 15, 16, 8}, /* MONO */ {MONO, 0, 80, 25, 14, 15, 16, 8}, /* CO 40x14 */ - {C40X14, 1, 40, 14, 14, 15, 16, 8}, + {C40X14, COLOUR_PALETTE, 40, 14, 14, 15, 16, 8}, /* CO 40x21 */ - {C40X21, 1, 40, 21, 14, 15, 16, 8}, + {C40X21, COLOUR_PALETTE, 40, 21, 14, 15, 16, 8}, /* CO 40x28 */ - {C40X28, 1, 40, 28, 12, 13, 14, 8}, + {C40X28, COLOUR_PALETTE, 40, 28, 12, 13, 14, 8}, /* CO 40x43 */ - {C40X43, 1, 40, 43, 7, 7, 8, 8}, + {C40X43, COLOUR_PALETTE, 40, 43, 7, 7, 8, 8}, /* CO 40x50 */ - {C40X50, 1, 40, 50, 7, 7, 8, 8}, + {C40X50, COLOUR_PALETTE, 40, 50, 7, 7, 8, 8}, /* CO 40x60 */ - {C40X60, 1, 40, 60, 7, 7, 8, 8}, + {C40X60, COLOUR_PALETTE, 40, 60, 7, 7, 8, 8}, /* CO 80x14 */ - {C80X14, 1, 80, 14, 14, 15, 16, 8}, + {C80X14, COLOUR_PALETTE, 80, 14, 14, 15, 16, 8}, /* CO 80x21 */ - {C80X21, 1, 80, 21, 14, 15, 16, 8}, + {C80X21, COLOUR_PALETTE, 80, 21, 14, 15, 16, 8}, /* CO 80x28 */ - {C80X28, 1, 80, 28, 12, 13, 14, 8}, + {C80X28, COLOUR_PALETTE, 80, 28, 12, 13, 14, 8}, /* CO 80x43 */ - {C80X43, 1, 80, 43, 7, 7, 8, 8}, + {C80X43, COLOUR_PALETTE, 80, 43, 7, 7, 8, 8}, /* CO 80x50 */ - {C80X50, 1, 80, 50, 7, 7, 8, 8}, + {C80X50, COLOUR_PALETTE, 80, 50, 7, 7, 8, 8}, /* CO 80x60 */ - {C80X60, 1, 80, 60, 7, 7, 8, 8}, + {C80X60, COLOUR_PALETTE, 80, 60, 7, 7, 8, 8}, /* B 40x14 */ - {BW40X14, 0, 40, 14, 14, 15, 16, 8}, + {BW40X14, GREYSCALE_PALETTE, 40, 14, 14, 15, 16, 8}, /* BW 40x21 */ - {BW40X21, 0, 40, 21, 14, 15, 16, 8}, + {BW40X21, GREYSCALE_PALETTE, 40, 21, 14, 15, 16, 8}, /* BW 40x28 */ - {BW40X28, 0, 40, 28, 12, 13, 14, 8}, + {BW40X28, GREYSCALE_PALETTE, 40, 28, 12, 13, 14, 8}, /* BW 40x43 */ - {BW40X43, 0, 40, 43, 7, 7, 8, 8}, + {BW40X43, GREYSCALE_PALETTE, 40, 43, 7, 7, 8, 8}, /* BW 40x50 */ - {BW40X50, 0, 40, 50, 7, 7, 8, 8}, + {BW40X50, GREYSCALE_PALETTE, 40, 50, 7, 7, 8, 8}, /* BW 40x60 */ - {BW40X60, 0, 40, 60, 7, 7, 8, 8}, + {BW40X60, GREYSCALE_PALETTE, 40, 60, 7, 7, 8, 8}, /* BW 80x14 */ - {BW80X14, 0, 80, 14, 14, 15, 16, 8}, + {BW80X14, GREYSCALE_PALETTE, 80, 14, 14, 15, 16, 8}, /* BW 80x21 */ - {BW80X21, 0, 80, 21, 14, 15, 16, 8}, + {BW80X21, GREYSCALE_PALETTE, 80, 21, 14, 15, 16, 8}, /* BW 80x28 */ - {BW80X28, 0, 80, 28, 12, 13, 14, 8}, + {BW80X28, GREYSCALE_PALETTE, 80, 28, 12, 13, 14, 8}, /* BW 80x43 */ - {BW80X43, 0, 80, 43, 7, 7, 8, 8}, + {BW80X43, GREYSCALE_PALETTE, 80, 43, 7, 7, 8, 8}, /* BW 80x50 */ - {BW80X50, 0, 80, 50, 7, 7, 8, 8}, + {BW80X50, GREYSCALE_PALETTE, 80, 50, 7, 7, 8, 8}, /* BW 80x60 */ - {BW80X60, 0, 80, 60, 7, 7, 8, 8}, + {BW80X60, GREYSCALE_PALETTE, 80, 60, 7, 7, 8, 8}, /* MONO 80x14 */ - {MONO14, 0, 80, 14, 14, 15, 16, 8}, + {MONO14, MONO_PALETTE, 80, 14, 14, 15, 16, 8}, /* MONO 80x21 */ - {MONO21, 0, 80, 21, 14, 15, 16, 8}, + {MONO21, MONO_PALETTE, 80, 21, 14, 15, 16, 8}, /* MONO 80x28 */ - {MONO28, 0, 80, 28, 12, 13, 14, 8}, + {MONO28, MONO_PALETTE, 80, 28, 12, 13, 14, 8}, /* MONO 80x43 */ - {MONO43, 0, 80, 43, 7, 7, 8, 8}, + {MONO43, MONO_PALETTE, 80, 43, 7, 7, 8, 8}, /* MONO 80x50 */ - {MONO50, 0, 80, 50, 7, 7, 8, 8}, + {MONO50, MONO_PALETTE, 80, 50, 7, 7, 8, 8}, /* MONO 80x60 */ - {MONO60, 0, 80, 60, 7, 7, 8, 8}, + {MONO60, MONO_PALETTE, 80, 60, 7, 7, 8, 8}, /* Magical C4350 Mode */ - {C4350, 1, 80, 50, 7, 7, 8, 8}, + {C4350, COLOUR_PALETTE, 80, 50, 7, 7, 8, 8}, }; unsigned char palettes[][16] = { + /* Mono */ + { 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 + }, /* Black and White */ - { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 + { 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x08, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f }, /* Colour */ - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, - 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f } }; -/* The default DAC table for the EGA and VGA 16 color modes. This table is - installed on startup. The values are taken from the output of 'scon -p - list'. */ -struct dac_colors dac_default64[] = { +struct dac_colors dac_default16[] = { {0, 0, 0}, {0, 0, 42}, {0, 42, 0}, {0, 42, 42}, - {42, 0, 0}, {42, 0, 42}, {42, 42, 0}, {42, 42, 42}, - {0, 0, 21}, {0, 0, 63}, {0, 42, 21}, {0, 42, 63}, - {42, 0, 21}, {42, 0, 63}, {42, 42, 21}, {42, 42, 63}, - {0, 21, 0}, {0, 21, 42}, {0, 63, 0}, {0, 63, 42}, - {42, 21, 0}, {42, 21, 42}, {42, 63, 0}, {42, 63, 42}, - {0, 21, 21}, {0, 21, 63}, {0, 63, 21}, {0, 63, 63}, - {42, 21, 21}, {42, 21, 63}, {42, 63, 21}, {42, 63, 63}, - {21, 0, 0}, {21, 0, 42}, {21, 42, 0}, {21, 42, 42}, - {63, 0, 0}, {63, 0, 42}, {63, 42, 0}, {63, 42, 42}, - {21, 0, 21}, {21, 0, 63}, {21, 42, 21}, {21, 42, 63}, - {63, 0, 21}, {63, 0, 63}, {63, 42, 21}, {63, 42, 63}, - {21, 21, 0}, {21, 21, 42}, {21, 63, 0}, {21, 63, 42}, - {63, 21, 0}, {63, 21, 42}, {63, 63, 0}, {63, 63, 42}, + {42, 0, 0}, {42, 0, 42}, {42, 21, 0}, {42, 42, 42}, {21, 21, 21}, {21, 21, 63}, {21, 63, 21}, {21, 63, 63}, {63, 21, 21}, {63, 21, 63}, {63, 63, 21}, {63, 63, 63} }; diff --git a/src/conio/x_cio.c b/src/conio/x_cio.c index e6ec2c5f5647dc5a5fcf88d5c0bf7303abbedb47..d0bf74e0a542430bf60c345f224f7bf32cf3d7d6 100644 --- a/src/conio/x_cio.c +++ b/src/conio/x_cio.c @@ -177,7 +177,7 @@ void x_gotoxy(int x, int y) void x_gettextinfo(struct text_info *info) { - info->currmode=VideoMode; + info->currmode=CurrMode; info->screenheight=DpyRows+1; info->screenwidth=DpyCols; info->curx=wherex();