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