diff --git a/include/grub/i386/pc/console.h b/include/grub/i386/pc/console.h index 2a74d152c..b677bb886 100644 --- a/include/grub/i386/pc/console.h +++ b/include/grub/i386/pc/console.h @@ -46,6 +46,7 @@ grub_uint16_t grub_console_getxy (void); void grub_console_gotoxy (grub_uint8_t x, grub_uint8_t y); void grub_console_cls (void); void grub_console_setcursor (int on); +void grub_console_putchar (const struct grub_unicode_glyph *c); /* Initialize the console system. */ void grub_console_init (void); diff --git a/include/grub/i386/vga_common.h b/include/grub/i386/vga_common.h index 19f14ebed..7df2b9e9e 100644 --- a/include/grub/i386/vga_common.h +++ b/include/grub/i386/vga_common.h @@ -25,18 +25,9 @@ extern grub_uint8_t grub_console_cur_color; -void -grub_console_putchar (const struct grub_unicode_glyph *c); -grub_ssize_t -grub_console_getcharwidth (const struct grub_unicode_glyph *c); grub_uint16_t grub_console_getwh (void); void grub_console_setcolorstate (grub_term_color_state state); void grub_console_setcolor (grub_uint8_t normal_color, grub_uint8_t highlight_color); void grub_console_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_color); -/* Implemented in both kern/i386/pc/startup.S and vga_text.c; this symbol - is not exported, so there's no collision, but vga_common.c expects this - prototype to be the same. */ -void grub_console_real_putchar (int c); - #endif /* ! GRUB_VGA_COMMON_CPU_HEADER */ diff --git a/kern/i386/pc/startup.S b/kern/i386/pc/startup.S index 23f3f398e..c12dfbb57 100644 --- a/kern/i386/pc/startup.S +++ b/kern/i386/pc/startup.S @@ -1064,7 +1064,7 @@ xsmap: /* - * void grub_console_real_putchar (int c) + * void grub_console_putchar (const struct grub_unicode_glyph *c) * * Put the character C on the console. Because GRUB wants to write a * character with an attribute, this implementation is a bit tricky. @@ -1077,8 +1077,9 @@ xsmap: * get the height of the screen, and the TELETYPE OUTPUT BIOS call doesn't * support setting a background attribute. */ -FUNCTION(grub_console_real_putchar) - movl %eax, %edx +FUNCTION(grub_console_putchar) + /* Retrieve the base character. */ + movl 0(%eax), %edx pusha movb EXT_C(grub_console_cur_color), %bl diff --git a/term/i386/pc/vga_text.c b/term/i386/pc/vga_text.c index 379eb3579..3f352afb4 100644 --- a/term/i386/pc/vga_text.c +++ b/term/i386/pc/vga_text.c @@ -83,10 +83,10 @@ inc_x (void) grub_curr_x++; } -void -grub_console_real_putchar (int c) +static void +grub_vga_text_putchar (const struct grub_unicode_glyph *c) { - switch (c) + switch (c->base) { case '\b': if (grub_curr_x != 0) @@ -99,8 +99,8 @@ grub_console_real_putchar (int c) grub_curr_x = 0; break; default: - screen_write_char (grub_curr_x, - grub_curr_y, c | (grub_console_cur_color << 8)); + screen_write_char (grub_curr_x, grub_curr_y, + c->base | (grub_console_cur_color << 8)); inc_x (); } @@ -154,7 +154,7 @@ static struct grub_term_output grub_vga_text_term = .name = "vga_text", .init = grub_vga_text_init_fini, .fini = grub_vga_text_init_fini, - .putchar = grub_console_putchar, + .putchar = grub_vga_text_putchar, .getwh = grub_console_getwh, .getxy = grub_vga_text_getxy, .gotoxy = grub_vga_text_gotoxy, diff --git a/term/i386/vga_common.c b/term/i386/vga_common.c index f88dbb04e..894c5d911 100644 --- a/term/i386/vga_common.c +++ b/term/i386/vga_common.c @@ -25,12 +25,6 @@ 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; -void -grub_console_putchar (const struct grub_unicode_glyph *c) -{ - grub_console_real_putchar (c->base); -} - grub_uint16_t grub_console_getwh (void) {