3 Copyright (c) 2004, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 Lib functions to support Box Draw Unicode code pages.
26 #include "EfiDriverLib.h"
38 // This list is used to define the valid extend chars.
39 // It also provides a mapping from Unicode to PCANSI or
40 // ASCII. The ASCII mapping we just made up.
44 static UNICODE_TO_CHAR UnicodeToPcAnsiOrAscii
[] = {
45 {BOXDRAW_HORIZONTAL
, 0xc4, L
'-'},
46 {BOXDRAW_VERTICAL
, 0xb3, L
'|'},
47 {BOXDRAW_DOWN_RIGHT
, 0xda, L
'/'},
48 {BOXDRAW_DOWN_LEFT
, 0xbf, L
'\\'},
49 {BOXDRAW_UP_RIGHT
, 0xc0, L
'\\'},
50 {BOXDRAW_UP_LEFT
, 0xd9, L
'/'},
51 {BOXDRAW_VERTICAL_RIGHT
, 0xc3, L
'|'},
52 {BOXDRAW_VERTICAL_LEFT
, 0xb4, L
'|'},
53 {BOXDRAW_DOWN_HORIZONTAL
, 0xc2, L
'+'},
54 {BOXDRAW_UP_HORIZONTAL
, 0xc1, L
'+'},
55 {BOXDRAW_VERTICAL_HORIZONTAL
, 0xc5, L
'+'},
56 {BOXDRAW_DOUBLE_HORIZONTAL
, 0xcd, L
'-'},
57 {BOXDRAW_DOUBLE_VERTICAL
, 0xba, L
'|'},
58 {BOXDRAW_DOWN_RIGHT_DOUBLE
, 0xd5, L
'/'},
59 {BOXDRAW_DOWN_DOUBLE_RIGHT
, 0xd6, L
'/'},
60 {BOXDRAW_DOUBLE_DOWN_RIGHT
, 0xc9, L
'/'},
61 {BOXDRAW_DOWN_LEFT_DOUBLE
, 0xb8, L
'\\'},
62 {BOXDRAW_DOWN_DOUBLE_LEFT
, 0xb7, L
'\\'},
63 {BOXDRAW_DOUBLE_DOWN_LEFT
, 0xbb, L
'\\'},
64 {BOXDRAW_UP_RIGHT_DOUBLE
, 0xd4, L
'\\'},
65 {BOXDRAW_UP_DOUBLE_RIGHT
, 0xd3, L
'\\'},
66 {BOXDRAW_DOUBLE_UP_RIGHT
, 0xc8, L
'\\'},
67 {BOXDRAW_UP_LEFT_DOUBLE
, 0xbe, L
'/'},
68 {BOXDRAW_UP_DOUBLE_LEFT
, 0xbd, L
'/'},
69 {BOXDRAW_DOUBLE_UP_LEFT
, 0xbc, L
'/'},
70 {BOXDRAW_VERTICAL_RIGHT_DOUBLE
, 0xc6, L
'|'},
71 {BOXDRAW_VERTICAL_DOUBLE_RIGHT
, 0xc7, L
'|'},
72 {BOXDRAW_DOUBLE_VERTICAL_RIGHT
, 0xcc, L
'|'},
73 {BOXDRAW_VERTICAL_LEFT_DOUBLE
, 0xb5, L
'|'},
74 {BOXDRAW_VERTICAL_DOUBLE_LEFT
, 0xb6, L
'|'},
75 {BOXDRAW_DOUBLE_VERTICAL_LEFT
, 0xb9, L
'|'},
76 {BOXDRAW_DOWN_HORIZONTAL_DOUBLE
, 0xd1, L
'+'},
77 {BOXDRAW_DOWN_DOUBLE_HORIZONTAL
, 0xd2, L
'+'},
78 {BOXDRAW_DOUBLE_DOWN_HORIZONTAL
, 0xcb, L
'+'},
79 {BOXDRAW_UP_HORIZONTAL_DOUBLE
, 0xcf, L
'+'},
80 {BOXDRAW_UP_DOUBLE_HORIZONTAL
, 0xd0, L
'+'},
81 {BOXDRAW_DOUBLE_UP_HORIZONTAL
, 0xca, L
'+'},
82 {BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE
, 0xd8, L
'+'},
83 {BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL
, 0xd7, L
'+'},
84 {BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL
, 0xce, L
'+'},
86 {BLOCKELEMENT_FULL_BLOCK
, 0xdb, L
'*'},
87 {BLOCKELEMENT_LIGHT_SHADE
, 0xb0, L
'+'},
89 {GEOMETRICSHAPE_UP_TRIANGLE
, 0x1e, L
'^'},
90 {GEOMETRICSHAPE_RIGHT_TRIANGLE
, 0x10, L
'>'},
91 {GEOMETRICSHAPE_DOWN_TRIANGLE
, 0x1f, L
'v'},
92 {GEOMETRICSHAPE_LEFT_TRIANGLE
, 0x11, L
'<'},
94 {ARROW_LEFT
, 0x3c, L
'<'},
96 {ARROW_UP
, 0x18, L
'^'},
98 {ARROW_RIGHT
, 0x3e, L
'>'},
100 {ARROW_DOWN
, 0x19, L
'v'},
102 {0x0000, 0x00, L
'\0'},
107 LibIsValidTextGraphics (
109 OUT CHAR8
*PcAnsi
, OPTIONAL
110 OUT CHAR8
*Ascii OPTIONAL
116 Detects if a Unicode char is for Box Drawing text graphics.
120 Graphic - Unicode char to test.
122 PcAnsi - Optional pointer to return PCANSI equivalent of Graphic.
124 Asci - Optional pointer to return Ascii equivalent of Graphic.
128 TRUE if Gpaphic is a supported Unicode Box Drawing character.
132 UNICODE_TO_CHAR
*Table
;
134 if ((((Graphic
& 0xff00) != 0x2500) && ((Graphic
& 0xff00) != 0x2100))) {
137 // Unicode drawing code charts are all in the 0x25xx range,
143 for (Table
= UnicodeToPcAnsiOrAscii
; Table
->Unicode
!= 0x0000; Table
++) {
144 if (Graphic
== Table
->Unicode
) {
145 if (PcAnsi
!= NULL
) {
146 *PcAnsi
= Table
->PcAnsi
;
149 *Ascii
= Table
->Ascii
;
166 Is it valid ascii char?
170 Ascii - The char to check
174 TRUE - Is a ascii char
175 FALSE - Not a ascii char
179 if ((Ascii
>= 0x20) && (Ascii
<= 0x7f)) {
194 Is it valid EFI control char?
198 CharC - The char to check
202 TRUE - Is a valid EFI control char
203 FALSE - Not a valid EFI control char
207 if (CharC
== CHAR_NULL
|| CharC
== CHAR_BACKSPACE
|| CharC
== CHAR_LINEFEED
|| CharC
== CHAR_CARRIAGE_RETURN
) {