]> git.proxmox.com Git - mirror_edk2.git/blame - Nt32Pkg/PlatformBdsDxe/Generic/Language.c
Cleanups in PlatformBds.c. BDS will get rewritten, but his makes it easier to look...
[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
06335580 29#include "BdsString.h"\r
bc11b829 30#include "Language.h"\r
31\r
bc11b829 32//\r
33// Default language code, currently is English\r
34//\r
35CHAR8 *mDefaultLangCode = "eng";\r
36\r
bc11b829 37\r
38VOID\r
39InitializeLanguage (\r
40 BOOLEAN LangCodesSettingRequired\r
41 )\r
42/*++\r
43\r
44Routine Description:\r
45 Determine the current language that will be used\r
46 based on language related EFI Variables\r
47\r
48Arguments:\r
49 LangCodesSettingRequired - If required to set LangCode variable\r
50\r
51Returns:\r
52\r
53--*/\r
54{\r
55 EFI_STATUS Status;\r
56 UINTN Index;\r
57 UINTN Size;\r
58 CHAR8 LangCode[ISO_639_2_ENTRY_SIZE];\r
59 CHAR8 *LangCodes;\r
60 CHAR16 *LanguageString;\r
61\r
62 LanguageString = NULL;\r
63 LangCodes = NULL;\r
64\r
bc11b829 65 //\r
66 // Collect the languages from what our current Language support is based on our VFR\r
67 //\r
d1477e4d 68 gHii->GetPrimaryLanguages (gHii, gStringPackHandle, &LanguageString);\r
bc11b829 69\r
70 LangCodes = AllocatePool (StrLen (LanguageString));\r
71 ASSERT (LangCodes);\r
72\r
73 //\r
74 // Convert LanguageString from Unicode to EFI defined ASCII LangCodes\r
75 //\r
76 for (Index = 0; LanguageString[Index] != 0x0000; Index++) {\r
77 LangCodes[Index] = (CHAR8) LanguageString[Index];\r
78 }\r
79\r
80 LangCodes[Index] = 0;\r
81\r
82 if (LangCodesSettingRequired) {\r
83 Status = gRT->SetVariable (\r
84 L"LangCodes",\r
85 &gEfiGlobalVariableGuid,\r
86 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
87 AsciiStrLen (LangCodes),\r
88 LangCodes\r
89 );\r
90 }\r
91 //\r
92 // Find current LangCode from Lang NV Variable\r
93 //\r
94 Size = ISO_639_2_ENTRY_SIZE;\r
95 Status = gRT->GetVariable (\r
96 L"Lang",\r
97 &gEfiGlobalVariableGuid,\r
98 NULL,\r
99 &Size,\r
100 &LangCode\r
101 );\r
102\r
103 if (!EFI_ERROR (Status)) {\r
104 Status = EFI_NOT_FOUND;\r
105 for (Index = 0; LangCodes[Index] != 0; Index += ISO_639_2_ENTRY_SIZE) {\r
106 if (CompareMem (&LangCodes[Index], LangCode, ISO_639_2_ENTRY_SIZE) == 0) {\r
107 Status = EFI_SUCCESS;\r
108 break;\r
109 }\r
110 }\r
111 }\r
112 //\r
113 // If we cannot get language code from Lang variable,\r
114 // or LangCode cannot be found from language table,\r
115 // set the mDefaultLangCode to Lang variable.\r
116 //\r
117 if (EFI_ERROR (Status)) {\r
118 Status = gRT->SetVariable (\r
119 L"Lang",\r
120 &gEfiGlobalVariableGuid,\r
121 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
122 ISO_639_2_ENTRY_SIZE,\r
123 mDefaultLangCode\r
124 );\r
125 }\r
126\r
127 if (LangCodes) {\r
128 FreePool (LangCodes);\r
129 }\r
130\r
131 if (LanguageString != NULL) {\r
132 FreePool (LanguageString);\r
133 }\r
134\r
135}\r