@@ -122,6 +122,30 @@ console_print_at(UINTN col, UINTN row, const CHAR16 *fmt, ...)
122
122
return ret ;
123
123
}
124
124
125
+ static struct {
126
+ CHAR16 up_left ;
127
+ CHAR16 up_right ;
128
+ CHAR16 down_left ;
129
+ CHAR16 down_right ;
130
+ CHAR16 horizontal ;
131
+ CHAR16 vertical ;
132
+ } boxdraw [2 ] = {
133
+ {
134
+ BOXDRAW_UP_LEFT ,
135
+ BOXDRAW_UP_RIGHT ,
136
+ BOXDRAW_DOWN_LEFT ,
137
+ BOXDRAW_DOWN_RIGHT ,
138
+ BOXDRAW_HORIZONTAL ,
139
+ BOXDRAW_VERTICAL
140
+ }, {
141
+ '+' ,
142
+ '+' ,
143
+ '+' ,
144
+ '+' ,
145
+ '-' ,
146
+ '|'
147
+ }
148
+ };
125
149
126
150
void
127
151
console_print_box_at (CHAR16 * str_arr [], int highlight ,
@@ -133,6 +157,7 @@ console_print_box_at(CHAR16 *str_arr[], int highlight,
133
157
SIMPLE_TEXT_OUTPUT_INTERFACE * co = ST -> ConOut ;
134
158
UINTN rows , cols ;
135
159
CHAR16 * Line ;
160
+ bool char_set ;
136
161
137
162
if (lines == 0 )
138
163
return ;
@@ -181,10 +206,16 @@ console_print_box_at(CHAR16 *str_arr[], int highlight,
181
206
return ;
182
207
}
183
208
184
- SetMem16 (Line , size_cols * 2 , BOXDRAW_HORIZONTAL );
209
+ /* test if boxdraw characters work */
210
+ co -> SetCursorPosition (co , start_col , start_row );
211
+ Line [0 ] = boxdraw [0 ].up_left ;
212
+ Line [1 ] = L'\0' ;
213
+ char_set = co -> OutputString (co , Line ) == 0 ? 0 : 1 ;
214
+
215
+ SetMem16 (Line , size_cols * 2 , boxdraw [char_set ].horizontal );
185
216
186
- Line [0 ] = BOXDRAW_DOWN_RIGHT ;
187
- Line [size_cols - 1 ] = BOXDRAW_DOWN_LEFT ;
217
+ Line [0 ] = boxdraw [ char_set ]. down_right ;
218
+ Line [size_cols - 1 ] = boxdraw [ char_set ]. down_left ;
188
219
Line [size_cols ] = L'\0' ;
189
220
co -> SetCursorPosition (co , start_col , start_row );
190
221
co -> OutputString (co , Line );
@@ -204,8 +235,8 @@ console_print_box_at(CHAR16 *str_arr[], int highlight,
204
235
int line = i - start ;
205
236
206
237
SetMem16 (Line , size_cols * 2 , L' ' );
207
- Line [0 ] = BOXDRAW_VERTICAL ;
208
- Line [size_cols - 1 ] = BOXDRAW_VERTICAL ;
238
+ Line [0 ] = boxdraw [ char_set ]. vertical ;
239
+ Line [size_cols - 1 ] = boxdraw [ char_set ]. vertical ;
209
240
Line [size_cols ] = L'\0' ;
210
241
if (line >= 0 && line < lines ) {
211
242
CHAR16 * s = str_arr [line ];
@@ -227,9 +258,9 @@ console_print_box_at(CHAR16 *str_arr[], int highlight,
227
258
EFI_BACKGROUND_BLUE );
228
259
229
260
}
230
- SetMem16 (Line , size_cols * 2 , BOXDRAW_HORIZONTAL );
231
- Line [0 ] = BOXDRAW_UP_RIGHT ;
232
- Line [size_cols - 1 ] = BOXDRAW_UP_LEFT ;
261
+ SetMem16 (Line , size_cols * 2 , boxdraw [ char_set ]. horizontal );
262
+ Line [0 ] = boxdraw [ char_set ]. up_right ;
263
+ Line [size_cols - 1 ] = boxdraw [ char_set ]. up_left ;
233
264
Line [size_cols ] = L'\0' ;
234
265
co -> SetCursorPosition (co , start_col , i );
235
266
co -> OutputString (co , Line );
0 commit comments