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 via email to