2009-12-19 Carles Pina i Estany <carles@pina.cat>
* include/grub/normal.h (grub_utf8_to_ucs4): New declaration. (grub_print_ucs4_alloc): Likewise. (grub_getstringwidth): Likewise. * normal/main.c (grub_normal_init_page): Gettextize version string. * normal/menu_text.c (grub_utf8_to_ucs4_alloc): New definition. (getstringwidth): Renamed to ... (grub_getstringwidth): ... this. Remove `static' qualifier (now used in normal/main.c). Use `grub_utf8_to_ucs4_alloc'. (grub_print_ucs4): Remove `static' qualifer (now used in normal/main.c). * po/POTFILES: Add normal/main.c.
This commit is contained in:
parent
bfd5e52b1d
commit
b99518d1ce
5 changed files with 79 additions and 30 deletions
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
||||||
|
2009-12-19 Carles Pina i Estany <carles@pina.cat>
|
||||||
|
|
||||||
|
* include/grub/normal.h (grub_utf8_to_ucs4): New declaration.
|
||||||
|
(grub_print_ucs4_alloc): Likewise.
|
||||||
|
(grub_getstringwidth): Likewise.
|
||||||
|
* normal/main.c (grub_normal_init_page): Gettextize version string.
|
||||||
|
* normal/menu_text.c (grub_utf8_to_ucs4_alloc): New definition.
|
||||||
|
(getstringwidth): Renamed to ...
|
||||||
|
(grub_getstringwidth): ... this. Remove `static' qualifier (now used
|
||||||
|
in normal/main.c). Use `grub_utf8_to_ucs4_alloc'.
|
||||||
|
(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 <carles@pina.cat>
|
2009-12-19 Carles Pina i Estany <carles@pina.cat>
|
||||||
|
|
||||||
* normal/menu_text.c (STANDARD_MARGIN): New macro.
|
* normal/menu_text.c (STANDARD_MARGIN): New macro.
|
||||||
|
|
|
@ -73,6 +73,12 @@ void grub_parse_color_name_pair (grub_uint8_t *ret, const char *name);
|
||||||
|
|
||||||
/* Defined in `menu_text.c'. */
|
/* Defined in `menu_text.c'. */
|
||||||
void grub_wait_after_message (void);
|
void grub_wait_after_message (void);
|
||||||
|
int grub_utf8_to_ucs4_alloc (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 grub_getstringwidth (grub_uint32_t * str,
|
||||||
|
const grub_uint32_t * last_position);
|
||||||
|
|
||||||
/* Defined in `handler.c'. */
|
/* Defined in `handler.c'. */
|
||||||
void read_handler_list (void);
|
void read_handler_list (void);
|
||||||
|
|
|
@ -385,22 +385,35 @@ read_config_file (const char *config)
|
||||||
void
|
void
|
||||||
grub_normal_init_page (void)
|
grub_normal_init_page (void)
|
||||||
{
|
{
|
||||||
grub_uint8_t width, margin;
|
int msg_len;
|
||||||
|
int posx;
|
||||||
#define TITLE ("GNU GRUB version " PACKAGE_VERSION)
|
const char *msg = _("GNU GRUB version %s");
|
||||||
|
|
||||||
width = grub_getwh () >> 8;
|
|
||||||
margin = (width - (sizeof(TITLE) + 7)) / 2;
|
|
||||||
|
|
||||||
|
char *msg_formatted = grub_malloc (grub_strlen(msg) +
|
||||||
|
grub_strlen(PACKAGE_VERSION));
|
||||||
|
|
||||||
grub_cls ();
|
grub_cls ();
|
||||||
grub_putchar ('\n');
|
|
||||||
|
|
||||||
while (margin--)
|
grub_sprintf (msg_formatted, msg, PACKAGE_VERSION);
|
||||||
grub_putchar (' ');
|
|
||||||
|
|
||||||
grub_printf ("%s\n\n", TITLE);
|
grub_uint32_t *unicode_msg;
|
||||||
|
grub_uint32_t *last_position;
|
||||||
|
|
||||||
|
msg_len = grub_utf8_to_ucs4_alloc (msg_formatted,
|
||||||
|
&unicode_msg, &last_position);
|
||||||
|
|
||||||
|
if (msg_len < 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#undef TITLE
|
posx = grub_getstringwidth (unicode_msg, last_position);
|
||||||
|
posx = (GRUB_TERM_WIDTH - posx) / 2;
|
||||||
|
grub_gotoxy (posx, 1);
|
||||||
|
|
||||||
|
grub_print_ucs4 (unicode_msg, last_position);
|
||||||
|
grub_printf("\n\n");
|
||||||
|
grub_free (unicode_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int reader_nested;
|
static int reader_nested;
|
||||||
|
|
|
@ -55,7 +55,7 @@ print_spaces (int number_spaces)
|
||||||
grub_putchar (' ');
|
grub_putchar (' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
grub_print_ucs4 (const grub_uint32_t * str,
|
grub_print_ucs4 (const grub_uint32_t * str,
|
||||||
const grub_uint32_t * last_position)
|
const grub_uint32_t * last_position)
|
||||||
{
|
{
|
||||||
|
@ -66,8 +66,35 @@ grub_print_ucs4 (const grub_uint32_t * str,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_ssize_t
|
int
|
||||||
getstringwidth (grub_uint32_t * str, const grub_uint32_t * last_position)
|
grub_utf8_to_ucs4_alloc (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
|
||||||
|
grub_getstringwidth (grub_uint32_t * str, const grub_uint32_t * last_position)
|
||||||
{
|
{
|
||||||
grub_ssize_t width = 0;
|
grub_ssize_t width = 0;
|
||||||
|
|
||||||
|
@ -87,29 +114,17 @@ print_message_indented (const char *msg, int margin_left, int margin_right)
|
||||||
(margin_left + margin_right);
|
(margin_left + margin_right);
|
||||||
|
|
||||||
grub_uint32_t *unicode_msg;
|
grub_uint32_t *unicode_msg;
|
||||||
|
grub_uint32_t *last_position;
|
||||||
|
|
||||||
grub_ssize_t msg_len = grub_strlen (msg);
|
int msg_len;
|
||||||
|
|
||||||
unicode_msg = grub_malloc (msg_len * sizeof (*unicode_msg));
|
msg_len = grub_utf8_to_ucs4_alloc (msg, &unicode_msg, &last_position);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msg_len < 0)
|
if (msg_len < 0)
|
||||||
{
|
{
|
||||||
grub_printf ("print_message_indented ERROR2: %s", msg);
|
|
||||||
grub_free (unicode_msg);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const grub_uint32_t *last_position = unicode_msg + msg_len;
|
|
||||||
|
|
||||||
grub_uint32_t *current_position = unicode_msg;
|
grub_uint32_t *current_position = unicode_msg;
|
||||||
|
|
||||||
grub_uint32_t *next_new_line = unicode_msg;
|
grub_uint32_t *next_new_line = unicode_msg;
|
||||||
|
@ -123,7 +138,7 @@ print_message_indented (const char *msg, int margin_left, int margin_right)
|
||||||
|
|
||||||
next_new_line = (grub_uint32_t *) last_position;
|
next_new_line = (grub_uint32_t *) last_position;
|
||||||
|
|
||||||
while (getstringwidth (current_position, next_new_line) > line_len
|
while (grub_getstringwidth (current_position, next_new_line) > line_len
|
||||||
|| (*next_new_line != ' ' && next_new_line > current_position &&
|
|| (*next_new_line != ' ' && next_new_line > current_position &&
|
||||||
next_new_line != last_position))
|
next_new_line != last_position))
|
||||||
{
|
{
|
||||||
|
|
|
@ -11,5 +11,6 @@ util/mkisofs/rock.c
|
||||||
util/mkisofs/tree.c
|
util/mkisofs/tree.c
|
||||||
util/mkisofs/write.c
|
util/mkisofs/write.c
|
||||||
|
|
||||||
|
normal/main.c
|
||||||
normal/menu_entry.c
|
normal/menu_entry.c
|
||||||
normal/menu_text.c
|
normal/menu_text.c
|
||||||
|
|
Loading…
Reference in a new issue