]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/HiiLib/HiiLanguage.c
add in a new API HiiLibGetSupportedSecondaryLanguages
[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
94 LanguageString = AllocatePool (BufferSize);\r
95 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);\r
96 \r
97 if (Status == EFI_BUFFER_TOO_SMALL) {\r
98 gBS->FreePool (LanguageString);\r
99 LanguageString = AllocatePool (BufferSize);\r
100 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);\r
101 }\r
102\r
103 if (EFI_ERROR (Status)) {\r
104 LanguageString = NULL;\r
105 }\r
106\r
107 return LanguageString;\r
108}\r
109\r
110\r
111UINT16\r
112EFIAPI\r
113HiiLibGetSupportedLanguageNumber (\r
114 IN EFI_HII_HANDLE HiiHandle\r
115 )\r
116{\r
117 CHAR8 *Languages;\r
118 CHAR8 *LanguageString;\r
119 UINT16 LangNumber;\r
120 CHAR8 Lang[RFC_3066_ENTRY_SIZE];\r
121\r
122 Languages = HiiLibGetSupportedLanguages (HiiHandle);\r
123 if (Languages == NULL) {\r
124 return 0;\r
125 }\r
126\r
127 LangNumber = 0;\r
128 LanguageString = Languages;\r
129 while (*LanguageString != 0) {\r
130 HiiLibGetNextLanguage (&LanguageString, Lang);\r
131 LangNumber++;\r
132 }\r
133 gBS->FreePool (Languages);\r
134\r
135 return LangNumber;\r
136}\r