)\r
{\r
EFI_STATUS Status;\r
- EFI_HII_UPDATE_DATA UpdateData;\r
- IFR_OPTION *OptionList;\r
CHAR8 *LanguageString;\r
CHAR8 *LangCode;\r
CHAR8 *Lang;\r
CHAR8 *CurrentLang;\r
CHAR8 *BestLanguage;\r
UINTN OptionCount;\r
- EFI_STRING_ID Token;\r
CHAR16 *StringBuffer;\r
UINTN BufferSize;\r
- UINTN Index;\r
EFI_HII_HANDLE HiiHandle;\r
+ VOID *OptionsOpCodeHandle;\r
+ VOID *StartOpCodeHandle;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ EFI_IFR_GUID_LABEL *EndLabel;\r
+ BOOLEAN FirstFlag;\r
\r
if (InitializeHiiData) {\r
//\r
\r
\r
//\r
- // Allocate space for creation of UpdateData Buffer\r
+ // Init OpCode Handle and Allocate space for creation of UpdateData Buffer\r
//\r
- UpdateData.BufferSize = 0x1000;\r
- UpdateData.Data = AllocateZeroPool (0x1000);\r
- ASSERT (UpdateData.Data != NULL);\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != NULL);\r
\r
- OptionList = AllocateZeroPool (0x1000);\r
- ASSERT (OptionList != NULL);\r
+ EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (EndOpCodeHandle != NULL);\r
+\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
+ //\r
+ // Create Hii Extend Label OpCode as the start opcode\r
+ //\r
+ StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ StartLabel->Number = LABEL_SELECT_LANGUAGE;\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the end opcode\r
+ //\r
+ EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ EndLabel->Number = LABEL_END;\r
\r
//\r
// Collect the languages from what our current Language support is based on our VFR\r
//\r
ASSERT (BestLanguage != NULL);\r
\r
+ OptionCount = 0;\r
+ LangCode = LanguageString;\r
+ FirstFlag = FALSE;\r
+ \r
+ if (gFrontPagePrivate.LanguageToken == NULL) {\r
+ while (*LangCode != 0) {\r
+ HiiLibGetNextLanguage (&LangCode, Lang);\r
+ OptionCount ++;\r
+ }\r
+ gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID));\r
+ ASSERT (gFrontPagePrivate.LanguageToken != NULL);\r
+ FirstFlag = TRUE;\r
+ }\r
+\r
OptionCount = 0;\r
LangCode = LanguageString;\r
while (*LangCode != 0) {\r
GetNextLanguage (&LangCode, Lang);\r
\r
- if (gFrontPagePrivate.LanguageToken == NULL) {\r
+ if (FirstFlag) {\r
//\r
// Get Language Name from String Package. The StringId of Printable Language\r
// Name is always 1 which is generated by StringGather Tool.\r
}\r
ASSERT_EFI_ERROR (Status);\r
\r
- Token = HiiSetString (HiiHandle, 0, StringBuffer, NULL);\r
+ //\r
+ // Save the string Id for each language\r
+ //\r
+ gFrontPagePrivate.LanguageToken[OptionCount] = HiiSetString (HiiHandle, 0, StringBuffer, NULL);\r
FreePool (StringBuffer);\r
- } else {\r
- Token = gFrontPagePrivate.LanguageToken[OptionCount];\r
}\r
\r
if (AsciiStrCmp (Lang, BestLanguage) == 0) {\r
- OptionList[OptionCount].Flags = EFI_IFR_OPTION_DEFAULT;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ gFrontPagePrivate.LanguageToken[OptionCount],\r
+ EFI_IFR_OPTION_DEFAULT,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ (UINT8) OptionCount\r
+ );\r
} else {\r
- OptionList[OptionCount].Flags = 0;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ gFrontPagePrivate.LanguageToken[OptionCount],\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ (UINT8) OptionCount\r
+ );\r
}\r
- OptionList[OptionCount].StringToken = Token;\r
- OptionList[OptionCount].Value.u8 = (UINT8) OptionCount;\r
\r
OptionCount++;\r
}\r
FreePool (Lang);\r
FreePool (LanguageString);\r
\r
- UpdateData.Offset = 0;\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ StartOpCodeHandle,\r
FRONT_PAGE_KEY_LANGUAGE,\r
0,\r
0,\r
STRING_TOKEN (STR_LANGUAGE_SELECT_HELP),\r
EFI_IFR_FLAG_CALLBACK,\r
EFI_IFR_NUMERIC_SIZE_1,\r
- OptionList,\r
- OptionCount,\r
- &UpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
\r
- Status = IfrLibUpdateForm (\r
+ Status = HiiUpdateForm (\r
HiiHandle,\r
&mFrontPageGuid,\r
FRONT_PAGE_FORM_ID,\r
- LABEL_SELECT_LANGUAGE,\r
- FALSE,\r
- &UpdateData\r
+ StartOpCodeHandle, // LABEL_SELECT_LANGUAGE\r
+ EndOpCodeHandle // LABEL_END\r
);\r
\r
- //\r
- // Save the string Id for each language\r
- //\r
- gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID));\r
- ASSERT (gFrontPagePrivate.LanguageToken != NULL);\r
- for (Index = 0; Index < OptionCount; Index++) {\r
- gFrontPagePrivate.LanguageToken[Index] = OptionList[Index].StringToken;\r
- }\r
-\r
- FreePool (UpdateData.Data);\r
- FreePool (OptionList);\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
return Status;\r
}\r
\r