]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/HiiLib/HiiLanguage.c
Merged in the following trackers from EDK:
[mirror_edk2.git] / MdePkg / Library / HiiLib / HiiLanguage.c
CommitLineData
e52c5a9f 1/** @file\r
2 Language related HII Library implementation.\r
3\r
4 Copyright (c) 2006, Intel Corporation<BR>\r
5 All rights reserved. This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15\r
16#include "InternalHiiLib.h"\r
17\r
18EFI_STATUS\r
19EFIAPI\r
20HiiLibGetCurrentLanguage (\r
21 OUT CHAR8 *Lang\r
22 )\r
23{\r
24 EFI_STATUS Status;\r
25 UINTN Size;\r
26\r
27 ASSERT (Lang != NULL);\r
28\r
29 //\r
30 // Get current language setting\r
31 //\r
32 Size = RFC_3066_ENTRY_SIZE;\r
33 Status = gRT->GetVariable (\r
34 L"PlatformLang",\r
35 &gEfiGlobalVariableGuid,\r
36 NULL,\r
37 &Size,\r
38 Lang\r
39 );\r
40\r
41 if (EFI_ERROR (Status)) {\r
42 AsciiStrCpy (Lang, (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLang));\r
43 }\r
44\r
45 return Status;\r
46}\r
47\r
48\r
49VOID\r
50EFIAPI\r
51HiiLibGetNextLanguage (\r
52 IN OUT CHAR8 **LangCode,\r
53 OUT CHAR8 *Lang\r
54 )\r
55{\r
56 UINTN Index;\r
57 CHAR8 *StringPtr;\r
58\r
59 ASSERT (LangCode != NULL);\r
60 ASSERT (Lang != NULL);\r
61\r
62 Index = 0;\r
63 StringPtr = *LangCode;\r
64 while (StringPtr[Index] != 0 && StringPtr[Index] != ';') {\r
65 Index++;\r
66 }\r
67\r
68 CopyMem (Lang, StringPtr, Index);\r
69 Lang[Index] = 0;\r
70\r
71 if (StringPtr[Index] == ';') {\r
72 Index++;\r
73 }\r
74 *LangCode = StringPtr + Index;\r
75}\r
76\r
77\r
78CHAR8 *\r
79EFIAPI\r
80HiiLibGetSupportedLanguages (\r
81 IN EFI_HII_HANDLE HiiHandle\r
82 )\r
83{\r
84 EFI_STATUS Status;\r
85 UINTN BufferSize;\r
86 CHAR8 *LanguageString;\r
87\r
88 ASSERT (HiiHandle != NULL);\r
89 ASSERT (IsHiiHandleRegistered (HiiHandle));\r
90 //\r
91 // Collect current supported Languages for given HII handle\r
92 //\r
93 BufferSize = 0x1000;\r
c344685c 94 LanguageString = AllocateZeroPool (BufferSize);\r
95 if (LanguageString == NULL) {\r
96 return NULL;\r
97 }\r
54cf8780 98\r
99 LocateHiiProtocols ();\r
c344685c 100 \r
e52c5a9f 101 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);\r
102 \r
103 if (Status == EFI_BUFFER_TOO_SMALL) {\r
104 gBS->FreePool (LanguageString);\r
c344685c 105 LanguageString = AllocateZeroPool (BufferSize);\r
106 if (LanguageString == NULL) {\r
107 return NULL;\r
108 }\r
109\r
e52c5a9f 110 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);\r
111 }\r
112\r
113 if (EFI_ERROR (Status)) {\r
114 LanguageString = NULL;\r
115 }\r
116\r
117 return LanguageString;\r
118}\r
119\r
120\r
121UINT16\r
122EFIAPI\r
123HiiLibGetSupportedLanguageNumber (\r
124 IN EFI_HII_HANDLE HiiHandle\r
125 )\r
126{\r
127 CHAR8 *Languages;\r
128 CHAR8 *LanguageString;\r
129 UINT16 LangNumber;\r
130 CHAR8 Lang[RFC_3066_ENTRY_SIZE];\r
131\r
132 Languages = HiiLibGetSupportedLanguages (HiiHandle);\r
133 if (Languages == NULL) {\r
134 return 0;\r
135 }\r
136\r
137 LangNumber = 0;\r
138 LanguageString = Languages;\r
139 while (*LanguageString != 0) {\r
140 HiiLibGetNextLanguage (&LanguageString, Lang);\r
141 LangNumber++;\r
142 }\r
143 gBS->FreePool (Languages);\r
144\r
145 return LangNumber;\r
146}\r
c344685c 147\r
148CHAR8 *\r
149EFIAPI\r
150HiiLibGetSupportedSecondaryLanguages (\r
151 IN EFI_HII_HANDLE HiiHandle,\r
152 IN CONST CHAR8 *FirstLanguage\r
153 )\r
154{\r
155 EFI_STATUS Status;\r
156 UINTN BufferSize;\r
157 CHAR8 *LanguageString;\r
158\r
159 ASSERT (HiiHandle != NULL);\r
160 ASSERT (IsHiiHandleRegistered (HiiHandle));\r
161 //\r
162 // Collect current supported 2nd Languages for given HII handle\r
163 //\r
164 BufferSize = 0x1000;\r
165 LanguageString = AllocateZeroPool (BufferSize);\r
166 if (LanguageString == NULL) {\r
167 return NULL;\r
168 }\r
54cf8780 169\r
170 LocateHiiProtocols ();\r
171 \r
c344685c 172 Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
173 \r
174 if (Status == EFI_BUFFER_TOO_SMALL) {\r
175 gBS->FreePool (LanguageString);\r
176 LanguageString = AllocateZeroPool (BufferSize);\r
177 if (LanguageString == NULL) {\r
178 return NULL;\r
179 }\r
180\r
181 Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
182 }\r
183\r
184 if (EFI_ERROR (Status)) {\r
185 LanguageString = NULL;\r
186 }\r
187\r
188 return LanguageString;\r
189}\r
190\r
191\r