Index: plplot-5.9.7/drivers/linuxvga.c =================================================================== --- plplot-5.9.7.orig/drivers/linuxvga.c 2011-01-30 19:15:09.000000000 +0100 +++ plplot-5.9.7/drivers/linuxvga.c 2011-01-30 19:17:08.000000000 +0100 @@ -39,8 +39,8 @@ /* INDENT ON */ -static PLINT vgax = 639; -static PLINT vgay = 479; +static PLINT vgax = 319; +static PLINT vgay = 239; /* A flag to tell us whether we are in text or graphics mode */ @@ -53,6 +53,7 @@ static int mode = TEXT_MODE; static int col = 1; static int totcol = 16; +static int vgacol = 0; #define CLEAN 0 #define DIRTY 1 @@ -95,7 +96,7 @@ /* What kind of VGA mode one wants is set up here. * It can be easyly made interactive! */ - mode = G640x480x16; /* See for a list */ + mode = G320x240x16M32; /* See for a list */ if ( vga_hasmode( mode ) ) vga_setmode( mode ); else @@ -111,7 +112,7 @@ totcol = vga_getcolors(); - plP_setpxl( 2.5, 2.5 ); /* My best guess. Seems to work okay. */ + plP_setpxl( 1.0, 1.0 ); plP_setphy( 0, vgax, 0, vgay ); } @@ -163,6 +164,7 @@ /* vga_setmode(mode); */ vga_clear(); /* just clean it */ + vga_setcolor(vgacol); /* restore color (reset by vga_clear()) */ page_state = CLEAN; } @@ -202,24 +204,34 @@ void plD_state_vga( PLStream *pls, PLINT op ) { + int r, g, b; + switch ( op ) { case PLSTATE_WIDTH: break; case PLSTATE_COLOR0: - if ( pls->color ) + if ( !pls->color ) { - /* Maybe it would be wiser to use a set of 16 relevant colors only - * and just fix it to black if col is exceeded 16. */ - - col = ( pls->icol0 ) % totcol; /* Color modulo # of colors - * avail */ - vga_setcolor( col ); + r = g = b = pls->icol0 ? 0xff : 0; } - break; - + else + { + r = pls->curcolor.r, g = pls->curcolor.g, b = pls->curcolor.b; + } + vgacol = vga_setrgbcolor (r, g, b); + break; case PLSTATE_COLOR1: + if ( !pls->color ) + { + r = g = b = pls->curcolor.r; + } + else + { + r = pls->curcolor.r, g = pls->curcolor.g, b = pls->curcolor.b; + } + vgacol = vga_setrgbcolor( r, g, b ); break; } }