[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

First strike !



The thing that itches me the most :)

Here is patch to restore default palette from kernel when exiting X.
This code detects if the palette is all black. In this case it sets
default palette.

I have inserted and attached the diff file because I dont know if this
mailing list filters attachements.

Guido, please add it to your code if you like it :)

--
Dominik Behr

--- newport_cmap.c.old	Fri Nov 23 11:50:45 2001
+++ newport_cmap.c	Mon Mar  4 01:56:34 2002
@@ -33,11 +33,45 @@
 	}
 }
 
+/* stolen from kernel :) */
+static unsigned char color_table[] = { 0, 4, 2, 6, 1, 5, 3, 7,
+				       8,12,10,14, 9,13,11,15 };
+ 
+/* the default colour table, for VGA+ colour systems */
+static int default_red[] = {0x00,0xaa,0x00,0xaa,0x00,0xaa,0x00,0xaa,
+    0x55,0xff,0x55,0xff,0x55,0xff,0x55,0xff};
+static int default_grn[] = {0x00,0x00,0xaa,0x55,0x00,0x00,0xaa,0xaa,
+    0x55,0x55,0xff,0xff,0x55,0x55,0xff,0xff};
+static int default_blu[] = {0x00,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,
+    0x55,0x55,0x55,0x55,0xff,0xff,0xff,0xff};
+
 /* restore the default colormap */
 void NewportRestorePalette(ScrnInfoPtr pScrn)
 {
 	int i;
+	int nSum;
 	NewportPtr pNewport = NEWPORTPTR(pScrn);
+	
+	for (nSum = 0, i = 0; i < 16; i++) 
+	    {
+	     nSum += pNewport->txt_colormap[i].red;
+	     nSum += pNewport->txt_colormap[i].green;
+	     nSum += pNewport->txt_colormap[i].blue;	     
+	    }
+	if (!nSum)
+	   {
+	    /* 
+	      it seems that first 16 entries in saved palette are 0
+	      this is bad because when we'll return to the console we will see black screen
+	      so we will just restore default palette 	       
+	    */
+	    for (i = 0; i < 16; i++)
+	        {
+		 pNewport->txt_colormap[color_table[i]].red = default_red[i];
+		 pNewport->txt_colormap[color_table[i]].green = default_grn[i];
+		 pNewport->txt_colormap[color_table[i]].blue = default_blu[i];
+	        }
+	   }    
 	
 	for(i = 0; i < 256; i++) {
 		NewportCmapSetRGB(pNewport->pNewportRegs, i, pNewport->txt_colormap[i]); 

Attachment: console_restore_fix.diff
Description: Binary data


Reply to: