]> git.proxmox.com Git - mirror_edk2.git/blame - EdkNt32Pkg/Dxe/PlatformBds/Generic/Language.c
If "SupArchList" is defined for a PCD in MSA, should check current arch is in the...
[mirror_edk2.git] / EdkNt32Pkg / Dxe / PlatformBds / Generic / Language.c
CommitLineData
878ddf1f 1/*++\r
2\r
3Copyright (c) 2006, Intel Corporation \r
4All rights reserved. This program and the accompanying materials \r
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 language.c\r
15\r
16Abstract:\r
17\r
18 Language settings\r
19 \r
20Revision History\r
21\r
22--*/\r
23\r
24#include "String.h"\r
25#include "Language.h"\r
26\r
27#define NARROW_GLYPH_NUMBER 8\r
28#define WIDE_GLYPH_NUMBER 75\r
29\r
30//\r
31// Default language code, currently is English\r
32//\r
33CHAR8 *mDefaultLangCode = "eng";\r
34\r
35typedef struct {\r
36 EFI_HII_FONT_PACK FixedLength;\r
37 EFI_NARROW_GLYPH NarrowArray[NARROW_GLYPH_NUMBER];\r
38 EFI_WIDE_GLYPH WideArray[WIDE_GLYPH_NUMBER];\r
39} FONT_PACK;\r
40\r
41FONT_PACK mFontPack = {\r
42 sizeof (EFI_HII_FONT_PACK) + (NARROW_GLYPH_NUMBER * sizeof (EFI_NARROW_GLYPH)) + (WIDE_GLYPH_NUMBER * sizeof (EFI_WIDE_GLYPH)),\r
43 EFI_HII_FONT,\r
44 NARROW_GLYPH_NUMBER,\r
45 WIDE_GLYPH_NUMBER,\r
46 { // Narrow Glyphs\r
47 {\r
48 0x05d0,\r
49 0x00,\r
50 {\r
51 0x00,\r
52 0x00,\r
53 0x00,\r
54 0x4E,\r
55 0x6E,\r
56 0x62,\r
57 0x32,\r
58 0x32,\r
59 0x3C,\r
60 0x68,\r
61 0x4C,\r
62 0x4C,\r
63 0x46,\r
64 0x76,\r
65 0x72,\r
66 0x00,\r
67 0x00,\r
68 0x00,\r
69 0x00\r
70 }\r
71 },\r
72 {\r
73 0x05d1,\r
74 0x00,\r
75 {\r
76 0x00,\r
77 0x00,\r
78 0x00,\r
79 0x78,\r
80 0x7C,\r
81 0x0C,\r
82 0x0C,\r
83 0x0C,\r
84 0x0C,\r
85 0x0C,\r
86 0x0C,\r
87 0x0C,\r
88 0x0C,\r
89 0x7E,\r
90 0x7E,\r
91 0x00,\r
92 0x00,\r
93 0x00,\r
94 0x00\r
95 }\r
96 },\r
97 {\r
98 0x05d2,\r
99 0x00,\r
100 {\r
101 0x00,\r
102 0x00,\r
103 0x00,\r
104 0x78,\r
105 0x7C,\r
106 0x0C,\r
107 0x0C,\r
108 0x0C,\r
109 0x0C,\r
110 0x0C,\r
111 0x0C,\r
112 0x1C,\r
113 0x3E,\r
114 0x66,\r
115 0x66,\r
116 0x00,\r
117 0x00,\r
118 0x00,\r
119 0x00\r
120 }\r
121 },\r
122 {\r
123 0x05d3,\r
124 0x00,\r
125 {\r
126 0x00,\r
127 0x00,\r
128 0x00,\r
129 0x7E,\r
130 0x7E,\r
131 0x0C,\r
132 0x0C,\r
133 0x0C,\r
134 0x0C,\r
135 0x0C,\r
136 0x0C,\r
137 0x0C,\r
138 0x0C,\r
139 0x0C,\r
140 0x0C,\r
141 0x00,\r
142 0x00,\r
143 0x00,\r
144 0x00\r
145 }\r
146 },\r
147 {\r
148 0x05d4,\r
149 0x00,\r
150 {\r
151 0x00,\r
152 0x00,\r
153 0x00,\r
154 0x7C,\r
155 0x7E,\r
156 0x06,\r
157 0x06,\r
158 0x06,\r
159 0x06,\r
160 0x66,\r
161 0x66,\r
162 0x66,\r
163 0x66,\r
164 0x66,\r
165 0x66,\r
166 0x00,\r
167 0x00,\r
168 0x00,\r
169 0x00\r
170 }\r
171 },\r
172 {\r
173 0x05d5,\r
174 0x00,\r
175 {\r
176 0x00,\r
177 0x00,\r
178 0x00,\r
179 0x3C,\r
180 0x3C,\r
181 0x0C,\r
182 0x0C,\r
183 0x0C,\r
184 0x0C,\r
185 0x0C,\r
186 0x0C,\r
187 0x0C,\r
188 0x0C,\r
189 0x0C,\r
190 0x0C,\r
191 0x00,\r
192 0x00,\r
193 0x00,\r
194 0x00\r
195 }\r
196 },\r
197 {\r
198 0x05d6,\r
199 0x00,\r
200 {\r
201 0x00,\r
202 0x00,\r
203 0x00,\r
204 0x38,\r
205 0x38,\r
206 0x1E,\r
207 0x1E,\r
208 0x18,\r
209 0x18,\r
210 0x18,\r
211 0x18,\r
212 0x18,\r
213 0x18,\r
214 0x18,\r
215 0x18,\r
216 0x00,\r
217 0x00,\r
218 0x00,\r
219 0x00\r
220 }\r
221 },\r
222 {\r
223 0x0000,\r
224 0x00,\r
225 {\r
226 0x00,\r
227 0x00,\r
228 0x00,\r
229 0x00,\r
230 0x00,\r
231 0x00,\r
232 0x00,\r
233 0x00,\r
234 0x00,\r
235 0x00,\r
236 0x00,\r
237 0x00,\r
238 0x00,\r
239 0x00,\r
240 0x00,\r
241 0x00,\r
242 0x00,\r
243 0x00,\r
244 0x00\r
245 }\r
246 }\r
247 },\r
248 { // Wide Glyphs\r
249 {\r
250 0x0020,\r
251 0x00,\r
252 {\r
253 0x00,\r
254 0x00,\r
255 0x00,\r
256 0x00,\r
257 0x00,\r
258 0x00,\r
259 0x00,\r
260 0x00,\r
261 0x00,\r
262 0x00,\r
263 0x00,\r
264 0x00,\r
265 0x00,\r
266 0x00,\r
267 0x00,\r
268 0x00,\r
269 0x00,\r
270 0x00,\r
271 0x00\r
272 },\r
273 {\r
274 0x00,\r
275 0x00,\r
276 0x00,\r
277 0x00,\r
278 0x00,\r
279 0x00,\r
280 0x00,\r
281 0x00,\r
282 0x00,\r
283 0x00,\r
284 0x00,\r
285 0x00,\r
286 0x00,\r
287 0x00,\r
288 0x00,\r
289 0x00,\r
290 0x00,\r
291 0x00,\r
292 0x00\r
293 },\r
294 {\r
295 0x00,\r
296 0x00,\r
297 0x00\r
298 }\r
299 }, //\r
300 }\r
301};\r
302\r
303VOID\r
304ExportFonts (\r
305 VOID\r
306 )\r
307/*++\r
308\r
309Routine Description:\r
310 Routine to export glyphs to the HII database. This is in addition to whatever is defined in the Graphics Console driver.\r
311\r
312Arguments:\r
313 None\r
314 \r
315Returns:\r
316\r
317--*/\r
318{\r
319 EFI_HII_HANDLE HiiHandle;\r
320 EFI_HII_PACKAGES *PackageList;\r
321\r
322 PackageList = PreparePackages (1, NULL, &mFontPack);\r
323 //\r
324 // Register our Fonts into the global database\r
325 //\r
326 HiiHandle = 0;\r
327 Hii->NewPack (Hii, PackageList, &HiiHandle);\r
328\r
329 gBS->FreePool (PackageList);\r
330}\r
331\r
332VOID\r
333InitializeLanguage (\r
334 BOOLEAN LangCodesSettingRequired\r
335 )\r
336/*++\r
337\r
338Routine Description:\r
339 Determine the current language that will be used \r
340 based on language related EFI Variables\r
341\r
342Arguments:\r
343 LangCodesSettingRequired - If required to set LangCode variable\r
344 \r
345Returns:\r
346\r
347--*/\r
348{\r
349 EFI_STATUS Status;\r
350 UINTN Index;\r
351 UINTN Size;\r
352 CHAR8 LangCode[ISO_639_2_ENTRY_SIZE];\r
353 CHAR8 *LangCodes;\r
354 CHAR16 *LanguageString;\r
355\r
356 LanguageString = NULL;\r
357 LangCodes = NULL;\r
358\r
359 ExportFonts ();\r
360\r
361 //\r
362 // Collect the languages from what our current Language support is based on our VFR\r
363 //\r
364 Hii->GetPrimaryLanguages (Hii, gStringPackHandle, &LanguageString);\r
365\r
366 LangCodes = AllocatePool (StrLen (LanguageString));\r
367 ASSERT (LangCodes);\r
368\r
369 //\r
370 // Convert LanguageString from Unicode to EFI defined ASCII LangCodes\r
371 //\r
372 for (Index = 0; LanguageString[Index] != 0x0000; Index++) {\r
373 LangCodes[Index] = (CHAR8) LanguageString[Index];\r
374 }\r
375\r
376 LangCodes[Index] = 0;\r
377\r
378 if (LangCodesSettingRequired) {\r
379 Status = gRT->SetVariable (\r
380 L"LangCodes",\r
381 &gEfiGlobalVariableGuid,\r
382 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
383 AsciiStrLen (LangCodes),\r
384 LangCodes\r
385 );\r
386 }\r
387 //\r
388 // Find current LangCode from Lang NV Variable\r
389 //\r
390 Size = ISO_639_2_ENTRY_SIZE;\r
391 Status = gRT->GetVariable (\r
392 L"Lang",\r
393 &gEfiGlobalVariableGuid,\r
394 NULL,\r
395 &Size,\r
396 &LangCode\r
397 );\r
398\r
399 if (!EFI_ERROR (Status)) {\r
400 Status = EFI_NOT_FOUND;\r
401 for (Index = 0; LangCodes[Index] != 0; Index += ISO_639_2_ENTRY_SIZE) {\r
402 if (CompareMem (&LangCodes[Index], LangCode, ISO_639_2_ENTRY_SIZE) == 0) {\r
403 Status = EFI_SUCCESS;\r
404 break;\r
405 }\r
406 }\r
407 }\r
408 //\r
409 // If we cannot get language code from Lang variable,\r
410 // or LangCode cannot be found from language table,\r
411 // set the mDefaultLangCode to Lang variable.\r
412 //\r
413 if (EFI_ERROR (Status)) {\r
414 Status = gRT->SetVariable (\r
415 L"Lang",\r
416 &gEfiGlobalVariableGuid,\r
417 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
418 ISO_639_2_ENTRY_SIZE,\r
419 mDefaultLangCode\r
420 );\r
421 }\r
422\r
423 if (LangCodes) {\r
424 gBS->FreePool (LangCodes);\r
425 }\r
426\r
427 if (LanguageString != NULL) {\r
428 gBS->FreePool (LanguageString);\r
429 }\r
430\r
431}\r