=== modified file 'ChangeLog' --- ChangeLog 2009-12-19 00:05:41 +0000 +++ ChangeLog 2009-12-19 01:27:34 +0000 @@ -1,5 +1,18 @@ 2009-12-19 Carles Pina i Estany + * include/grub/normal.h (utf8_to_ucs4): New declaration. + (grub_print_ucs4): Likewise. + (getstringwidth): Likewise. + * normal/main.c (grub_normal_init_page): Gettextize version string. + * normal/menu_text.c (utf8_to_ucs4): New declaration. + (getstringwidth): Remove `static' qualifier (now used in + normal/main.c). Use `utf8_to_ucs4'. + (grub_print_ucs4): Remove `static' qualifer (now used in + normal/main.c). + * po/POTFILES: Add normal/main.c. + +2009-12-19 Carles Pina i Estany + * normal/menu_text.c (STANDARD_MARGIN): New macro. (print_message_indented): Add `margin_left' and `margin_right' parameters. === modified file 'include/grub/normal.h' --- include/grub/normal.h 2009-08-24 23:55:06 +0000 +++ include/grub/normal.h 2009-12-19 01:21:13 +0000 @@ -73,6 +73,12 @@ void grub_parse_color_name_pair (grub_ui /* Defined in `menu_text.c'. */ void grub_wait_after_message (void); +int utf8_to_ucs4 (const char *msg, grub_uint32_t **unicode_msg, + grub_uint32_t **last_position); +void grub_print_ucs4 (const grub_uint32_t * str, + const grub_uint32_t * last_position); +grub_ssize_t getstringwidth (grub_uint32_t * str, + const grub_uint32_t * last_position); /* Defined in `handler.c'. */ void read_handler_list (void); === modified file 'normal/main.c' --- normal/main.c 2009-12-08 00:08:52 +0000 +++ normal/main.c 2009-12-19 01:36:39 +0000 @@ -385,22 +385,31 @@ read_config_file (const char *config) void grub_normal_init_page (void) { - grub_uint8_t width, margin; + grub_cls (); + const char *msg = _("GNU GRUB version %s"); -#define TITLE ("GNU GRUB version " PACKAGE_VERSION) + char *msg_formatted = grub_malloc (grub_strlen(msg) + grub_strlen(PACKAGE_VERSION)); - width = grub_getwh () >> 8; - margin = (width - (sizeof(TITLE) + 7)) / 2; + grub_sprintf (msg_formatted, msg, PACKAGE_VERSION); - grub_cls (); - grub_putchar ('\n'); + grub_uint32_t *unicode_msg; + grub_uint32_t *last_position; + + int msg_len; - while (margin--) - grub_putchar (' '); + msg_len = utf8_to_ucs4 (msg_formatted, &unicode_msg, &last_position); + + if (msg_len < 0) + { + return; + } - grub_printf ("%s\n\n", TITLE); + int posx = getstringwidth (unicode_msg, last_position); + posx = (GRUB_TERM_WIDTH - posx) / 2; + grub_gotoxy (posx, 1); -#undef TITLE + grub_print_ucs4 (unicode_msg, last_position); + grub_printf("\n\n"); } static int reader_nested; === modified file 'normal/menu_text.c' --- normal/menu_text.c 2009-12-19 00:05:41 +0000 +++ normal/menu_text.c 2009-12-19 01:20:58 +0000 @@ -55,7 +55,7 @@ print_spaces (int number_spaces) grub_putchar (' '); } -static void +void grub_print_ucs4 (const grub_uint32_t * str, const grub_uint32_t * last_position) { @@ -66,7 +66,34 @@ grub_print_ucs4 (const grub_uint32_t * s } } -static grub_ssize_t +int +utf8_to_ucs4 (const char *msg, grub_uint32_t **unicode_msg, + grub_uint32_t **last_position) +{ + grub_ssize_t msg_len = grub_strlen (msg); + + *unicode_msg = grub_malloc (grub_strlen (msg) * sizeof (grub_uint32_t)); + + if (!*unicode_msg) + { + grub_printf ("utf8_to_ucs4 ERROR1: %s", msg); + return -1; + } + + msg_len = grub_utf8_to_ucs4 (*unicode_msg, msg_len, + (grub_uint8_t *) msg, -1, 0); + + *last_position = *unicode_msg + msg_len; + + if (msg_len < 0) + { + grub_printf ("utf8_to_ucs4 ERROR2: %s", msg); + grub_free (*unicode_msg); + } + return msg_len; +} + +grub_ssize_t getstringwidth (grub_uint32_t * str, const grub_uint32_t * last_position) { grub_ssize_t width = 0; @@ -87,29 +114,17 @@ print_message_indented (const char *msg, (margin_left + margin_right); grub_uint32_t *unicode_msg; + grub_uint32_t *last_position; - grub_ssize_t msg_len = grub_strlen (msg); - - unicode_msg = grub_malloc (msg_len * sizeof (*unicode_msg)); + int msg_len; - msg_len = grub_utf8_to_ucs4 (unicode_msg, msg_len, - (grub_uint8_t *) msg, -1, 0); - - if (!unicode_msg) - { - grub_printf ("print_message_indented ERROR1: %s", msg); - return; - } + msg_len = utf8_to_ucs4 (msg, &unicode_msg, &last_position); if (msg_len < 0) { - grub_printf ("print_message_indented ERROR2: %s", msg); - grub_free (unicode_msg); return; } - const grub_uint32_t *last_position = unicode_msg + msg_len; - grub_uint32_t *current_position = unicode_msg; grub_uint32_t *next_new_line = unicode_msg; === modified file 'po/POTFILES' --- po/POTFILES 2009-12-05 11:25:07 +0000 +++ po/POTFILES 2009-12-19 00:32:03 +0000 @@ -11,5 +11,6 @@ util/mkisofs/rock.c util/mkisofs/tree.c util/mkisofs/write.c +normal/main.c normal/menu_entry.c normal/menu_text.c