grub2/0133-Make-color-variables-global-instead-of-it-being-per-.patch
Peter Jones f74b50e380 Rebase to upstream, fix a pile of bugs. The usual.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-06-12 15:37:08 -04:00

547 lines
21 KiB
Diff
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 4313186239f13535bbf6c7b7a2a80cd1b8a832d2 Mon Sep 17 00:00:00 2001
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Date: Mon, 21 Jan 2013 17:53:41 +0100
Subject: [PATCH 133/482] Make color variables global instead of it
being per-terminal.
---
ChangeLog | 6 +++---
docs/grub.texi | 33 +++++++++++++++++++++++++++++++++
grub-core/kern/term.c | 4 ++++
grub-core/normal/color.c | 9 ++-------
grub-core/normal/menu_text.c | 24 +++++++++++++++---------
grub-core/term/arc/console.c | 2 --
grub-core/term/efi/console.c | 9 ++++-----
grub-core/term/emu/console.c | 4 ++--
grub-core/term/gfxterm.c | 8 +++-----
grub-core/term/i386/pc/console.c | 9 ++++-----
grub-core/term/i386/pc/vga_text.c | 10 ++++------
grub-core/term/ieee1275/console.c | 2 --
grub-core/term/morse.c | 2 --
grub-core/term/serial.c | 2 --
grub-core/term/spkmodem.c | 2 --
grub-core/term/terminfo.c | 8 ++++----
include/grub/term.h | 26 ++++----------------------
17 files changed, 82 insertions(+), 78 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 35267f5..32b891a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,11 +1,11 @@
2013-01-21 Vladimir Serbinenko <phcoder@gmail.com>
- * grub-core/commands/ls.c (grub_ls_print_devices): Add missing
- asterisk.
+ Make color variables global instead of it being per-terminal.
2013-01-21 Vladimir Serbinenko <phcoder@gmail.com>
- Make color variables global instead of it being per-terminal.
+ * grub-core/commands/ls.c (grub_ls_print_devices): Add missing
+ asterisk.
2013-01-21 Colin Watson <cjwatson@ubuntu.com>
diff --git a/docs/grub.texi b/docs/grub.texi
index b177111..9941b47 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -2776,6 +2776,33 @@ those colors. Each color must be a name from the following list:
The default is @samp{white/black}.
+The color support support varies from terminal to terminal.
+
+@samp{morse} has no color support at all.
+
+@samp{mda_text} color support is limited to highlighting by
+black/white reversal.
+
+@samp{console} on ARC and IEEE1275, @samp{serial_*} and
+@samp{spkmodem} are governed by terminfo and support
+only 8 colors if in modes @samp{vt100-color}, @samp{arc}
+(default for console on ARC), @samp{ieee1275} (default
+for console on IEEE1275). When in mode @samp{vt100}
+then the color support is limited to highlighting by black/white
+reversal. When in mode @samp{dumb} there is no color support.
+
+@samp{console} on EMU supports 8 colors.
+
+When console supports no colors this setting is ignored.
+When console supports 8 colors, then the colors from the
+second half of the previous list are mapped to the
+matching colors of first half.
+
+@samp{console} on EFI and BIOS and @samp{vga_text} support all 16 colors.
+
+@samp{gfxterm} supports all 16 colors and would be theoretically extendable
+to support whole rgb24 palette but currently there is no compelling reason
+to go beyond the current 16 colors.
@node debug
@subsection debug
@@ -4355,6 +4382,8 @@ AT keyboard support allows keyboard layout remapping and support for keys not
available through firmware. It isn't needed for normal operation except
baremetal ports.
+Speaker allows morse and spkmodem communication.
+
USB support provides benefits similar to ATA (for USB disks) or AT (for USB
keyboards). In addition it allows USBserial.
@@ -4376,6 +4405,7 @@ and mips-qemu_mips can use only memory up to first hole.
@item network @tab yes (*) @tab no @tab no @tab no
@item ATA/AHCI @tab yes @tab yes @tab yes @tab yes
@item AT keyboard @tab yes @tab yes @tab yes @tab yes
+@item Speaker @tab yes @tab yes @tab yes @tab yes
@item USB @tab yes @tab yes @tab yes @tab yes
@item chainloader @tab local @tab yes @tab yes @tab no
@item cpuid @tab partial @tab partial @tab partial @tab partial
@@ -4393,6 +4423,7 @@ and mips-qemu_mips can use only memory up to first hole.
@item network @tab yes @tab yes @tab yes @tab yes
@item ATA/AHCI @tab yes @tab yes @tab yes @tab no
@item AT keyboard @tab yes @tab yes @tab yes @tab no
+@item Speaker @tab yes @tab yes @tab yes @tab no
@item USB @tab yes @tab yes @tab yes @tab no
@item chainloader @tab local @tab local @tab no @tab local
@item cpuid @tab partial @tab partial @tab partial @tab no
@@ -4410,6 +4441,7 @@ and mips-qemu_mips can use only memory up to first hole.
@item network @tab no @tab yes (*) @tab yes @tab no
@item ATA/AHCI @tab yes @tab no @tab no @tab no
@item AT keyboard @tab yes @tab no @tab no @tab no
+@item Speaker @tab no @tab no @tab no @tab no
@item USB @tab yes @tab no @tab no @tab no
@item chainloader @tab yes @tab no @tab no @tab no
@item cpuid @tab no @tab no @tab no @tab no
@@ -4427,6 +4459,7 @@ and mips-qemu_mips can use only memory up to first hole.
@item network @tab no @tab yes
@item ATA/AHCI @tab yes @tab no
@item AT keyboard @tab yes @tab no
+@item Speaker @tab no @tab no
@item USB @tab N/A @tab yes
@item chainloader @tab yes @tab no
@item cpuid @tab no @tab no
diff --git a/grub-core/kern/term.c b/grub-core/kern/term.c
index 5014caf..34096bc 100644
--- a/grub-core/kern/term.c
+++ b/grub-core/kern/term.c
@@ -28,6 +28,10 @@ struct grub_term_input *grub_term_inputs_disabled;
struct grub_term_output *grub_term_outputs;
struct grub_term_input *grub_term_inputs;
+/* Current color state. */
+grub_uint8_t grub_term_normal_color;
+grub_uint8_t grub_term_highlight_color;
+
void (*grub_term_poll_usb) (void) = NULL;
void (*grub_net_poll_cards_idle) (void) = NULL;
diff --git a/grub-core/normal/color.c b/grub-core/normal/color.c
index 06f1a87..c265423 100644
--- a/grub-core/normal/color.c
+++ b/grub-core/normal/color.c
@@ -106,8 +106,6 @@ free_and_return:
return result;
}
-static grub_uint8_t color_normal, color_highlight;
-
static void
set_colors (void)
{
@@ -115,9 +113,6 @@ set_colors (void)
FOR_ACTIVE_TERM_OUTPUTS(term)
{
- /* Reloads terminal `normal' and `highlight' colors. */
- grub_term_setcolor (term, color_normal, color_highlight);
-
/* Propagates `normal' color to terminal current color. */
grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL);
}
@@ -128,7 +123,7 @@ char *
grub_env_write_color_normal (struct grub_env_var *var __attribute__ ((unused)),
const char *val)
{
- if (grub_parse_color_name_pair (&color_normal, val))
+ if (grub_parse_color_name_pair (&grub_term_normal_color, val))
return NULL;
set_colors ();
@@ -141,7 +136,7 @@ char *
grub_env_write_color_highlight (struct grub_env_var *var __attribute__ ((unused)),
const char *val)
{
- if (grub_parse_color_name_pair (&color_highlight, val))
+ if (grub_parse_color_name_pair (&grub_term_highlight_color, val))
return NULL;
set_colors ();
diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c
index 1687c28..80a7cd9 100644
--- a/grub-core/normal/menu_text.c
+++ b/grub-core/normal/menu_text.c
@@ -225,8 +225,10 @@ print_entry (int y, int highlight, grub_menu_entry_t entry,
return;
}
- grub_term_getcolor (term, &old_color_normal, &old_color_highlight);
- grub_term_setcolor (term, grub_color_menu_normal, grub_color_menu_highlight);
+ old_color_normal = grub_term_normal_color;
+ old_color_highlight = grub_term_highlight_color;
+ grub_term_normal_color = grub_color_menu_normal;
+ grub_term_highlight_color = grub_color_menu_highlight;
grub_term_setcolorstate (term, highlight
? GRUB_TERM_COLOR_HIGHLIGHT
: GRUB_TERM_COLOR_NORMAL);
@@ -293,7 +295,9 @@ print_entry (int y, int highlight, grub_menu_entry_t entry,
grub_term_gotoxy (term, grub_term_cursor_x (term), y);
- grub_term_setcolor (term, old_color_normal, old_color_highlight);
+ grub_term_normal_color = old_color_normal;
+ grub_term_highlight_color = old_color_highlight;
+
grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL);
grub_free (unicode_title);
}
@@ -349,11 +353,11 @@ grub_menu_init_page (int nested, int edit, int *num_entries,
*num_entries = grub_term_height (term) - GRUB_TERM_TOP_BORDER_Y
- (print_message (nested, edit, term, 1) + 3) - 2;
- grub_term_getcolor (term, &old_color_normal, &old_color_highlight);
-
/* By default, use the same colors for the menu. */
- grub_color_menu_normal = old_color_normal;
- grub_color_menu_highlight = old_color_highlight;
+ old_color_normal = grub_term_normal_color;
+ old_color_highlight = grub_term_highlight_color;
+ grub_color_menu_normal = grub_term_normal_color;
+ grub_color_menu_highlight = grub_color_menu_highlight;
/* Then give user a chance to replace them. */
grub_parse_color_name_pair (&grub_color_menu_normal,
@@ -362,9 +366,11 @@ grub_menu_init_page (int nested, int edit, int *num_entries,
grub_env_get ("menu_color_highlight"));
grub_normal_init_page (term);
- grub_term_setcolor (term, grub_color_menu_normal, grub_color_menu_highlight);
+ grub_term_normal_color = grub_color_menu_normal;
+ grub_term_highlight_color = grub_color_menu_highlight;
draw_border (term, *num_entries);
- grub_term_setcolor (term, old_color_normal, old_color_highlight);
+ grub_term_normal_color = old_color_normal;
+ grub_term_highlight_color = old_color_highlight;
print_message (nested, edit, term, 0);
}
diff --git a/grub-core/term/arc/console.c b/grub-core/term/arc/console.c
index 45ff267..0ccaebe 100644
--- a/grub-core/term/arc/console.c
+++ b/grub-core/term/arc/console.c
@@ -102,8 +102,6 @@ static struct grub_term_output grub_console_term_output =
.setcursor = grub_terminfo_setcursor,
.flags = GRUB_TERM_CODE_TYPE_ASCII,
.data = &grub_console_terminfo_output,
- .normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR,
- .highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR,
};
void
diff --git a/grub-core/term/efi/console.c b/grub-core/term/efi/console.c
index e57a815..2d6c6f9 100644
--- a/grub-core/term/efi/console.c
+++ b/grub-core/term/efi/console.c
@@ -192,7 +192,8 @@ grub_console_cls (struct grub_term_output *term __attribute__ ((unused)))
}
static void
-grub_console_setcolorstate (struct grub_term_output *term,
+grub_console_setcolorstate (struct grub_term_output *term
+ __attribute__ ((unused)),
grub_term_color_state state)
{
grub_efi_simple_text_output_interface_t *o;
@@ -208,10 +209,10 @@ grub_console_setcolorstate (struct grub_term_output *term,
& 0x7f);
break;
case GRUB_TERM_COLOR_NORMAL:
- efi_call_2 (o->set_attributes, o, term->normal_color & 0x7f);
+ efi_call_2 (o->set_attributes, o, grub_term_normal_color & 0x7f);
break;
case GRUB_TERM_COLOR_HIGHLIGHT:
- efi_call_2 (o->set_attributes, o, term->highlight_color & 0x7f);
+ efi_call_2 (o->set_attributes, o, grub_term_highlight_color & 0x7f);
break;
default:
break;
@@ -265,8 +266,6 @@ static struct grub_term_output grub_console_term_output =
.cls = grub_console_cls,
.setcolorstate = grub_console_setcolorstate,
.setcursor = grub_console_setcursor,
- .normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR,
- .highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR,
.flags = GRUB_TERM_CODE_TYPE_VISUAL_GLYPHS
};
diff --git a/grub-core/term/emu/console.c b/grub-core/term/emu/console.c
index 55e3a6b..5bd5db1 100644
--- a/grub-core/term/emu/console.c
+++ b/grub-core/term/emu/console.c
@@ -82,11 +82,11 @@ grub_ncurses_setcolorstate (struct grub_term_output *term,
grub_console_attr = A_NORMAL;
break;
case GRUB_TERM_COLOR_NORMAL:
- grub_console_cur_color = term->normal_color;
+ grub_console_cur_color = grub_term_normal_color;
grub_console_attr = A_NORMAL;
break;
case GRUB_TERM_COLOR_HIGHLIGHT:
- grub_console_cur_color = term->highlight_color;
+ grub_console_cur_color = grub_term_highlight_color;
grub_console_attr = A_STANDOUT;
break;
default:
diff --git a/grub-core/term/gfxterm.c b/grub-core/term/gfxterm.c
index 12567d1..a168e01 100644
--- a/grub-core/term/gfxterm.c
+++ b/grub-core/term/gfxterm.c
@@ -1036,7 +1036,7 @@ grub_gfxterm_cls (struct grub_term_output *term)
}
static void
-grub_virtual_screen_setcolorstate (struct grub_term_output *term,
+grub_virtual_screen_setcolorstate (struct grub_term_output *term __attribute__ ((unused)),
grub_term_color_state state)
{
switch (state)
@@ -1046,11 +1046,11 @@ grub_virtual_screen_setcolorstate (struct grub_term_output *term,
break;
case GRUB_TERM_COLOR_NORMAL:
- virtual_screen.term_color = term->normal_color;
+ virtual_screen.term_color = grub_term_normal_color;
break;
case GRUB_TERM_COLOR_HIGHLIGHT:
- virtual_screen.term_color = term->highlight_color;
+ virtual_screen.term_color = grub_term_highlight_color;
break;
default:
@@ -1246,8 +1246,6 @@ static struct grub_term_output grub_video_term =
.refresh = grub_gfxterm_refresh,
.fullscreen = grub_gfxterm_fullscreen,
.flags = GRUB_TERM_CODE_TYPE_VISUAL_GLYPHS,
- .normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR,
- .highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR,
.next = 0
};
diff --git a/grub-core/term/i386/pc/console.c b/grub-core/term/i386/pc/console.c
index a681435..2aa1943 100644
--- a/grub-core/term/i386/pc/console.c
+++ b/grub-core/term/i386/pc/console.c
@@ -259,7 +259,8 @@ grub_console_getwh (struct grub_term_output *term __attribute__ ((unused)))
}
static void
-grub_console_setcolorstate (struct grub_term_output *term,
+grub_console_setcolorstate (struct grub_term_output *term
+ __attribute__ ((unused)),
grub_term_color_state state)
{
switch (state) {
@@ -267,10 +268,10 @@ grub_console_setcolorstate (struct grub_term_output *term,
grub_console_cur_color = GRUB_TERM_DEFAULT_STANDARD_COLOR & 0x7f;
break;
case GRUB_TERM_COLOR_NORMAL:
- grub_console_cur_color = term->normal_color & 0x7f;
+ grub_console_cur_color = grub_term_normal_color & 0x7f;
break;
case GRUB_TERM_COLOR_HIGHLIGHT:
- grub_console_cur_color = term->highlight_color & 0x7f;
+ grub_console_cur_color = grub_term_highlight_color & 0x7f;
break;
default:
break;
@@ -295,8 +296,6 @@ static struct grub_term_output grub_console_term_output =
.setcolorstate = grub_console_setcolorstate,
.setcursor = grub_console_setcursor,
.flags = GRUB_TERM_CODE_TYPE_CP437,
- .normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR,
- .highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR,
};
void
diff --git a/grub-core/term/i386/pc/vga_text.c b/grub-core/term/i386/pc/vga_text.c
index 74c155c..e976aec 100644
--- a/grub-core/term/i386/pc/vga_text.c
+++ b/grub-core/term/i386/pc/vga_text.c
@@ -209,18 +209,18 @@ grub_vga_text_getwh (struct grub_term_output *term __attribute__ ((unused)))
#ifndef MODE_MDA
static void
-grub_vga_text_setcolorstate (struct grub_term_output *term,
- grub_term_color_state state)
+grub_vga_text_setcolorstate (struct grub_term_output *term __attribute__ ((unused)),
+ grub_term_color_state state)
{
switch (state) {
case GRUB_TERM_COLOR_STANDARD:
cur_color = GRUB_TERM_DEFAULT_STANDARD_COLOR & 0x7f;
break;
case GRUB_TERM_COLOR_NORMAL:
- cur_color = term->normal_color & 0x7f;
+ cur_color = grub_term_normal_color & 0x7f;
break;
case GRUB_TERM_COLOR_HIGHLIGHT:
- cur_color = term->highlight_color & 0x7f;
+ cur_color = grub_term_highlight_color & 0x7f;
break;
default:
break;
@@ -265,8 +265,6 @@ static struct grub_term_output grub_vga_text_term =
.setcolorstate = grub_vga_text_setcolorstate,
.setcursor = grub_vga_text_setcursor,
.flags = GRUB_TERM_CODE_TYPE_CP437,
- .normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR,
- .highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR,
};
#ifdef MODE_MDA
diff --git a/grub-core/term/ieee1275/console.c b/grub-core/term/ieee1275/console.c
index 93b81f4..3a80864 100644
--- a/grub-core/term/ieee1275/console.c
+++ b/grub-core/term/ieee1275/console.c
@@ -229,8 +229,6 @@ static struct grub_term_output grub_console_term_output =
.setcursor = grub_console_setcursor,
.flags = GRUB_TERM_CODE_TYPE_ASCII,
.data = &grub_console_terminfo_output,
- .normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR,
- .highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR,
};
void
diff --git a/grub-core/term/morse.c b/grub-core/term/morse.c
index 3d6c650..0fdc3b4 100644
--- a/grub-core/term/morse.c
+++ b/grub-core/term/morse.c
@@ -115,8 +115,6 @@ static struct grub_term_output grub_audio_term_output =
.cls = (void *) dummy,
.setcolorstate = (void *) dummy,
.setcursor = (void *) dummy,
- .normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR,
- .highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR,
.flags = GRUB_TERM_CODE_TYPE_ASCII | GRUB_TERM_DUMB
};
diff --git a/grub-core/term/serial.c b/grub-core/term/serial.c
index e1469e5..cfcfe84 100644
--- a/grub-core/term/serial.c
+++ b/grub-core/term/serial.c
@@ -121,8 +121,6 @@ static struct grub_term_output grub_serial_term_output =
.setcursor = grub_terminfo_setcursor,
.flags = GRUB_TERM_CODE_TYPE_ASCII,
.data = &grub_serial_terminfo_output,
- .normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR,
- .highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR,
};
diff --git a/grub-core/term/spkmodem.c b/grub-core/term/spkmodem.c
index b6e7a04..5bff429 100644
--- a/grub-core/term/spkmodem.c
+++ b/grub-core/term/spkmodem.c
@@ -127,8 +127,6 @@ static struct grub_term_output grub_spkmodem_term_output =
.setcursor = grub_terminfo_setcursor,
.flags = GRUB_TERM_CODE_TYPE_ASCII,
.data = &grub_spkmodem_terminfo_output,
- .normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR,
- .highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR,
};
GRUB_MOD_INIT (spkmodem)
diff --git a/grub-core/term/terminfo.c b/grub-core/term/terminfo.c
index a0f8d18..eb0ef00 100644
--- a/grub-core/term/terminfo.c
+++ b/grub-core/term/terminfo.c
@@ -303,12 +303,12 @@ grub_terminfo_setcolorstate (struct grub_term_output *term,
{
case GRUB_TERM_COLOR_STANDARD:
case GRUB_TERM_COLOR_NORMAL:
- fg = term->normal_color & 0x0f;
- bg = term->normal_color >> 4;
+ fg = grub_term_normal_color & 0x0f;
+ bg = grub_term_normal_color >> 4;
break;
case GRUB_TERM_COLOR_HIGHLIGHT:
- fg = term->highlight_color & 0x0f;
- bg = term->highlight_color >> 4;
+ fg = grub_term_highlight_color & 0x0f;
+ bg = grub_term_highlight_color >> 4;
break;
default:
return;
diff --git a/include/grub/term.h b/include/grub/term.h
index 39c3d5a..84f5766 100644
--- a/include/grub/term.h
+++ b/include/grub/term.h
@@ -221,10 +221,6 @@ struct grub_term_output
/* The feature flags defined above. */
grub_uint32_t flags;
- /* Current color state. */
- grub_uint8_t normal_color;
- grub_uint8_t highlight_color;
-
void *data;
};
typedef struct grub_term_output *grub_term_output_t;
@@ -233,6 +229,10 @@ typedef struct grub_term_output *grub_term_output_t;
#define GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR 0x70
#define GRUB_TERM_DEFAULT_STANDARD_COLOR 0x07
+/* Current color state. */
+extern grub_uint8_t EXPORT_VAR(grub_term_normal_color);
+extern grub_uint8_t EXPORT_VAR(grub_term_highlight_color);
+
extern struct grub_term_output *EXPORT_VAR(grub_term_outputs_disabled);
extern struct grub_term_input *EXPORT_VAR(grub_term_inputs_disabled);
extern struct grub_term_output *EXPORT_VAR(grub_term_outputs);
@@ -391,16 +391,6 @@ grub_setcolorstate (grub_term_color_state state)
grub_term_setcolorstate (term, state);
}
-/* Set the normal color and the highlight color. The format of each
- color is VGA's. */
-static inline void
-grub_term_setcolor (struct grub_term_output *term,
- grub_uint8_t normal_color, grub_uint8_t highlight_color)
-{
- term->normal_color = normal_color;
- term->highlight_color = highlight_color;
-}
-
/* Turn on/off the cursor. */
static inline void
grub_term_setcursor (struct grub_term_output *term, int on)
@@ -460,14 +450,6 @@ grub_term_getcharwidth (struct grub_term_output *term,
return 1;
}
-static inline void
-grub_term_getcolor (struct grub_term_output *term,
- grub_uint8_t *normal_color, grub_uint8_t *highlight_color)
-{
- *normal_color = term->normal_color;
- *highlight_color = term->highlight_color;
-}
-
struct grub_term_autoload
{
struct grub_term_autoload *next;
--
1.8.2.1