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>
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
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.
@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
@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
@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
@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
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;
return result;
}
-static grub_uint8_t color_normal, color_highlight;
-
static void
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);
}
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 ();
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 ();
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);
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);
}
*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,
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);
}
.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
}
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;
& 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;
.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
};
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:
}
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)
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:
.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
};
}
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) {
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;
.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
#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;
.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
.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
.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
};
.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,
};
\f
.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)
{
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;
/* 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;
#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);
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)
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;