]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Foundation/Library/Dxe/Print/BoxDraw.c
Update the copyright notice format
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / Dxe / Print / BoxDraw.c
CommitLineData
3eb9473e 1/*++\r
2\r
4ea9375a
HT
3Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>\r
4This program and the accompanying materials \r
3eb9473e 5are licensed and made available under the terms and conditions of the BSD License \r
6which accompanies this distribution. The full text of the license may be found at \r
7http://opensource.org/licenses/bsd-license.php \r
8 \r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11\r
12Module Name:\r
13\r
14 BoxDraw.c\r
15\r
16Abstract:\r
17 Lib functions to support Box Draw Unicode code pages.\r
18\r
19\r
20\r
21Revision History\r
22\r
23--*/\r
24\r
25#include "Tiano.h"\r
26#include "EfiDriverLib.h"\r
27\r
28\r
29\r
30typedef struct {\r
31 CHAR16 Unicode;\r
32 CHAR8 PcAnsi;\r
33 CHAR8 Ascii;\r
34} UNICODE_TO_CHAR;\r
35\r
36\r
37//\r
38// This list is used to define the valid extend chars.\r
39// It also provides a mapping from Unicode to PCANSI or\r
40// ASCII. The ASCII mapping we just made up.\r
41//\r
42//\r
43\r
44static UNICODE_TO_CHAR UnicodeToPcAnsiOrAscii[] = {\r
57d40fe2 45 {BOXDRAW_HORIZONTAL, 0xc4, L'-'}, \r
46 {BOXDRAW_VERTICAL, 0xb3, L'|'},\r
47 {BOXDRAW_DOWN_RIGHT, 0xda, L'/'},\r
48 {BOXDRAW_DOWN_LEFT, 0xbf, L'\\'},\r
49 {BOXDRAW_UP_RIGHT, 0xc0, L'\\'},\r
50 {BOXDRAW_UP_LEFT, 0xd9, L'/'},\r
51 {BOXDRAW_VERTICAL_RIGHT, 0xc3, L'|'},\r
52 {BOXDRAW_VERTICAL_LEFT, 0xb4, L'|'},\r
53 {BOXDRAW_DOWN_HORIZONTAL, 0xc2, L'+'},\r
54 {BOXDRAW_UP_HORIZONTAL, 0xc1, L'+'},\r
55 {BOXDRAW_VERTICAL_HORIZONTAL, 0xc5, L'+'},\r
56 {BOXDRAW_DOUBLE_HORIZONTAL, 0xcd, L'-'},\r
57 {BOXDRAW_DOUBLE_VERTICAL, 0xba, L'|'},\r
58 {BOXDRAW_DOWN_RIGHT_DOUBLE, 0xd5, L'/'},\r
59 {BOXDRAW_DOWN_DOUBLE_RIGHT, 0xd6, L'/'},\r
60 {BOXDRAW_DOUBLE_DOWN_RIGHT, 0xc9, L'/'},\r
61 {BOXDRAW_DOWN_LEFT_DOUBLE, 0xb8, L'\\'},\r
62 {BOXDRAW_DOWN_DOUBLE_LEFT, 0xb7, L'\\'},\r
63 {BOXDRAW_DOUBLE_DOWN_LEFT, 0xbb, L'\\'},\r
64 {BOXDRAW_UP_RIGHT_DOUBLE, 0xd4, L'\\'},\r
65 {BOXDRAW_UP_DOUBLE_RIGHT, 0xd3, L'\\'},\r
66 {BOXDRAW_DOUBLE_UP_RIGHT, 0xc8, L'\\'},\r
67 {BOXDRAW_UP_LEFT_DOUBLE, 0xbe, L'/'},\r
68 {BOXDRAW_UP_DOUBLE_LEFT, 0xbd, L'/'},\r
69 {BOXDRAW_DOUBLE_UP_LEFT, 0xbc, L'/'},\r
70 {BOXDRAW_VERTICAL_RIGHT_DOUBLE, 0xc6, L'|'},\r
71 {BOXDRAW_VERTICAL_DOUBLE_RIGHT, 0xc7, L'|'},\r
72 {BOXDRAW_DOUBLE_VERTICAL_RIGHT, 0xcc, L'|'},\r
73 {BOXDRAW_VERTICAL_LEFT_DOUBLE, 0xb5, L'|'},\r
74 {BOXDRAW_VERTICAL_DOUBLE_LEFT, 0xb6, L'|'},\r
75 {BOXDRAW_DOUBLE_VERTICAL_LEFT, 0xb9, L'|'},\r
76 {BOXDRAW_DOWN_HORIZONTAL_DOUBLE, 0xd1, L'+'},\r
77 {BOXDRAW_DOWN_DOUBLE_HORIZONTAL, 0xd2, L'+'},\r
78 {BOXDRAW_DOUBLE_DOWN_HORIZONTAL, 0xcb, L'+'},\r
79 {BOXDRAW_UP_HORIZONTAL_DOUBLE, 0xcf, L'+'},\r
80 {BOXDRAW_UP_DOUBLE_HORIZONTAL, 0xd0, L'+'},\r
81 {BOXDRAW_DOUBLE_UP_HORIZONTAL, 0xca, L'+'},\r
82 {BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE, 0xd8, L'+'},\r
83 {BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL, 0xd7, L'+'},\r
84 {BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL, 0xce, L'+'},\r
85\r
86 {BLOCKELEMENT_FULL_BLOCK, 0xdb, L'*'},\r
87 {BLOCKELEMENT_LIGHT_SHADE, 0xb0, L'+'},\r
88\r
89 {GEOMETRICSHAPE_UP_TRIANGLE, 0x1e, L'^'},\r
90 {GEOMETRICSHAPE_RIGHT_TRIANGLE, 0x10, L'>'},\r
91 {GEOMETRICSHAPE_DOWN_TRIANGLE, 0x1f, L'v'},\r
92 {GEOMETRICSHAPE_LEFT_TRIANGLE, 0x11, L'<'},\r
93\r
94 {ARROW_LEFT, 0x3c, L'<'},\r
95\r
96 {ARROW_UP, 0x18, L'^'},\r
97\r
98 {ARROW_RIGHT, 0x3e, L'>'},\r
99\r
100 {ARROW_DOWN, 0x19, L'v'},\r
3eb9473e 101 \r
57d40fe2 102 {0x0000, 0x00, L'\0'},\r
3eb9473e 103};\r
104\r
105\r
106BOOLEAN\r
107LibIsValidTextGraphics (\r
108 IN CHAR16 Graphic,\r
109 OUT CHAR8 *PcAnsi, OPTIONAL\r
110 OUT CHAR8 *Ascii OPTIONAL\r
111 )\r
112/*++\r
113\r
114Routine Description:\r
115\r
116 Detects if a Unicode char is for Box Drawing text graphics.\r
117\r
118Arguments:\r
119\r
120 Grphic - Unicode char to test.\r
121\r
122 PcAnsi - Optional pointer to return PCANSI equivalent of Graphic.\r
123\r
124 Asci - Optional pointer to return Ascii equivalent of Graphic.\r
125\r
126Returns:\r
127\r
128 TRUE if Gpaphic is a supported Unicode Box Drawing character.\r
129\r
130--*/\r
131{\r
132 UNICODE_TO_CHAR *Table;\r
133\r
134 if ((((Graphic & 0xff00) != 0x2500) && ((Graphic & 0xff00) != 0x2100))) {\r
135 \r
136 //\r
137 // Unicode drawing code charts are all in the 0x25xx range, \r
138 // arrows are 0x21xx\r
139 //\r
140 return FALSE;\r
141 }\r
142\r
143 for (Table = UnicodeToPcAnsiOrAscii; Table->Unicode != 0x0000; Table++) {\r
144 if (Graphic == Table->Unicode) {\r
145 if (PcAnsi != NULL) {\r
146 *PcAnsi = Table->PcAnsi; \r
147 }\r
148 if (Ascii != NULL) {\r
149 *Ascii = Table->Ascii;\r
150 }\r
151 return TRUE;\r
152 }\r
153 }\r
154 return FALSE;\r
155}\r
156\r
157\r
158BOOLEAN\r
159IsValidAscii (\r
160 IN CHAR16 Ascii\r
161 )\r
162/*++\r
163\r
164Routine Description:\r
165\r
166 Is it valid ascii char? \r
167\r
168Arguments:\r
169\r
170 Ascii - The char to check\r
171\r
172Returns: \r
173\r
174 TRUE - Is a ascii char\r
175 FALSE - Not a ascii char\r
176\r
177--*/\r
178{\r
179 if ((Ascii >= 0x20) && (Ascii <= 0x7f)) {\r
180 return TRUE;\r
181 } \r
182 return FALSE;\r
183}\r
184\r
185\r
186BOOLEAN\r
187IsValidEfiCntlChar (\r
188 IN CHAR16 CharC\r
189 )\r
190/*++\r
191\r
192Routine Description:\r
193\r
194 Is it valid EFI control char? \r
195\r
196Arguments:\r
197\r
198 Ascii - The char to check\r
199\r
200Returns: \r
201\r
202 TRUE - Is a valid EFI control char\r
203 FALSE - Not a valid EFI control char\r
204\r
205--*/\r
206{\r
207 if (CharC == CHAR_NULL || CharC == CHAR_BACKSPACE || CharC == CHAR_LINEFEED || CharC == CHAR_CARRIAGE_RETURN) {\r
208 return TRUE;\r
209 } \r
210 return FALSE;\r
211}\r
212\r