commit-grub
[Top][All Lists]
Advanced

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

[1778] 2008-08-05 Bean <address@hidden>


From: Bean
Subject: [1778] 2008-08-05 Bean <address@hidden>
Date: Tue, 05 Aug 2008 14:20:01 +0000

Revision: 1778
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1778
Author:   bean
Date:     2008-08-05 14:20:00 +0000 (Tue, 05 Aug 2008)

Log Message:
-----------
2008-08-05  Bean  <address@hidden>

        * util/console.c (grub_console_cur_color): New variable.
        (grub_console_standard_color): Likewise.
        (grub_console_normal_color): Likewise.
        (grub_console_highlight_color): Likewise.
        (color_map): Likewise.
        (use_color): Likewise.
        (NUM_COLORS): New macro.
        (grub_ncurses_setcolorstate): Handle color properly.
        (grub_ncurses_setcolor): Don't change color here, just remember the
        settings, color will be set in grub_ncurses_setcolorstate.
        (grub_ncurses_getcolor): New function.
        (grub_ncurses_init): Initialize color pairs.
        (grub_ncurses_term): New member grub_ncurses_getcolor.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/util/console.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2008-08-05 12:38:12 UTC (rev 1777)
+++ trunk/grub2/ChangeLog       2008-08-05 14:20:00 UTC (rev 1778)
@@ -1,3 +1,19 @@
+2008-08-05  Bean  <address@hidden>
+
+       * util/console.c (grub_console_cur_color): New variable.
+       (grub_console_standard_color): Likewise.
+       (grub_console_normal_color): Likewise.
+       (grub_console_highlight_color): Likewise.
+       (color_map): Likewise.
+       (use_color): Likewise.
+       (NUM_COLORS): New macro.
+       (grub_ncurses_setcolorstate): Handle color properly.
+       (grub_ncurses_setcolor): Don't change color here, just remember the
+       settings, color will be set in grub_ncurses_setcolorstate.
+       (grub_ncurses_getcolor): New function.
+       (grub_ncurses_init): Initialize color pairs.
+       (grub_ncurses_term): New member grub_ncurses_getcolor.
+
 2008-08-05  Colin D Bennett  <address@hidden>
  
        High resolution timer support.  Implemented for x86 CPUs using TSC.

Modified: trunk/grub2/util/console.c
===================================================================
--- trunk/grub2/util/console.c  2008-08-05 12:38:12 UTC (rev 1777)
+++ trunk/grub2/util/console.c  2008-08-05 14:20:00 UTC (rev 1778)
@@ -41,6 +41,28 @@
 
 static int grub_console_attr = A_NORMAL;
 
+grub_uint8_t grub_console_cur_color = 7;
+
+static grub_uint8_t grub_console_standard_color = 0x7;
+static grub_uint8_t grub_console_normal_color = 0x7;
+static grub_uint8_t grub_console_highlight_color = 0x70;
+
+#define NUM_COLORS     8
+
+static grub_uint8_t color_map[NUM_COLORS] =
+{
+  COLOR_BLACK,
+  COLOR_BLUE,
+  COLOR_GREEN,
+  COLOR_CYAN,
+  COLOR_RED,
+  COLOR_MAGENTA,
+  COLOR_YELLOW,
+  COLOR_WHITE
+};
+
+static int use_color;
+
 static void
 grub_ncurses_putchar (grub_uint32_t c)
 {
@@ -100,26 +122,48 @@
   switch (state) 
     {
     case GRUB_TERM_COLOR_STANDARD:
+      grub_console_cur_color = grub_console_standard_color;
       grub_console_attr = A_NORMAL;
       break;
     case GRUB_TERM_COLOR_NORMAL:
+      grub_console_cur_color = grub_console_normal_color;
       grub_console_attr = A_NORMAL;
       break;
     case GRUB_TERM_COLOR_HIGHLIGHT:
+      grub_console_cur_color = grub_console_highlight_color;
       grub_console_attr = A_STANDOUT;
       break;
     default:
       break;
     }
+
+  if (use_color)
+    {
+      grub_uint8_t fg, bg;
+
+      fg = (grub_console_cur_color & 7);
+      bg = (grub_console_cur_color >> 4) & 7;
+
+      grub_console_attr = (grub_console_cur_color & 8) ? A_BOLD : A_NORMAL;
+      color_set ((bg << 3) + fg, 0);
+    }
 }
 
 /* XXX: This function is never called.  */
 static void
 grub_ncurses_setcolor (grub_uint8_t normal_color, grub_uint8_t highlight_color)
 {
-  color_set (normal_color << 8 | highlight_color, 0);
+  grub_console_normal_color = normal_color;
+  grub_console_highlight_color = highlight_color;
 }
 
+static void
+grub_ncurses_getcolor (grub_uint8_t *normal_color, grub_uint8_t 
*highlight_color)
+{
+  *normal_color = grub_console_normal_color;
+  *highlight_color = grub_console_highlight_color;
+}
+
 static int saved_char = ERR;
 
 static int
@@ -272,8 +316,24 @@
   nonl ();
   intrflush (stdscr, FALSE);
   keypad (stdscr, TRUE);
-  start_color ();
 
+  if (has_colors ())
+    {
+      start_color ();
+
+      if ((COLORS >= NUM_COLORS) && (COLOR_PAIRS >= NUM_COLORS * NUM_COLORS))
+        {
+          int i, j, n;
+
+          n = 0;
+          for (i = 0; i < NUM_COLORS; i++)
+            for (j = 0; j < NUM_COLORS; j++)
+              init_pair(n++, color_map[j], color_map[i]);
+
+          use_color = 1;
+        }
+    }
+
   return 0;
 }
 
@@ -300,6 +360,7 @@
     .cls = grub_ncurses_cls,
     .setcolorstate = grub_ncurses_setcolorstate,
     .setcolor = grub_ncurses_setcolor,
+    .getcolor = grub_ncurses_getcolor,
     .setcursor = grub_ncurses_setcursor,
     .refresh = grub_ncurses_refresh,
     .flags = 0,






reply via email to

[Prev in Thread] Current Thread [Next in Thread]