1 |
/* |
/* |
2 |
* GRUB -- GRand Unified Bootloader |
* GRUB -- GRand Unified Bootloader |
3 |
* Copyright (C) 2003,2004 Free Software Foundation, Inc. |
* Copyright (C) 2003,2004,2005 Free Software Foundation, Inc. |
4 |
* |
* |
5 |
* This program is free software; you can redistribute it and/or modify |
* This program is free software; you can redistribute it and/or modify |
6 |
* it under the terms of the GNU General Public License as published by |
* it under the terms of the GNU General Public License as published by |
41 |
{ |
{ |
42 |
grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + i + 1); |
grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + i + 1); |
43 |
grub_putcode (GRUB_TERM_DISP_VLINE); |
grub_putcode (GRUB_TERM_DISP_VLINE); |
44 |
grub_gotoxy (GRUB_TERM_MARGIN + GRUB_TERM_BORDER_WIDTH - 1, GRUB_TERM_TOP_BORDER_Y + i + 1); |
grub_gotoxy (GRUB_TERM_MARGIN + GRUB_TERM_BORDER_WIDTH - 1, |
45 |
|
GRUB_TERM_TOP_BORDER_Y + i + 1); |
46 |
grub_putcode (GRUB_TERM_DISP_VLINE); |
grub_putcode (GRUB_TERM_DISP_VLINE); |
47 |
} |
} |
48 |
|
|
49 |
grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES + 1); |
grub_gotoxy (GRUB_TERM_MARGIN, |
50 |
|
GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES + 1); |
51 |
grub_putcode (GRUB_TERM_DISP_LL); |
grub_putcode (GRUB_TERM_DISP_LL); |
52 |
for (i = 0; i < (unsigned) GRUB_TERM_BORDER_WIDTH - 2; i++) |
for (i = 0; i < (unsigned) GRUB_TERM_BORDER_WIDTH - 2; i++) |
53 |
grub_putcode (GRUB_TERM_DISP_HLINE); |
grub_putcode (GRUB_TERM_DISP_HLINE); |
55 |
|
|
56 |
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); |
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); |
57 |
|
|
58 |
grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES + GRUB_TERM_MARGIN + 1); |
grub_gotoxy (GRUB_TERM_MARGIN, |
59 |
|
(GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES |
60 |
|
+ GRUB_TERM_MARGIN + 1)); |
61 |
} |
} |
62 |
|
|
63 |
static void |
static void |
101 |
{ |
{ |
102 |
int x; |
int x; |
103 |
const char *title; |
const char *title; |
104 |
|
grub_ssize_t len; |
105 |
|
grub_uint32_t *unicode_title; |
106 |
|
grub_ssize_t i; |
107 |
|
|
108 |
title = entry ? entry->title : ""; |
title = entry ? entry->title : ""; |
109 |
|
unicode_title = grub_malloc (grub_strlen (title) * sizeof (*unicode_title)); |
110 |
|
if (! unicode_title) |
111 |
|
/* XXX How to show this error? */ |
112 |
|
return; |
113 |
|
|
114 |
|
len = grub_utf8_to_ucs4 (unicode_title, title, grub_strlen (title)); |
115 |
|
if (len < 0) |
116 |
|
{ |
117 |
|
/* It is an invalid sequence. */ |
118 |
|
grub_free (unicode_title); |
119 |
|
return; |
120 |
|
} |
121 |
|
|
122 |
grub_setcolorstate (highlight |
grub_setcolorstate (highlight |
123 |
? GRUB_TERM_COLOR_HIGHLIGHT |
? GRUB_TERM_COLOR_HIGHLIGHT |
125 |
|
|
126 |
grub_gotoxy (GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN, y); |
grub_gotoxy (GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN, y); |
127 |
|
|
128 |
for (x = GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN + 1; |
for (x = GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN + 1, i = 0; |
129 |
x < GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH - GRUB_TERM_MARGIN; |
x < GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH - GRUB_TERM_MARGIN; |
130 |
x++) |
i++) |
131 |
{ |
{ |
132 |
if (*title && x <= GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH - GRUB_TERM_MARGIN - 1) |
if (i < len |
133 |
|
&& x <= (GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH |
134 |
|
- GRUB_TERM_MARGIN - 1)) |
135 |
{ |
{ |
136 |
if (x == GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH - GRUB_TERM_MARGIN - 1) |
grub_ssize_t width; |
137 |
|
|
138 |
|
width = grub_getcharwidth (unicode_title[i]); |
139 |
|
|
140 |
|
if (x + width > (GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH |
141 |
|
- GRUB_TERM_MARGIN - 1)) |
142 |
grub_putcode (GRUB_TERM_DISP_RIGHT); |
grub_putcode (GRUB_TERM_DISP_RIGHT); |
143 |
else |
else |
144 |
grub_putchar (*title++); |
grub_putcode (unicode_title[i]); |
145 |
|
|
146 |
|
x += width; |
147 |
} |
} |
148 |
else |
else |
149 |
grub_putchar (' '); |
{ |
150 |
|
grub_putchar (' '); |
151 |
|
x++; |
152 |
|
} |
153 |
} |
} |
154 |
grub_gotoxy (GRUB_TERM_CURSOR_X, y); |
grub_gotoxy (GRUB_TERM_CURSOR_X, y); |
155 |
|
|
156 |
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); |
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); |
157 |
|
grub_free (unicode_title); |
158 |
} |
} |
159 |
|
|
160 |
static void |
static void |