]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/HiiLib/HiiLanguage.c
Clean up ExtendedHiiLib, HiiLib, IfrSupportLib, ExtendedIfrSupportLib for Doxygen...
[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
ad1b3619 18/**\r
19 Determine what is the current language setting. The space reserved for Lang\r
20 must be at least RFC_3066_ENTRY_SIZE bytes;\r
21\r
22 If Lang is NULL, then ASSERT.\r
23\r
24 @param Lang Pointer of system language. Lang will always be filled with \r
25 a valid RFC 3066 language string. If "PlatformLang" is not\r
26 set in the system, the default language specifed by PcdUefiVariableDefaultPlatformLang\r
27 is returned.\r
28\r
29 @return EFI_SUCCESS If the EFI Variable with "PlatformLang" is set and return in Lang.\r
30 @return EFI_NOT_FOUND If the EFI Variable with "PlatformLang" is not set, but a valid default language is return in Lang.\r
31\r
32**/\r
e52c5a9f 33EFI_STATUS\r
34EFIAPI\r
35HiiLibGetCurrentLanguage (\r
36 OUT CHAR8 *Lang\r
37 )\r
38{\r
39 EFI_STATUS Status;\r
40 UINTN Size;\r
41\r
42 ASSERT (Lang != NULL);\r
43\r
44 //\r
45 // Get current language setting\r
46 //\r
47 Size = RFC_3066_ENTRY_SIZE;\r
48 Status = gRT->GetVariable (\r
49 L"PlatformLang",\r
50 &gEfiGlobalVariableGuid,\r
51 NULL,\r
52 &Size,\r
53 Lang\r
54 );\r
55\r
56 if (EFI_ERROR (Status)) {\r
57 AsciiStrCpy (Lang, (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLang));\r
58 }\r
59\r
60 return Status;\r
61}\r
62\r
63\r
ad1b3619 64/**\r
65 Get next language from language code list (with separator ';').\r
66\r
67 If LangCode is NULL, then ASSERT.\r
68 If Lang is NULL, then ASSERT.\r
69\r
70 @param LangCode On input: point to first language in the list. On\r
71 output: point to next language in the list, or\r
72 NULL if no more language in the list.\r
73 @param Lang The first language in the list.\r
74\r
75**/\r
e52c5a9f 76VOID\r
77EFIAPI\r
78HiiLibGetNextLanguage (\r
79 IN OUT CHAR8 **LangCode,\r
80 OUT CHAR8 *Lang\r
81 )\r
82{\r
83 UINTN Index;\r
84 CHAR8 *StringPtr;\r
85\r
86 ASSERT (LangCode != NULL);\r
87 ASSERT (Lang != NULL);\r
88\r
89 Index = 0;\r
90 StringPtr = *LangCode;\r
91 while (StringPtr[Index] != 0 && StringPtr[Index] != ';') {\r
92 Index++;\r
93 }\r
94\r
95 CopyMem (Lang, StringPtr, Index);\r
96 Lang[Index] = 0;\r
97\r
98 if (StringPtr[Index] == ';') {\r
99 Index++;\r
100 }\r
101 *LangCode = StringPtr + Index;\r
102}\r
103\r
104\r
ad1b3619 105/**\r
106 This function returns the list of supported languages, in the format specified\r
107 in UEFI specification Appendix M.\r
108\r
109 If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
110\r
111 @param HiiHandle The HII package list handle.\r
112\r
113 @retval !NULL The supported languages.\r
114 @retval NULL If Supported Languages can not be retrived.\r
115\r
116**/\r
e52c5a9f 117CHAR8 *\r
118EFIAPI\r
119HiiLibGetSupportedLanguages (\r
120 IN EFI_HII_HANDLE HiiHandle\r
121 )\r
122{\r
123 EFI_STATUS Status;\r
124 UINTN BufferSize;\r
125 CHAR8 *LanguageString;\r
126\r
127 ASSERT (HiiHandle != NULL);\r
128 ASSERT (IsHiiHandleRegistered (HiiHandle));\r
129 //\r
130 // Collect current supported Languages for given HII handle\r
131 //\r
132 BufferSize = 0x1000;\r
c344685c 133 LanguageString = AllocateZeroPool (BufferSize);\r
134 if (LanguageString == NULL) {\r
135 return NULL;\r
136 }\r
54cf8780 137\r
138 LocateHiiProtocols ();\r
c344685c 139 \r
e52c5a9f 140 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);\r
141 \r
142 if (Status == EFI_BUFFER_TOO_SMALL) {\r
143 gBS->FreePool (LanguageString);\r
c344685c 144 LanguageString = AllocateZeroPool (BufferSize);\r
145 if (LanguageString == NULL) {\r
146 return NULL;\r
147 }\r
148\r
e52c5a9f 149 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);\r
150 }\r
151\r
152 if (EFI_ERROR (Status)) {\r
153 LanguageString = NULL;\r
154 }\r
155\r
156 return LanguageString;\r
157}\r
158\r
159\r
ad1b3619 160/**\r
161 This function returns the number of supported languages on HiiHandle.\r
162\r
163 If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
164 If not enough resource to complete the operation, then ASSERT.\r
165\r
166 @param HiiHandle The HII package list handle.\r
167\r
168 @return The number of supported languages.\r
169\r
170**/\r
e52c5a9f 171UINT16\r
172EFIAPI\r
173HiiLibGetSupportedLanguageNumber (\r
174 IN EFI_HII_HANDLE HiiHandle\r
175 )\r
176{\r
177 CHAR8 *Languages;\r
178 CHAR8 *LanguageString;\r
179 UINT16 LangNumber;\r
180 CHAR8 Lang[RFC_3066_ENTRY_SIZE];\r
181\r
182 Languages = HiiLibGetSupportedLanguages (HiiHandle);\r
183 if (Languages == NULL) {\r
184 return 0;\r
185 }\r
186\r
187 LangNumber = 0;\r
188 LanguageString = Languages;\r
189 while (*LanguageString != 0) {\r
190 HiiLibGetNextLanguage (&LanguageString, Lang);\r
191 LangNumber++;\r
192 }\r
193 gBS->FreePool (Languages);\r
194\r
195 return LangNumber;\r
196}\r
c344685c 197\r
ad1b3619 198/**\r
199 This function returns the list of supported 2nd languages, in the format specified\r
200 in UEFI specification Appendix M.\r
201\r
202 If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
203 If not enough resource to complete the operation, then ASSERT.\r
204\r
205 @param HiiHandle The HII package list handle.\r
206 @param FirstLanguage Pointer to language name buffer.\r
207 \r
208 @return The supported languages.\r
209\r
210**/\r
c344685c 211CHAR8 *\r
212EFIAPI\r
213HiiLibGetSupportedSecondaryLanguages (\r
214 IN EFI_HII_HANDLE HiiHandle,\r
215 IN CONST CHAR8 *FirstLanguage\r
216 )\r
217{\r
218 EFI_STATUS Status;\r
219 UINTN BufferSize;\r
220 CHAR8 *LanguageString;\r
221\r
222 ASSERT (HiiHandle != NULL);\r
223 ASSERT (IsHiiHandleRegistered (HiiHandle));\r
224 //\r
225 // Collect current supported 2nd Languages for given HII handle\r
226 //\r
227 BufferSize = 0x1000;\r
228 LanguageString = AllocateZeroPool (BufferSize);\r
229 if (LanguageString == NULL) {\r
230 return NULL;\r
231 }\r
54cf8780 232\r
233 LocateHiiProtocols ();\r
234 \r
c344685c 235 Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
236 \r
237 if (Status == EFI_BUFFER_TOO_SMALL) {\r
238 gBS->FreePool (LanguageString);\r
239 LanguageString = AllocateZeroPool (BufferSize);\r
240 if (LanguageString == NULL) {\r
241 return NULL;\r
242 }\r
243\r
244 Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
245 }\r
246\r
247 if (EFI_ERROR (Status)) {\r
248 LanguageString = NULL;\r
249 }\r
250\r
251 return LanguageString;\r
252}\r
253\r
254\r