summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Library/UefiHiiLib/HiiLanguage.c
diff options
context:
space:
mode:
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>2008-11-13 09:06:25 +0000
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>2008-11-13 09:06:25 +0000
commit08e4b3cfed01e5c92ac404fb061beda52f39f638 (patch)
tree3d56c6ebe3a03a3d9a1a43df240bd503503fd05c /MdeModulePkg/Library/UefiHiiLib/HiiLanguage.c
parentd68a10d021f2fe7b193d9532d6d4af572d819ef1 (diff)
downloadedk2-08e4b3cfed01e5c92ac404fb061beda52f39f638.zip
edk2-08e4b3cfed01e5c92ac404fb061beda52f39f638.tar.gz
edk2-08e4b3cfed01e5c92ac404fb061beda52f39f638.tar.bz2
Add UefiHiiLib & UefiIfrSupportLib. They are from MdePkg.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6517 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Library/UefiHiiLib/HiiLanguage.c')
-rw-r--r--MdeModulePkg/Library/UefiHiiLib/HiiLanguage.c206
1 files changed, 206 insertions, 0 deletions
diff --git a/MdeModulePkg/Library/UefiHiiLib/HiiLanguage.c b/MdeModulePkg/Library/UefiHiiLib/HiiLanguage.c
new file mode 100644
index 0000000..147e5a3
--- /dev/null
+++ b/MdeModulePkg/Library/UefiHiiLib/HiiLanguage.c
@@ -0,0 +1,206 @@
+/** @file
+ Language related HII Library implementation.
+
+ Copyright (c) 2006 - 2008, Intel Corporation<BR>
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+
+#include "InternalHiiLib.h"
+
+/**
+ Get next language from language code list (with separator ';').
+
+ If LangCode is NULL, then ASSERT.
+ If Lang is NULL, then ASSERT.
+
+ @param LangCode On input: point to first language in the list. On
+ output: point to next language in the list, or
+ NULL if no more language in the list.
+ @param Lang The first language in the list.
+
+**/
+VOID
+EFIAPI
+HiiLibGetNextLanguage (
+ IN OUT CHAR8 **LangCode,
+ OUT CHAR8 *Lang
+ )
+{
+ UINTN Index;
+ CHAR8 *StringPtr;
+
+ ASSERT (LangCode != NULL);
+ ASSERT (*LangCode != NULL);
+ ASSERT (Lang != NULL);
+
+ Index = 0;
+ StringPtr = *LangCode;
+ while (StringPtr[Index] != 0 && StringPtr[Index] != ';') {
+ Index++;
+ }
+
+ CopyMem (Lang, StringPtr, Index);
+ Lang[Index] = 0;
+
+ if (StringPtr[Index] == ';') {
+ Index++;
+ }
+ *LangCode = StringPtr + Index;
+}
+
+
+/**
+ This function returns the list of supported languages, in the format specified
+ in UEFI specification Appendix M.
+
+ If HiiHandle is not a valid Handle in the default HII database, then ASSERT.
+
+ @param HiiHandle The HII package list handle.
+
+ @retval !NULL The supported languages.
+ @retval NULL If Supported Languages can not be retrived.
+
+**/
+CHAR8 *
+EFIAPI
+HiiLibGetSupportedLanguages (
+ IN EFI_HII_HANDLE HiiHandle
+ )
+{
+ EFI_STATUS Status;
+ UINTN BufferSize;
+ CHAR8 *LanguageString;
+
+ ASSERT (IsHiiHandleRegistered (HiiHandle));
+ //
+ // Collect current supported Languages for given HII handle
+ // First try allocate 4K buffer to store the current supported languages.
+ //
+ BufferSize = 0x1000;
+ LanguageString = AllocateZeroPool (BufferSize);
+ if (LanguageString == NULL) {
+ return NULL;
+ }
+
+ Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);
+
+ if (Status == EFI_BUFFER_TOO_SMALL) {
+ FreePool (LanguageString);
+ LanguageString = AllocateZeroPool (BufferSize);
+ if (LanguageString == NULL) {
+ return NULL;
+ }
+
+ Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);
+ }
+
+ if (EFI_ERROR (Status)) {
+ LanguageString = NULL;
+ }
+
+ return LanguageString;
+}
+
+
+/**
+ This function returns the number of supported languages on HiiHandle.
+
+ If HiiHandle is not a valid Handle in the default HII database, then ASSERT.
+ If not enough resource to complete the operation, then ASSERT.
+
+ @param HiiHandle The HII package list handle.
+
+ @return The number of supported languages.
+
+**/
+UINT16
+EFIAPI
+HiiLibGetSupportedLanguageNumber (
+ IN EFI_HII_HANDLE HiiHandle
+ )
+{
+ CHAR8 *Languages;
+ CHAR8 *LanguageString;
+ UINT16 LangNumber;
+ CHAR8 Lang[RFC_3066_ENTRY_SIZE];
+
+ Languages = HiiLibGetSupportedLanguages (HiiHandle);
+ if (Languages == NULL) {
+ return 0;
+ }
+
+ LangNumber = 0;
+ LanguageString = Languages;
+ while (*LanguageString != 0) {
+ HiiLibGetNextLanguage (&LanguageString, Lang);
+ LangNumber++;
+ }
+ FreePool (Languages);
+
+ return LangNumber;
+}
+
+/**
+ This function returns the list of supported 2nd languages, in the format specified
+ in UEFI specification Appendix M.
+
+ If HiiHandle is not a valid Handle in the default HII database, then ASSERT.
+ If not enough resource to complete the operation, then ASSERT.
+
+ @param HiiHandle The HII package list handle.
+ @param FirstLanguage Pointer to language name buffer.
+
+ @return The supported languages.
+
+**/
+CHAR8 *
+EFIAPI
+HiiLibGetSupportedSecondaryLanguages (
+ IN EFI_HII_HANDLE HiiHandle,
+ IN CONST CHAR8 *FirstLanguage
+ )
+{
+ EFI_STATUS Status;
+ UINTN BufferSize;
+ CHAR8 *LanguageString;
+
+ ASSERT (HiiHandle != NULL);
+ ASSERT (IsHiiHandleRegistered (HiiHandle));
+ //
+ // Collect current supported 2nd Languages for given HII handle
+ // First try allocate 4K buffer to store the current supported 2nd languages.
+ //
+ BufferSize = 0x1000;
+ LanguageString = AllocateZeroPool (BufferSize);
+ if (LanguageString == NULL) {
+ return NULL;
+ }
+
+ Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);
+
+ if (Status == EFI_BUFFER_TOO_SMALL) {
+ FreePool (LanguageString);
+ LanguageString = AllocateZeroPool (BufferSize);
+ if (LanguageString == NULL) {
+ return NULL;
+ }
+
+ Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);
+ }
+
+ if (EFI_ERROR (Status)) {
+ LanguageString = NULL;
+ }
+
+ return LanguageString;
+}
+
+