3 Copyright (c) 2006, 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.
27 #define NARROW_GLYPH_NUMBER 8
28 #define WIDE_GLYPH_NUMBER 75
31 // Default language code, currently is English
33 CHAR8
*mDefaultLangCode
= "eng";
36 EFI_HII_FONT_PACK FixedLength
;
37 EFI_NARROW_GLYPH NarrowArray
[NARROW_GLYPH_NUMBER
];
38 EFI_WIDE_GLYPH WideArray
[WIDE_GLYPH_NUMBER
];
41 FONT_PACK mFontPack
= {
44 sizeof (EFI_HII_FONT_PACK
) + (NARROW_GLYPH_NUMBER
* sizeof (EFI_NARROW_GLYPH
)) + (WIDE_GLYPH_NUMBER
* sizeof (EFI_WIDE_GLYPH
)),
314 Routine to export glyphs to the HII database. This is in addition to whatever is defined in the Graphics Console driver.
323 EFI_HII_HANDLE HiiHandle
;
324 EFI_HII_PACKAGES
*PackageList
;
326 PackageList
= PreparePackages (1, NULL
, &mFontPack
);
328 // Register our Fonts into the global database
331 Hii
->NewPack (Hii
, PackageList
, &HiiHandle
);
333 gBS
->FreePool (PackageList
);
338 BOOLEAN LangCodesSettingRequired
343 Determine the current language that will be used
344 based on language related EFI Variables
347 LangCodesSettingRequired - If required to set LangCode variable
356 CHAR8 LangCode
[ISO_639_2_ENTRY_SIZE
];
358 CHAR16
*LanguageString
;
360 LanguageString
= NULL
;
366 // Collect the languages from what our current Language support is based on our VFR
368 Hii
->GetPrimaryLanguages (Hii
, gStringPackHandle
, &LanguageString
);
370 LangCodes
= AllocatePool (StrLen (LanguageString
));
374 // Convert LanguageString from Unicode to EFI defined ASCII LangCodes
376 for (Index
= 0; LanguageString
[Index
] != 0x0000; Index
++) {
377 LangCodes
[Index
] = (CHAR8
) LanguageString
[Index
];
380 LangCodes
[Index
] = 0;
382 if (LangCodesSettingRequired
) {
383 Status
= gRT
->SetVariable (
385 &gEfiGlobalVariableGuid
,
386 EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
,
387 AsciiStrLen (LangCodes
),
392 // Find current LangCode from Lang NV Variable
394 Size
= ISO_639_2_ENTRY_SIZE
;
395 Status
= gRT
->GetVariable (
397 &gEfiGlobalVariableGuid
,
403 if (!EFI_ERROR (Status
)) {
404 Status
= EFI_NOT_FOUND
;
405 for (Index
= 0; LangCodes
[Index
] != 0; Index
+= ISO_639_2_ENTRY_SIZE
) {
406 if (CompareMem (&LangCodes
[Index
], LangCode
, ISO_639_2_ENTRY_SIZE
) == 0) {
407 Status
= EFI_SUCCESS
;
413 // If we cannot get language code from Lang variable,
414 // or LangCode cannot be found from language table,
415 // set the mDefaultLangCode to Lang variable.
417 if (EFI_ERROR (Status
)) {
418 Status
= gRT
->SetVariable (
420 &gEfiGlobalVariableGuid
,
421 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
,
422 ISO_639_2_ENTRY_SIZE
,
428 gBS
->FreePool (LangCodes
);
431 if (LanguageString
!= NULL
) {
432 gBS
->FreePool (LanguageString
);