]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/HiiLib/HiiLanguage.c
Clean up HiiLib.
[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
e52c5a9f 127 ASSERT (IsHiiHandleRegistered (HiiHandle));\r
128 //\r
129 // Collect current supported Languages for given HII handle\r
130 //\r
131 BufferSize = 0x1000;\r
c344685c 132 LanguageString = AllocateZeroPool (BufferSize);\r
133 if (LanguageString == NULL) {\r
134 return NULL;\r
135 }\r
54cf8780 136\r
137 LocateHiiProtocols ();\r
c344685c 138 \r
e52c5a9f 139 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);\r
140 \r
141 if (Status == EFI_BUFFER_TOO_SMALL) {\r
29870c8d 142 FreePool (LanguageString);\r
c344685c 143 LanguageString = AllocateZeroPool (BufferSize);\r
144 if (LanguageString == NULL) {\r
145 return NULL;\r
146 }\r
147\r
e52c5a9f 148 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);\r
149 }\r
150\r
151 if (EFI_ERROR (Status)) {\r
152 LanguageString = NULL;\r
153 }\r
154\r
155 return LanguageString;\r
156}\r
157\r
158\r
ad1b3619 159/**\r
160 This function returns the number of supported languages on HiiHandle.\r
161\r
162 If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
163 If not enough resource to complete the operation, then ASSERT.\r
164\r
165 @param HiiHandle The HII package list handle.\r
166\r
167 @return The number of supported languages.\r
168\r
169**/\r
e52c5a9f 170UINT16\r
171EFIAPI\r
172HiiLibGetSupportedLanguageNumber (\r
173 IN EFI_HII_HANDLE HiiHandle\r
174 )\r
175{\r
176 CHAR8 *Languages;\r
177 CHAR8 *LanguageString;\r
178 UINT16 LangNumber;\r
179 CHAR8 Lang[RFC_3066_ENTRY_SIZE];\r
180\r
181 Languages = HiiLibGetSupportedLanguages (HiiHandle);\r
182 if (Languages == NULL) {\r
183 return 0;\r
184 }\r
185\r
186 LangNumber = 0;\r
187 LanguageString = Languages;\r
188 while (*LanguageString != 0) {\r
189 HiiLibGetNextLanguage (&LanguageString, Lang);\r
190 LangNumber++;\r
191 }\r
29870c8d 192 FreePool (Languages);\r
e52c5a9f 193\r
194 return LangNumber;\r
195}\r
c344685c 196\r
ad1b3619 197/**\r
198 This function returns the list of supported 2nd languages, in the format specified\r
199 in UEFI specification Appendix M.\r
200\r
201 If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
202 If not enough resource to complete the operation, then ASSERT.\r
203\r
204 @param HiiHandle The HII package list handle.\r
205 @param FirstLanguage Pointer to language name buffer.\r
206 \r
207 @return The supported languages.\r
208\r
209**/\r
c344685c 210CHAR8 *\r
211EFIAPI\r
212HiiLibGetSupportedSecondaryLanguages (\r
213 IN EFI_HII_HANDLE HiiHandle,\r
214 IN CONST CHAR8 *FirstLanguage\r
215 )\r
216{\r
217 EFI_STATUS Status;\r
218 UINTN BufferSize;\r
219 CHAR8 *LanguageString;\r
220\r
221 ASSERT (HiiHandle != NULL);\r
222 ASSERT (IsHiiHandleRegistered (HiiHandle));\r
223 //\r
224 // Collect current supported 2nd Languages for given HII handle\r
225 //\r
226 BufferSize = 0x1000;\r
227 LanguageString = AllocateZeroPool (BufferSize);\r
228 if (LanguageString == NULL) {\r
229 return NULL;\r
230 }\r
54cf8780 231\r
232 LocateHiiProtocols ();\r
233 \r
c344685c 234 Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
235 \r
236 if (Status == EFI_BUFFER_TOO_SMALL) {\r
29870c8d 237 FreePool (LanguageString);\r
c344685c 238 LanguageString = AllocateZeroPool (BufferSize);\r
239 if (LanguageString == NULL) {\r
240 return NULL;\r
241 }\r
242\r
243 Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
244 }\r
245\r
246 if (EFI_ERROR (Status)) {\r
247 LanguageString = NULL;\r
248 }\r
249\r
250 return LanguageString;\r
251}\r
252\r
253\r