X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdeModulePkg%2FUniversal%2FDisplayEngineDxe%2FFormDisplay.c;h=a7b7dc743aae6d553c4f50efd80a444319e6c7de;hb=1436aea4d5707e672672a11bda72be2c63c936c3;hp=a3898dc2ecffdb054a4c7b8b92dce061b175bf7e;hpb=544cb0132dc1778b9e791202995533523fa6cccd;p=mirror_edk2.git diff --git a/MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.c b/MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.c index a3898dc2ec..a7b7dc743a 100644 --- a/MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.c +++ b/MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.c @@ -12,7 +12,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // Search table for UiDisplayMenu() // -SCAN_CODE_TO_SCREEN_OPERATION gScanCodeToOperation[] = { +SCAN_CODE_TO_SCREEN_OPERATION gScanCodeToOperation[] = { { SCAN_UP, UiUp, @@ -43,7 +43,7 @@ SCAN_CODE_TO_SCREEN_OPERATION gScanCodeToOperation[] = { } }; -UINTN mScanCodeNumber = ARRAY_SIZE (gScanCodeToOperation); +UINTN mScanCodeNumber = ARRAY_SIZE (gScanCodeToOperation); SCREEN_OPERATION_T0_CONTROL_FLAG gScreenOperationToControlFlag[] = { { @@ -89,79 +89,79 @@ SCREEN_OPERATION_T0_CONTROL_FLAG gScreenOperationToControlFlag[] = { }; EFI_GUID gDisplayEngineGuid = { - 0xE38C1029, 0xE38F, 0x45b9, {0x8F, 0x0D, 0xE2, 0xE6, 0x0B, 0xC9, 0xB2, 0x62} + 0xE38C1029, 0xE38F, 0x45b9, { 0x8F, 0x0D, 0xE2, 0xE6, 0x0B, 0xC9, 0xB2, 0x62 } }; -BOOLEAN gMisMatch; -EFI_SCREEN_DESCRIPTOR gStatementDimensions; -BOOLEAN mStatementLayoutIsChanged = TRUE; -USER_INPUT *gUserInput; -FORM_DISPLAY_ENGINE_FORM *gFormData; -EFI_HII_HANDLE gHiiHandle; -UINT16 gDirection; -LIST_ENTRY gMenuOption; -DISPLAY_HIGHLIGHT_MENU_INFO gHighligthMenuInfo = {0}; -BOOLEAN mIsFirstForm = TRUE; -FORM_ENTRY_INFO gOldFormEntry = {0}; +BOOLEAN gMisMatch; +EFI_SCREEN_DESCRIPTOR gStatementDimensions; +BOOLEAN mStatementLayoutIsChanged = TRUE; +USER_INPUT *gUserInput; +FORM_DISPLAY_ENGINE_FORM *gFormData; +EFI_HII_HANDLE gHiiHandle; +UINT16 gDirection; +LIST_ENTRY gMenuOption; +DISPLAY_HIGHLIGHT_MENU_INFO gHighligthMenuInfo = { 0 }; +BOOLEAN mIsFirstForm = TRUE; +FORM_ENTRY_INFO gOldFormEntry = { 0 }; // // Browser Global Strings // -CHAR16 *gReconnectConfirmChanges; -CHAR16 *gReconnectFail; -CHAR16 *gReconnectRequired; -CHAR16 *gChangesOpt; -CHAR16 *gFormNotFound; -CHAR16 *gNoSubmitIf; -CHAR16 *gBrowserError; -CHAR16 *gSaveFailed; -CHAR16 *gNoSubmitIfFailed; -CHAR16 *gSaveProcess; -CHAR16 *gSaveNoSubmitProcess; -CHAR16 *gDiscardChange; -CHAR16 *gJumpToFormSet; -CHAR16 *gCheckError; -CHAR16 *gPromptForData; -CHAR16 *gPromptForPassword; -CHAR16 *gPromptForNewPassword; -CHAR16 *gConfirmPassword; -CHAR16 *gConfirmError; -CHAR16 *gPassowordInvalid; -CHAR16 *gPressEnter; -CHAR16 *gEmptyString; -CHAR16 *gMiniString; -CHAR16 *gOptionMismatch; -CHAR16 *gFormSuppress; -CHAR16 *gProtocolNotFound; -CHAR16 *gConfirmDefaultMsg; -CHAR16 *gConfirmSubmitMsg; -CHAR16 *gConfirmDiscardMsg; -CHAR16 *gConfirmResetMsg; -CHAR16 *gConfirmExitMsg; -CHAR16 *gConfirmSubmitMsg2nd; -CHAR16 *gConfirmDefaultMsg2nd; -CHAR16 *gConfirmResetMsg2nd; -CHAR16 *gConfirmExitMsg2nd; -CHAR16 *gConfirmOpt; -CHAR16 *gConfirmOptYes; -CHAR16 *gConfirmOptNo; -CHAR16 *gConfirmOptOk; -CHAR16 *gConfirmOptCancel; -CHAR16 *gYesOption; -CHAR16 *gNoOption; -CHAR16 *gOkOption; -CHAR16 *gCancelOption; -CHAR16 *gErrorPopup; -CHAR16 *gWarningPopup; -CHAR16 *gInfoPopup; -CHAR16 *gConfirmMsgConnect; -CHAR16 *gConfirmMsgEnd; -CHAR16 *gPasswordUnsupported; -CHAR16 gModalSkipColumn; -CHAR16 gPromptBlockWidth; -CHAR16 gOptionBlockWidth; -CHAR16 gHelpBlockWidth; -CHAR16 *mUnknownString; +CHAR16 *gReconnectConfirmChanges; +CHAR16 *gReconnectFail; +CHAR16 *gReconnectRequired; +CHAR16 *gChangesOpt; +CHAR16 *gFormNotFound; +CHAR16 *gNoSubmitIf; +CHAR16 *gBrowserError; +CHAR16 *gSaveFailed; +CHAR16 *gNoSubmitIfFailed; +CHAR16 *gSaveProcess; +CHAR16 *gSaveNoSubmitProcess; +CHAR16 *gDiscardChange; +CHAR16 *gJumpToFormSet; +CHAR16 *gCheckError; +CHAR16 *gPromptForData; +CHAR16 *gPromptForPassword; +CHAR16 *gPromptForNewPassword; +CHAR16 *gConfirmPassword; +CHAR16 *gConfirmError; +CHAR16 *gPassowordInvalid; +CHAR16 *gPressEnter; +CHAR16 *gEmptyString; +CHAR16 *gMiniString; +CHAR16 *gOptionMismatch; +CHAR16 *gFormSuppress; +CHAR16 *gProtocolNotFound; +CHAR16 *gConfirmDefaultMsg; +CHAR16 *gConfirmSubmitMsg; +CHAR16 *gConfirmDiscardMsg; +CHAR16 *gConfirmResetMsg; +CHAR16 *gConfirmExitMsg; +CHAR16 *gConfirmSubmitMsg2nd; +CHAR16 *gConfirmDefaultMsg2nd; +CHAR16 *gConfirmResetMsg2nd; +CHAR16 *gConfirmExitMsg2nd; +CHAR16 *gConfirmOpt; +CHAR16 *gConfirmOptYes; +CHAR16 *gConfirmOptNo; +CHAR16 *gConfirmOptOk; +CHAR16 *gConfirmOptCancel; +CHAR16 *gYesOption; +CHAR16 *gNoOption; +CHAR16 *gOkOption; +CHAR16 *gCancelOption; +CHAR16 *gErrorPopup; +CHAR16 *gWarningPopup; +CHAR16 *gInfoPopup; +CHAR16 *gConfirmMsgConnect; +CHAR16 *gConfirmMsgEnd; +CHAR16 *gPasswordUnsupported; +CHAR16 gModalSkipColumn; +CHAR16 gPromptBlockWidth; +CHAR16 gOptionBlockWidth; +CHAR16 gHelpBlockWidth; +CHAR16 *mUnknownString; FORM_DISPLAY_DRIVER_PRIVATE_DATA mPrivateData = { FORM_DISPLAY_DRIVER_SIGNATURE, @@ -177,7 +177,6 @@ FORM_DISPLAY_DRIVER_PRIVATE_DATA mPrivateData = { } }; - /** Get the string based on the StringId and HII Package List Handle. @@ -190,8 +189,8 @@ FORM_DISPLAY_DRIVER_PRIVATE_DATA mPrivateData = { **/ CHAR16 * GetToken ( - IN EFI_STRING_ID Token, - IN EFI_HII_HANDLE HiiHandle + IN EFI_STRING_ID Token, + IN EFI_HII_HANDLE HiiHandle ) { EFI_STRING String; @@ -202,10 +201,9 @@ GetToken ( ASSERT (String != NULL); } - return (CHAR16 *) String; + return (CHAR16 *)String; } - /** Initialize the HII String Token to the correct values. @@ -216,56 +214,56 @@ InitializeDisplayStrings ( ) { gReconnectConfirmChanges = GetToken (STRING_TOKEN (RECONNECT_CONFIRM_CHANGES), gHiiHandle); - mUnknownString = GetToken (STRING_TOKEN (UNKNOWN_STRING), gHiiHandle); - gSaveFailed = GetToken (STRING_TOKEN (SAVE_FAILED), gHiiHandle); - gNoSubmitIfFailed = GetToken (STRING_TOKEN (NO_SUBMIT_IF_CHECK_FAILED), gHiiHandle); - gReconnectFail = GetToken (STRING_TOKEN (RECONNECT_FAILED), gHiiHandle); - gReconnectRequired = GetToken (STRING_TOKEN (RECONNECT_REQUIRED), gHiiHandle); - gChangesOpt = GetToken (STRING_TOKEN (RECONNECT_CHANGES_OPTIONS), gHiiHandle); - gSaveProcess = GetToken (STRING_TOKEN (DISCARD_OR_JUMP), gHiiHandle); - gSaveNoSubmitProcess = GetToken (STRING_TOKEN (DISCARD_OR_CHECK), gHiiHandle); - gDiscardChange = GetToken (STRING_TOKEN (DISCARD_OR_JUMP_DISCARD), gHiiHandle); - gJumpToFormSet = GetToken (STRING_TOKEN (DISCARD_OR_JUMP_JUMP), gHiiHandle); - gCheckError = GetToken (STRING_TOKEN (DISCARD_OR_CHECK_CHECK), gHiiHandle); - gPromptForData = GetToken (STRING_TOKEN (PROMPT_FOR_DATA), gHiiHandle); - gPromptForPassword = GetToken (STRING_TOKEN (PROMPT_FOR_PASSWORD), gHiiHandle); - gPromptForNewPassword = GetToken (STRING_TOKEN (PROMPT_FOR_NEW_PASSWORD), gHiiHandle); - gConfirmPassword = GetToken (STRING_TOKEN (CONFIRM_PASSWORD), gHiiHandle); - gConfirmError = GetToken (STRING_TOKEN (CONFIRM_ERROR), gHiiHandle); - gPassowordInvalid = GetToken (STRING_TOKEN (PASSWORD_INVALID), gHiiHandle); - gPressEnter = GetToken (STRING_TOKEN (PRESS_ENTER), gHiiHandle); - gEmptyString = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle); - gMiniString = GetToken (STRING_TOKEN (MINI_STRING), gHiiHandle); - gOptionMismatch = GetToken (STRING_TOKEN (OPTION_MISMATCH), gHiiHandle); - gFormSuppress = GetToken (STRING_TOKEN (FORM_SUPPRESSED), gHiiHandle); - gProtocolNotFound = GetToken (STRING_TOKEN (PROTOCOL_NOT_FOUND), gHiiHandle); - gFormNotFound = GetToken (STRING_TOKEN (STATUS_BROWSER_FORM_NOT_FOUND), gHiiHandle); - gNoSubmitIf = GetToken (STRING_TOKEN (STATUS_BROWSER_NO_SUBMIT_IF), gHiiHandle); - gBrowserError = GetToken (STRING_TOKEN (STATUS_BROWSER_ERROR), gHiiHandle); - gConfirmDefaultMsg = GetToken (STRING_TOKEN (CONFIRM_DEFAULT_MESSAGE), gHiiHandle); - gConfirmDiscardMsg = GetToken (STRING_TOKEN (CONFIRM_DISCARD_MESSAGE), gHiiHandle); - gConfirmSubmitMsg = GetToken (STRING_TOKEN (CONFIRM_SUBMIT_MESSAGE), gHiiHandle); - gConfirmResetMsg = GetToken (STRING_TOKEN (CONFIRM_RESET_MESSAGE), gHiiHandle); - gConfirmExitMsg = GetToken (STRING_TOKEN (CONFIRM_EXIT_MESSAGE), gHiiHandle); - gConfirmDefaultMsg2nd = GetToken (STRING_TOKEN (CONFIRM_DEFAULT_MESSAGE_2ND), gHiiHandle); - gConfirmSubmitMsg2nd = GetToken (STRING_TOKEN (CONFIRM_SUBMIT_MESSAGE_2ND), gHiiHandle); - gConfirmResetMsg2nd = GetToken (STRING_TOKEN (CONFIRM_RESET_MESSAGE_2ND), gHiiHandle); - gConfirmExitMsg2nd = GetToken (STRING_TOKEN (CONFIRM_EXIT_MESSAGE_2ND), gHiiHandle); - gConfirmOpt = GetToken (STRING_TOKEN (CONFIRM_OPTION), gHiiHandle); - gConfirmOptYes = GetToken (STRING_TOKEN (CONFIRM_OPTION_YES), gHiiHandle); - gConfirmOptNo = GetToken (STRING_TOKEN (CONFIRM_OPTION_NO), gHiiHandle); - gConfirmOptOk = GetToken (STRING_TOKEN (CONFIRM_OPTION_OK), gHiiHandle); - gConfirmOptCancel = GetToken (STRING_TOKEN (CONFIRM_OPTION_CANCEL), gHiiHandle); - gYesOption = GetToken (STRING_TOKEN (YES_SELECTABLE_OPTION), gHiiHandle); - gNoOption = GetToken (STRING_TOKEN (NO_SELECTABLE_OPTION), gHiiHandle); - gOkOption = GetToken (STRING_TOKEN (OK_SELECTABLE_OPTION), gHiiHandle); - gCancelOption = GetToken (STRING_TOKEN (CANCEL_SELECTABLE_OPTION), gHiiHandle); - gErrorPopup = GetToken (STRING_TOKEN (ERROR_POPUP_STRING), gHiiHandle); - gWarningPopup = GetToken (STRING_TOKEN (WARNING_POPUP_STRING), gHiiHandle); - gInfoPopup = GetToken (STRING_TOKEN (INFO_POPUP_STRING), gHiiHandle); - gConfirmMsgConnect = GetToken (STRING_TOKEN (CONFIRM_OPTION_CONNECT), gHiiHandle); - gConfirmMsgEnd = GetToken (STRING_TOKEN (CONFIRM_OPTION_END), gHiiHandle); - gPasswordUnsupported = GetToken (STRING_TOKEN (PASSWORD_NOT_SUPPORTED ), gHiiHandle); + mUnknownString = GetToken (STRING_TOKEN (UNKNOWN_STRING), gHiiHandle); + gSaveFailed = GetToken (STRING_TOKEN (SAVE_FAILED), gHiiHandle); + gNoSubmitIfFailed = GetToken (STRING_TOKEN (NO_SUBMIT_IF_CHECK_FAILED), gHiiHandle); + gReconnectFail = GetToken (STRING_TOKEN (RECONNECT_FAILED), gHiiHandle); + gReconnectRequired = GetToken (STRING_TOKEN (RECONNECT_REQUIRED), gHiiHandle); + gChangesOpt = GetToken (STRING_TOKEN (RECONNECT_CHANGES_OPTIONS), gHiiHandle); + gSaveProcess = GetToken (STRING_TOKEN (DISCARD_OR_JUMP), gHiiHandle); + gSaveNoSubmitProcess = GetToken (STRING_TOKEN (DISCARD_OR_CHECK), gHiiHandle); + gDiscardChange = GetToken (STRING_TOKEN (DISCARD_OR_JUMP_DISCARD), gHiiHandle); + gJumpToFormSet = GetToken (STRING_TOKEN (DISCARD_OR_JUMP_JUMP), gHiiHandle); + gCheckError = GetToken (STRING_TOKEN (DISCARD_OR_CHECK_CHECK), gHiiHandle); + gPromptForData = GetToken (STRING_TOKEN (PROMPT_FOR_DATA), gHiiHandle); + gPromptForPassword = GetToken (STRING_TOKEN (PROMPT_FOR_PASSWORD), gHiiHandle); + gPromptForNewPassword = GetToken (STRING_TOKEN (PROMPT_FOR_NEW_PASSWORD), gHiiHandle); + gConfirmPassword = GetToken (STRING_TOKEN (CONFIRM_PASSWORD), gHiiHandle); + gConfirmError = GetToken (STRING_TOKEN (CONFIRM_ERROR), gHiiHandle); + gPassowordInvalid = GetToken (STRING_TOKEN (PASSWORD_INVALID), gHiiHandle); + gPressEnter = GetToken (STRING_TOKEN (PRESS_ENTER), gHiiHandle); + gEmptyString = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle); + gMiniString = GetToken (STRING_TOKEN (MINI_STRING), gHiiHandle); + gOptionMismatch = GetToken (STRING_TOKEN (OPTION_MISMATCH), gHiiHandle); + gFormSuppress = GetToken (STRING_TOKEN (FORM_SUPPRESSED), gHiiHandle); + gProtocolNotFound = GetToken (STRING_TOKEN (PROTOCOL_NOT_FOUND), gHiiHandle); + gFormNotFound = GetToken (STRING_TOKEN (STATUS_BROWSER_FORM_NOT_FOUND), gHiiHandle); + gNoSubmitIf = GetToken (STRING_TOKEN (STATUS_BROWSER_NO_SUBMIT_IF), gHiiHandle); + gBrowserError = GetToken (STRING_TOKEN (STATUS_BROWSER_ERROR), gHiiHandle); + gConfirmDefaultMsg = GetToken (STRING_TOKEN (CONFIRM_DEFAULT_MESSAGE), gHiiHandle); + gConfirmDiscardMsg = GetToken (STRING_TOKEN (CONFIRM_DISCARD_MESSAGE), gHiiHandle); + gConfirmSubmitMsg = GetToken (STRING_TOKEN (CONFIRM_SUBMIT_MESSAGE), gHiiHandle); + gConfirmResetMsg = GetToken (STRING_TOKEN (CONFIRM_RESET_MESSAGE), gHiiHandle); + gConfirmExitMsg = GetToken (STRING_TOKEN (CONFIRM_EXIT_MESSAGE), gHiiHandle); + gConfirmDefaultMsg2nd = GetToken (STRING_TOKEN (CONFIRM_DEFAULT_MESSAGE_2ND), gHiiHandle); + gConfirmSubmitMsg2nd = GetToken (STRING_TOKEN (CONFIRM_SUBMIT_MESSAGE_2ND), gHiiHandle); + gConfirmResetMsg2nd = GetToken (STRING_TOKEN (CONFIRM_RESET_MESSAGE_2ND), gHiiHandle); + gConfirmExitMsg2nd = GetToken (STRING_TOKEN (CONFIRM_EXIT_MESSAGE_2ND), gHiiHandle); + gConfirmOpt = GetToken (STRING_TOKEN (CONFIRM_OPTION), gHiiHandle); + gConfirmOptYes = GetToken (STRING_TOKEN (CONFIRM_OPTION_YES), gHiiHandle); + gConfirmOptNo = GetToken (STRING_TOKEN (CONFIRM_OPTION_NO), gHiiHandle); + gConfirmOptOk = GetToken (STRING_TOKEN (CONFIRM_OPTION_OK), gHiiHandle); + gConfirmOptCancel = GetToken (STRING_TOKEN (CONFIRM_OPTION_CANCEL), gHiiHandle); + gYesOption = GetToken (STRING_TOKEN (YES_SELECTABLE_OPTION), gHiiHandle); + gNoOption = GetToken (STRING_TOKEN (NO_SELECTABLE_OPTION), gHiiHandle); + gOkOption = GetToken (STRING_TOKEN (OK_SELECTABLE_OPTION), gHiiHandle); + gCancelOption = GetToken (STRING_TOKEN (CANCEL_SELECTABLE_OPTION), gHiiHandle); + gErrorPopup = GetToken (STRING_TOKEN (ERROR_POPUP_STRING), gHiiHandle); + gWarningPopup = GetToken (STRING_TOKEN (WARNING_POPUP_STRING), gHiiHandle); + gInfoPopup = GetToken (STRING_TOKEN (INFO_POPUP_STRING), gHiiHandle); + gConfirmMsgConnect = GetToken (STRING_TOKEN (CONFIRM_OPTION_CONNECT), gHiiHandle); + gConfirmMsgEnd = GetToken (STRING_TOKEN (CONFIRM_OPTION_END), gHiiHandle); + gPasswordUnsupported = GetToken (STRING_TOKEN (PASSWORD_NOT_SUPPORTED), gHiiHandle); } /** @@ -341,7 +339,7 @@ FreeDisplayStrings ( **/ EFI_STRING_ID GetPrompt ( - IN EFI_IFR_OP_HEADER *OpCode + IN EFI_IFR_OP_HEADER *OpCode ) { EFI_IFR_STATEMENT_HEADER *Header; @@ -350,7 +348,7 @@ GetPrompt ( return 0; } - Header = (EFI_IFR_STATEMENT_HEADER *) (OpCode + 1); + Header = (EFI_IFR_STATEMENT_HEADER *)(OpCode + 1); return Header->Prompt; } @@ -366,15 +364,15 @@ GetPrompt ( **/ UINT16 GetWidth ( - IN UI_MENU_OPTION *MenuOption, - OUT UINT16 *AdjustWidth + IN UI_MENU_OPTION *MenuOption, + OUT UINT16 *AdjustWidth ) { - CHAR16 *String; - UINTN Size; - EFI_IFR_TEXT *TextOp; - UINT16 ReturnWidth; - FORM_DISPLAY_ENGINE_STATEMENT *Statement; + CHAR16 *String; + UINTN Size; + EFI_IFR_TEXT *TextOp; + UINT16 ReturnWidth; + FORM_DISPLAY_ENGINE_STATEMENT *Statement; Statement = MenuOption->ThisTag; @@ -385,6 +383,7 @@ GetWidth ( if (AdjustWidth != NULL) { *AdjustWidth = LEFT_SKIPPED_COLUMNS; } + return (UINT16)(gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * (gModalSkipColumn + LEFT_SKIPPED_COLUMNS)); } @@ -394,7 +393,7 @@ GetWidth ( // See if the second text parameter is really NULL // if (Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) { - TextOp = (EFI_IFR_TEXT *) Statement->OpCode; + TextOp = (EFI_IFR_TEXT *)Statement->OpCode; if (TextOp->TextTwo != 0) { String = GetToken (TextOp->TextTwo, gFormData->HiiHandle); Size = StrLen (String); @@ -411,24 +410,25 @@ GetWidth ( // Allow a wide display if text op-code and no secondary text op-code // ((Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) && (Size == 0)) - ) { - + ) + { // // Return the space width. // if (AdjustWidth != NULL) { *AdjustWidth = 2; } + // // Keep consistent with current behavior. // - ReturnWidth = (UINT16) (gPromptBlockWidth + gOptionBlockWidth - 2); + ReturnWidth = (UINT16)(gPromptBlockWidth + gOptionBlockWidth - 2); } else { if (AdjustWidth != NULL) { *AdjustWidth = 1; } - ReturnWidth = (UINT16) (gPromptBlockWidth - 1); + ReturnWidth = (UINT16)(gPromptBlockWidth - 1); } // @@ -462,25 +462,25 @@ GetWidth ( **/ UINT16 GetLineByWidth ( - IN CHAR16 *InputString, - IN UINT16 LineWidth, - IN OUT UINT16 *GlyphWidth, - IN OUT UINTN *Index, - OUT CHAR16 **OutputString + IN CHAR16 *InputString, + IN UINT16 LineWidth, + IN OUT UINT16 *GlyphWidth, + IN OUT UINTN *Index, + OUT CHAR16 **OutputString ) { - UINT16 StrOffset; - UINT16 GlyphOffset; - UINT16 OriginalGlyphWidth; - BOOLEAN ReturnFlag; - UINT16 LastSpaceOffset; - UINT16 LastGlyphWidth; - - if (InputString == NULL || Index == NULL || OutputString == NULL) { + UINT16 StrOffset; + UINT16 GlyphOffset; + UINT16 OriginalGlyphWidth; + BOOLEAN ReturnFlag; + UINT16 LastSpaceOffset; + UINT16 LastGlyphWidth; + + if ((InputString == NULL) || (Index == NULL) || (OutputString == NULL)) { return 0; } - if (LineWidth == 0 || *GlyphWidth == 0) { + if ((LineWidth == 0) || (*GlyphWidth == 0)) { return 0; } @@ -529,6 +529,7 @@ GetLineByWidth ( LastSpaceOffset = StrOffset; LastGlyphWidth = *GlyphWidth; } + break; } @@ -558,14 +559,14 @@ GetLineByWidth ( // // The CHAR_NULL has process last time, this time just return 0 to stand for the end. // - if (StrOffset == 0 && (InputString[*Index + StrOffset] == CHAR_NULL)) { + if ((StrOffset == 0) && (InputString[*Index + StrOffset] == CHAR_NULL)) { return 0; } // // Need extra glyph info and '\0' info, so +2. // - *OutputString = AllocateZeroPool ((StrOffset + 2) * sizeof(CHAR16)); + *OutputString = AllocateZeroPool ((StrOffset + 2) * sizeof (CHAR16)); if (*OutputString == NULL) { return 0; } @@ -575,37 +576,37 @@ GetLineByWidth ( // if (OriginalGlyphWidth == 1) { *(*OutputString) = NARROW_CHAR; - } else { + } else { *(*OutputString) = WIDE_CHAR; } - CopyMem ((*OutputString) + 1, &InputString[*Index], StrOffset * sizeof(CHAR16)); + CopyMem ((*OutputString) + 1, &InputString[*Index], StrOffset * sizeof (CHAR16)); if (InputString[*Index + StrOffset] == CHAR_SPACE) { // // Skip the space info at the begin of next line. // - *Index = (UINT16) (*Index + StrOffset + 1); + *Index = (UINT16)(*Index + StrOffset + 1); } else if (InputString[*Index + StrOffset] == CHAR_LINEFEED) { // // Skip the /n or /n/r info. // if (InputString[*Index + StrOffset + 1] == CHAR_CARRIAGE_RETURN) { - *Index = (UINT16) (*Index + StrOffset + 2); + *Index = (UINT16)(*Index + StrOffset + 2); } else { - *Index = (UINT16) (*Index + StrOffset + 1); + *Index = (UINT16)(*Index + StrOffset + 1); } } else if (InputString[*Index + StrOffset] == CHAR_CARRIAGE_RETURN) { // // Skip the /r or /r/n info. // if (InputString[*Index + StrOffset + 1] == CHAR_LINEFEED) { - *Index = (UINT16) (*Index + StrOffset + 2); + *Index = (UINT16)(*Index + StrOffset + 2); } else { - *Index = (UINT16) (*Index + StrOffset + 1); + *Index = (UINT16)(*Index + StrOffset + 1); } } else { - *Index = (UINT16) (*Index + StrOffset); + *Index = (UINT16)(*Index + StrOffset); } // @@ -624,20 +625,20 @@ GetLineByWidth ( **/ VOID UiAddMenuOption ( - IN FORM_DISPLAY_ENGINE_STATEMENT *Statement, - IN UINT16 *MenuItemCount, - IN BOOLEAN NestIn + IN FORM_DISPLAY_ENGINE_STATEMENT *Statement, + IN UINT16 *MenuItemCount, + IN BOOLEAN NestIn ) { - UI_MENU_OPTION *MenuOption; - UINTN Index; - UINTN Count; - UINT16 NumberOfLines; - UINT16 GlyphWidth; - UINT16 Width; - UINTN ArrayEntry; - CHAR16 *OutputString; - EFI_STRING_ID PromptId; + UI_MENU_OPTION *MenuOption; + UINTN Index; + UINTN Count; + UINT16 NumberOfLines; + UINT16 GlyphWidth; + UINT16 Width; + UINTN ArrayEntry; + CHAR16 *OutputString; + EFI_STRING_ID PromptId; NumberOfLines = 1; ArrayEntry = 0; @@ -648,7 +649,7 @@ UiAddMenuOption ( PromptId = GetPrompt (Statement->OpCode); ASSERT (PromptId != 0); - if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP || Statement->OpCode->OpCode == EFI_IFR_TIME_OP) { + if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) || (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) { Count = 3; } @@ -656,12 +657,12 @@ UiAddMenuOption ( MenuOption = AllocateZeroPool (sizeof (UI_MENU_OPTION)); ASSERT (MenuOption); - MenuOption->Signature = UI_MENU_OPTION_SIGNATURE; - MenuOption->Description = GetToken (PromptId, gFormData->HiiHandle); - MenuOption->Handle = gFormData->HiiHandle; - MenuOption->ThisTag = Statement; + MenuOption->Signature = UI_MENU_OPTION_SIGNATURE; + MenuOption->Description = GetToken (PromptId, gFormData->HiiHandle); + MenuOption->Handle = gFormData->HiiHandle; + MenuOption->ThisTag = Statement; MenuOption->NestInStatement = NestIn; - MenuOption->EntryNumber = *MenuItemCount; + MenuOption->EntryNumber = *MenuItemCount; MenuOption->Sequence = Index; @@ -671,43 +672,44 @@ UiAddMenuOption ( MenuOption->GrayOut = FALSE; } - if ((Statement->Attribute & HII_DISPLAY_LOCK) != 0 || (gFormData->Attribute & HII_DISPLAY_LOCK) != 0) { + if (((Statement->Attribute & HII_DISPLAY_LOCK) != 0) || ((gFormData->Attribute & HII_DISPLAY_LOCK) != 0)) { MenuOption->GrayOut = TRUE; } // // If the form or the question has the lock attribute, deal same as grayout. // - if ((gFormData->Attribute & HII_DISPLAY_LOCK) != 0 || (Statement->Attribute & HII_DISPLAY_LOCK) != 0) { + if (((gFormData->Attribute & HII_DISPLAY_LOCK) != 0) || ((Statement->Attribute & HII_DISPLAY_LOCK) != 0)) { MenuOption->GrayOut = TRUE; } switch (Statement->OpCode->OpCode) { - case EFI_IFR_ORDERED_LIST_OP: - case EFI_IFR_ONE_OF_OP: - case EFI_IFR_NUMERIC_OP: - case EFI_IFR_TIME_OP: - case EFI_IFR_DATE_OP: - case EFI_IFR_CHECKBOX_OP: - case EFI_IFR_PASSWORD_OP: - case EFI_IFR_STRING_OP: - // - // User could change the value of these items - // - MenuOption->IsQuestion = TRUE; - break; - case EFI_IFR_TEXT_OP: - if (FeaturePcdGet (PcdBrowserGrayOutTextStatement)) { + case EFI_IFR_ORDERED_LIST_OP: + case EFI_IFR_ONE_OF_OP: + case EFI_IFR_NUMERIC_OP: + case EFI_IFR_TIME_OP: + case EFI_IFR_DATE_OP: + case EFI_IFR_CHECKBOX_OP: + case EFI_IFR_PASSWORD_OP: + case EFI_IFR_STRING_OP: // - // Initializing GrayOut option as TRUE for Text setup options - // so that those options will be Gray in colour and un selectable. + // User could change the value of these items // - MenuOption->GrayOut = TRUE; - } - break; - default: - MenuOption->IsQuestion = FALSE; - break; + MenuOption->IsQuestion = TRUE; + break; + case EFI_IFR_TEXT_OP: + if (FeaturePcdGet (PcdBrowserGrayOutTextStatement)) { + // + // Initializing GrayOut option as TRUE for Text setup options + // so that those options will be Gray in colour and un selectable. + // + MenuOption->GrayOut = TRUE; + } + + break; + default: + MenuOption->IsQuestion = FALSE; + break; } if ((Statement->Attribute & HII_DISPLAY_READONLY) != 0) { @@ -717,17 +719,19 @@ UiAddMenuOption ( } } - if (Index == 0 && - (Statement->OpCode->OpCode != EFI_IFR_DATE_OP) && - (Statement->OpCode->OpCode != EFI_IFR_TIME_OP)) { - Width = GetWidth (MenuOption, NULL); - for (; GetLineByWidth (MenuOption->Description, Width, &GlyphWidth,&ArrayEntry, &OutputString) != 0x0000;) { + if ((Index == 0) && + (Statement->OpCode->OpCode != EFI_IFR_DATE_OP) && + (Statement->OpCode->OpCode != EFI_IFR_TIME_OP)) + { + Width = GetWidth (MenuOption, NULL); + for ( ; GetLineByWidth (MenuOption->Description, Width, &GlyphWidth, &ArrayEntry, &OutputString) != 0x0000;) { // // If there is more string to process print on the next row and increment the Skip value // if (StrLen (&MenuOption->Description[ArrayEntry]) != 0) { NumberOfLines++; } + FreePool (OutputString); } } else { @@ -763,11 +767,11 @@ ConvertStatementToMenu ( VOID ) { - UINT16 MenuItemCount; - LIST_ENTRY *Link; - LIST_ENTRY *NestLink; - FORM_DISPLAY_ENGINE_STATEMENT *Statement; - FORM_DISPLAY_ENGINE_STATEMENT *NestStatement; + UINT16 MenuItemCount; + LIST_ENTRY *Link; + LIST_ENTRY *NestLink; + FORM_DISPLAY_ENGINE_STATEMENT *Statement; + FORM_DISPLAY_ENGINE_STATEMENT *NestStatement; MenuItemCount = 0; InitializeListHead (&gMenuOption); @@ -775,7 +779,7 @@ ConvertStatementToMenu ( Link = GetFirstNode (&gFormData->StatementListHead); while (!IsNull (&gFormData->StatementListHead, Link)) { Statement = FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK (Link); - Link = GetNextNode (&gFormData->StatementListHead, Link); + Link = GetNextNode (&gFormData->StatementListHead, Link); // // Skip the opcode not recognized by Display core. @@ -792,7 +796,7 @@ ConvertStatementToMenu ( NestLink = GetFirstNode (&Statement->NestStatementList); while (!IsNull (&Statement->NestStatementList, NestLink)) { NestStatement = FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK (NestLink); - NestLink = GetNextNode (&Statement->NestStatementList, NestLink); + NestLink = GetNextNode (&Statement->NestStatementList, NestLink); // // Skip the opcode not recognized by Display core. @@ -824,31 +828,32 @@ ConvertStatementToMenu ( **/ UINTN GetStringWidth ( - IN CHAR16 *String + IN CHAR16 *String ) { - UINTN Index; - UINTN Count; - UINTN IncrementValue; + UINTN Index; + UINTN Count; + UINTN IncrementValue; ASSERT (String != NULL); if (String == NULL) { return 0; } - Index = 0; - Count = 0; - IncrementValue = 1; + Index = 0; + Count = 0; + IncrementValue = 1; do { // // Advance to the null-terminator or to the first width directive // - for (; - (String[Index] != NARROW_CHAR) && (String[Index] != WIDE_CHAR) && (String[Index] != 0); - Index++, Count = Count + IncrementValue - ) - ; + for ( ; + (String[Index] != NARROW_CHAR) && (String[Index] != WIDE_CHAR) && (String[Index] != 0); + Index++, Count = Count + IncrementValue + ) + { + } // // We hit the null-terminator, we now have a count @@ -856,6 +861,7 @@ GetStringWidth ( if (String[Index] == 0) { break; } + // // We encountered a narrow directive - strip it from the size calculation since it doesn't get printed // and also set the flag that determines what we increment by.(if narrow, increment by 1, if wide increment by 2) @@ -892,8 +898,8 @@ GetStringWidth ( **/ VOID UpdateSkipInfoForMenu ( - IN UI_MENU_OPTION *MenuOption, - IN CHAR16 *OptionString + IN UI_MENU_OPTION *MenuOption, + IN CHAR16 *OptionString ) { UINTN Index; @@ -902,9 +908,9 @@ UpdateSkipInfoForMenu ( CHAR16 *OutputString; UINT16 GlyphWidth; - Width = (UINT16) gOptionBlockWidth - 1; - GlyphWidth = 1; - Row = 1; + Width = (UINT16)gOptionBlockWidth - 1; + GlyphWidth = 1; + Row = 1; for (Index = 0; GetLineByWidth (OptionString, Width, &GlyphWidth, &Index, &OutputString) != 0x0000;) { if (StrLen (&OptionString[Index]) != 0) { @@ -916,7 +922,8 @@ UpdateSkipInfoForMenu ( if ((Row > MenuOption->Skip) && (MenuOption->ThisTag->OpCode->OpCode != EFI_IFR_DATE_OP) && - (MenuOption->ThisTag->OpCode->OpCode != EFI_IFR_TIME_OP)) { + (MenuOption->ThisTag->OpCode->OpCode != EFI_IFR_TIME_OP)) + { MenuOption->Skip = Row; } } @@ -929,12 +936,12 @@ UpdateSkipInfoForMenu ( **/ VOID UpdateOptionSkipLines ( - IN UI_MENU_OPTION *MenuOption + IN UI_MENU_OPTION *MenuOption ) { CHAR16 *OptionString; - OptionString = NULL; + OptionString = NULL; ProcessOptions (MenuOption, FALSE, &OptionString, TRUE); if (OptionString != NULL) { @@ -943,8 +950,8 @@ UpdateOptionSkipLines ( FreePool (OptionString); } - if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT*)MenuOption->ThisTag->OpCode)->TextTwo != 0)) { - OptionString = GetToken (((EFI_IFR_TEXT*)MenuOption->ThisTag->OpCode)->TextTwo, gFormData->HiiHandle); + if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT *)MenuOption->ThisTag->OpCode)->TextTwo != 0)) { + OptionString = GetToken (((EFI_IFR_TEXT *)MenuOption->ThisTag->OpCode)->TextTwo, gFormData->HiiHandle); if (OptionString != NULL) { UpdateSkipInfoForMenu (MenuOption, OptionString); @@ -969,11 +976,11 @@ UpdateOptionSkipLines ( **/ BOOLEAN PrintableMenu ( - UI_MENU_OPTION *MenuOption + UI_MENU_OPTION *MenuOption ) { - EFI_STATUS Status; - EFI_STRING OptionString; + EFI_STATUS Status; + EFI_STRING OptionString; OptionString = NULL; @@ -985,15 +992,16 @@ PrintableMenu ( if (EFI_ERROR (Status)) { return FALSE; } - if (OptionString != NULL && OptionString[0] != '\0') { + + if ((OptionString != NULL) && (OptionString[0] != '\0')) { FreePool (OptionString); return TRUE; } - if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT*)MenuOption->ThisTag->OpCode)->TextTwo != 0)) { - OptionString = GetToken (((EFI_IFR_TEXT*)MenuOption->ThisTag->OpCode)->TextTwo, gFormData->HiiHandle); + if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT *)MenuOption->ThisTag->OpCode)->TextTwo != 0)) { + OptionString = GetToken (((EFI_IFR_TEXT *)MenuOption->ThisTag->OpCode)->TextTwo, gFormData->HiiHandle); ASSERT (OptionString != NULL); - if (OptionString[0] != '\0'){ + if (OptionString[0] != '\0') { FreePool (OptionString); return TRUE; } @@ -1015,11 +1023,12 @@ PrintableMenu ( **/ BOOLEAN IsSelectable ( - UI_MENU_OPTION *MenuOption + UI_MENU_OPTION *MenuOption ) { if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_SUBTITLE_OP) || - MenuOption->GrayOut || MenuOption->ReadOnly || !PrintableMenu (MenuOption)) { + MenuOption->GrayOut || MenuOption->ReadOnly || !PrintableMenu (MenuOption)) + { return FALSE; } else { return TRUE; @@ -1048,19 +1057,19 @@ IsSelectable ( **/ INTN MoveToNextStatement ( - IN BOOLEAN GoUp, - IN OUT LIST_ENTRY **CurrentPosition, - IN UINTN GapToTop, - IN BOOLEAN FindInForm + IN BOOLEAN GoUp, + IN OUT LIST_ENTRY **CurrentPosition, + IN UINTN GapToTop, + IN BOOLEAN FindInForm ) { - INTN Distance; - LIST_ENTRY *Pos; - UI_MENU_OPTION *NextMenuOption; - UI_MENU_OPTION *PreMenuOption; + INTN Distance; + LIST_ENTRY *Pos; + UI_MENU_OPTION *NextMenuOption; + UI_MENU_OPTION *PreMenuOption; - Distance = 0; - Pos = *CurrentPosition; + Distance = 0; + Pos = *CurrentPosition; if (Pos == &gMenuOption) { return -1; @@ -1082,10 +1091,11 @@ MoveToNextStatement ( // Check whether the menu is beyond current showing form, // return the first one beyond the showing form. // - if ((UINTN) Distance + NextMenuOption->Skip > GapToTop) { + if ((UINTN)Distance + NextMenuOption->Skip > GapToTop) { if (FindInForm) { NextMenuOption = PreMenuOption; } + break; } @@ -1106,7 +1116,7 @@ MoveToNextStatement ( break; } - Pos = (GoUp ? Pos->BackLink : Pos->ForwardLink); + Pos = (GoUp ? Pos->BackLink : Pos->ForwardLink); PreMenuOption = NextMenuOption; } @@ -1114,7 +1124,6 @@ MoveToNextStatement ( return Distance; } - /** Process option string for date/time opcode. @@ -1125,16 +1134,16 @@ MoveToNextStatement ( **/ VOID ProcessStringForDateTime ( - UI_MENU_OPTION *MenuOption, - CHAR16 *OptionString, - BOOLEAN AddOptCol + UI_MENU_OPTION *MenuOption, + CHAR16 *OptionString, + BOOLEAN AddOptCol ) { - UINTN Index; - UINTN Count; - FORM_DISPLAY_ENGINE_STATEMENT *Statement; - EFI_IFR_DATE *Date; - EFI_IFR_TIME *Time; + UINTN Index; + UINTN Count; + FORM_DISPLAY_ENGINE_STATEMENT *Statement; + EFI_IFR_DATE *Date; + EFI_IFR_TIME *Time; ASSERT (MenuOption != NULL && OptionString != NULL); @@ -1142,9 +1151,9 @@ ProcessStringForDateTime ( Date = NULL; Time = NULL; if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP) { - Date = (EFI_IFR_DATE *) Statement->OpCode; + Date = (EFI_IFR_DATE *)Statement->OpCode; } else if (Statement->OpCode->OpCode == EFI_IFR_TIME_OP) { - Time = (EFI_IFR_TIME *) Statement->OpCode; + Time = (EFI_IFR_TIME *)Statement->OpCode; } // @@ -1163,6 +1172,7 @@ ProcessStringForDateTime ( OptionString[Count] = OptionString[Index]; Count++; } + OptionString[Count] = CHAR_NULL; // @@ -1221,7 +1231,6 @@ ProcessStringForDateTime ( } } - /** Adjust Data and Time position accordingly. Data format : [01/02/2004] [11:22:33] @@ -1241,8 +1250,8 @@ ProcessStringForDateTime ( **/ UINTN AdjustDateAndTimePosition ( - IN BOOLEAN DirectionUp, - IN OUT LIST_ENTRY **CurrentPosition + IN BOOLEAN DirectionUp, + IN OUT LIST_ENTRY **CurrentPosition ) { UINTN Count; @@ -1255,7 +1264,8 @@ AdjustDateAndTimePosition ( MenuOption = MENU_OPTION_FROM_LINK (NewPosition); if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_DATE_OP) || - (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) { + (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) + { // // Calculate the distance from current position to the last Date/Time MenuOption // @@ -1305,34 +1315,34 @@ AdjustDateAndTimePosition ( **/ UINT64 GetFieldFromNum ( - IN EFI_IFR_OP_HEADER *OpCode + IN EFI_IFR_OP_HEADER *OpCode ) { - EFI_IFR_NUMERIC *NumericOp; - UINT64 Step; + EFI_IFR_NUMERIC *NumericOp; + UINT64 Step; - NumericOp = (EFI_IFR_NUMERIC *) OpCode; + NumericOp = (EFI_IFR_NUMERIC *)OpCode; switch (NumericOp->Flags & EFI_IFR_NUMERIC_SIZE) { - case EFI_IFR_NUMERIC_SIZE_1: - Step = NumericOp->data.u8.Step; - break; + case EFI_IFR_NUMERIC_SIZE_1: + Step = NumericOp->data.u8.Step; + break; - case EFI_IFR_NUMERIC_SIZE_2: - Step = NumericOp->data.u16.Step; - break; + case EFI_IFR_NUMERIC_SIZE_2: + Step = NumericOp->data.u16.Step; + break; - case EFI_IFR_NUMERIC_SIZE_4: - Step = NumericOp->data.u32.Step; - break; + case EFI_IFR_NUMERIC_SIZE_4: + Step = NumericOp->data.u32.Step; + break; - case EFI_IFR_NUMERIC_SIZE_8: - Step = NumericOp->data.u64.Step; - break; + case EFI_IFR_NUMERIC_SIZE_8: + Step = NumericOp->data.u64.Step; + break; - default: - Step = 0; - break; + default: + Step = 0; + break; } return Step; @@ -1348,7 +1358,7 @@ GetFieldFromNum ( **/ BROWSER_HOT_KEY * GetHotKeyFromRegisterList ( - IN EFI_INPUT_KEY *KeyData + IN EFI_INPUT_KEY *KeyData ) { LIST_ENTRY *Link; @@ -1368,7 +1378,6 @@ GetHotKeyFromRegisterList ( return NULL; } - /** Determine if the menu is the last menu that can be selected. @@ -1383,11 +1392,11 @@ GetHotKeyFromRegisterList ( **/ BOOLEAN ValueIsScroll ( - IN BOOLEAN Direction, - IN LIST_ENTRY *CurrentPos + IN BOOLEAN Direction, + IN LIST_ENTRY *CurrentPos ) { - LIST_ENTRY *Temp; + LIST_ENTRY *Temp; Temp = Direction ? CurrentPos->BackLink : CurrentPos->ForwardLink; @@ -1408,19 +1417,19 @@ ValueIsScroll ( **/ UI_EVENT_TYPE UiWaitForEvent ( - IN EFI_EVENT Event + IN EFI_EVENT Event ) { - EFI_STATUS Status; - UINTN Index; - UINTN EventNum; - UINT64 Timeout; - EFI_EVENT TimerEvent; - EFI_EVENT WaitList[3]; + EFI_STATUS Status; + UINTN Index; + UINTN EventNum; + UINT64 Timeout; + EFI_EVENT TimerEvent; + EFI_EVENT WaitList[3]; UI_EVENT_TYPE EventType; TimerEvent = NULL; - Timeout = FormExitTimeout(gFormData); + Timeout = FormExitTimeout (gFormData); if (Timeout != 0) { Status = gBS->CreateEvent (EVT_TIMER, 0, NULL, NULL, &TimerEvent); @@ -1429,45 +1438,46 @@ UiWaitForEvent ( // Set the timer event // gBS->SetTimer ( - TimerEvent, - TimerRelative, - Timeout - ); + TimerEvent, + TimerRelative, + Timeout + ); } WaitList[0] = Event; EventNum = 1; if (gFormData->FormRefreshEvent != NULL) { WaitList[EventNum] = gFormData->FormRefreshEvent; - EventNum ++; + EventNum++; } if (Timeout != 0) { WaitList[EventNum] = TimerEvent; - EventNum ++; + EventNum++; } Status = gBS->WaitForEvent (EventNum, WaitList, &Index); ASSERT_EFI_ERROR (Status); switch (Index) { - case 0: - EventType = UIEventKey; - break; + case 0: + EventType = UIEventKey; + break; - case 1: - if (gFormData->FormRefreshEvent != NULL) { - EventType = UIEventDriver; - } else { - ASSERT (Timeout != 0 && EventNum == 2); - EventType = UIEventTimeOut; - } - break; + case 1: + if (gFormData->FormRefreshEvent != NULL) { + EventType = UIEventDriver; + } else { + ASSERT (Timeout != 0 && EventNum == 2); + EventType = UIEventTimeOut; + } - default: - ASSERT (Index == 2 && EventNum == 3); - EventType = UIEventTimeOut; - break; + break; + + default: + ASSERT (Index == 2 && EventNum == 3); + EventType = UIEventTimeOut; + break; } if (Timeout != 0) { @@ -1487,21 +1497,20 @@ UiWaitForEvent ( **/ EFI_QUESTION_ID GetQuestionIdInfo ( - IN EFI_IFR_OP_HEADER *OpCode + IN EFI_IFR_OP_HEADER *OpCode ) { - EFI_IFR_QUESTION_HEADER *QuestionHeader; + EFI_IFR_QUESTION_HEADER *QuestionHeader; if (OpCode->Length < sizeof (EFI_IFR_OP_HEADER) + sizeof (EFI_IFR_QUESTION_HEADER)) { return 0; } - QuestionHeader = (EFI_IFR_QUESTION_HEADER *)((UINT8 *) OpCode + sizeof(EFI_IFR_OP_HEADER)); + QuestionHeader = (EFI_IFR_QUESTION_HEADER *)((UINT8 *)OpCode + sizeof (EFI_IFR_OP_HEADER)); return QuestionHeader->QuestionId; } - /** Find the top of screen menu base on the current menu. @@ -1514,40 +1523,42 @@ GetQuestionIdInfo ( **/ LIST_ENTRY * FindTopOfScreenMenu ( - IN LIST_ENTRY *CurPos, - IN UINTN Rows, - OUT UINTN *SkipValue + IN LIST_ENTRY *CurPos, + IN UINTN Rows, + OUT UINTN *SkipValue ) { - LIST_ENTRY *Link; - LIST_ENTRY *TopOfScreen; - UI_MENU_OPTION *PreviousMenuOption; + LIST_ENTRY *Link; + LIST_ENTRY *TopOfScreen; + UI_MENU_OPTION *PreviousMenuOption; - Link = CurPos; + Link = CurPos; PreviousMenuOption = NULL; while (Link->BackLink != &gMenuOption) { - Link = Link->BackLink; + Link = Link->BackLink; PreviousMenuOption = MENU_OPTION_FROM_LINK (Link); if (PreviousMenuOption->Row == 0) { UpdateOptionSkipLines (PreviousMenuOption); } + if (Rows <= PreviousMenuOption->Skip) { break; } + Rows = Rows - PreviousMenuOption->Skip; } if (Link->BackLink == &gMenuOption) { TopOfScreen = gMenuOption.ForwardLink; - if (PreviousMenuOption != NULL && Rows < PreviousMenuOption->Skip) { + if ((PreviousMenuOption != NULL) && (Rows < PreviousMenuOption->Skip)) { *SkipValue = PreviousMenuOption->Skip - Rows; } else { *SkipValue = 0; } } else { TopOfScreen = Link; - *SkipValue = PreviousMenuOption->Skip - Rows; + *SkipValue = PreviousMenuOption->Skip - Rows; } return TopOfScreen; @@ -1566,14 +1577,14 @@ GetIndexInfoForOpcode ( IN EFI_IFR_OP_HEADER *OpCode ) { - LIST_ENTRY *NewPos; - UI_MENU_OPTION *MenuOption; - UINTN Index; + LIST_ENTRY *NewPos; + UI_MENU_OPTION *MenuOption; + UINTN Index; NewPos = gMenuOption.ForwardLink; Index = 0; - for (NewPos = gMenuOption.ForwardLink; NewPos != &gMenuOption; NewPos = NewPos->ForwardLink){ + for (NewPos = gMenuOption.ForwardLink; NewPos != &gMenuOption; NewPos = NewPos->ForwardLink) { MenuOption = MENU_OPTION_FROM_LINK (NewPos); if (CompareMem (MenuOption->ThisTag->OpCode, OpCode, OpCode->Length) == 0) { @@ -1581,7 +1592,7 @@ GetIndexInfoForOpcode ( return Index; } - Index ++; + Index++; } } @@ -1603,12 +1614,13 @@ IsSavedHighlightStatement ( ) { if ((gFormData->HiiHandle == gHighligthMenuInfo.HiiHandle) && - (gFormData->FormId == gHighligthMenuInfo.FormId)) { + (gFormData->FormId == gHighligthMenuInfo.FormId)) + { if (gHighligthMenuInfo.HLTQuestionId != 0) { - return (BOOLEAN) (gHighligthMenuInfo.HLTQuestionId == GetQuestionIdInfo (HighLightedStatement->OpCode)); + return (BOOLEAN)(gHighligthMenuInfo.HLTQuestionId == GetQuestionIdInfo (HighLightedStatement->OpCode)); } else { if (CompareMem (gHighligthMenuInfo.HLTOpCode, HighLightedStatement->OpCode, gHighligthMenuInfo.HLTOpCode->Length) == 0) { - if (gHighligthMenuInfo.HLTIndex == 0 || gHighligthMenuInfo.HLTIndex == GetIndexInfoForOpcode(HighLightedStatement->OpCode)) { + if ((gHighligthMenuInfo.HLTIndex == 0) || (gHighligthMenuInfo.HLTIndex == GetIndexInfoForOpcode (HighLightedStatement->OpCode))) { return TRUE; } else { return FALSE; @@ -1631,17 +1643,17 @@ IsSavedHighlightStatement ( **/ BOOLEAN IsHighLightMenuOption ( - IN UI_MENU_OPTION *MenuOption + IN UI_MENU_OPTION *MenuOption ) { if (gHighligthMenuInfo.HLTQuestionId != 0) { - if (GetQuestionIdInfo(MenuOption->ThisTag->OpCode) == gHighligthMenuInfo.HLTQuestionId) { - return (BOOLEAN) (MenuOption->Sequence == gHighligthMenuInfo.HLTSequence); + if (GetQuestionIdInfo (MenuOption->ThisTag->OpCode) == gHighligthMenuInfo.HLTQuestionId) { + return (BOOLEAN)(MenuOption->Sequence == gHighligthMenuInfo.HLTSequence); } } else { - if(CompareMem (gHighligthMenuInfo.HLTOpCode, MenuOption->ThisTag->OpCode, gHighligthMenuInfo.HLTOpCode->Length) == 0) { - if (gHighligthMenuInfo.HLTIndex == 0 || gHighligthMenuInfo.HLTIndex == GetIndexInfoForOpcode(MenuOption->ThisTag->OpCode)) { - return (BOOLEAN) (MenuOption->Sequence == gHighligthMenuInfo.HLTSequence); + if (CompareMem (gHighligthMenuInfo.HLTOpCode, MenuOption->ThisTag->OpCode, gHighligthMenuInfo.HLTOpCode->Length) == 0) { + if ((gHighligthMenuInfo.HLTIndex == 0) || (gHighligthMenuInfo.HLTIndex == GetIndexInfoForOpcode (MenuOption->ThisTag->OpCode))) { + return (BOOLEAN)(MenuOption->Sequence == gHighligthMenuInfo.HLTSequence); } else { return FALSE; } @@ -1664,24 +1676,25 @@ IsHighLightMenuOption ( **/ LIST_ENTRY * FindHighLightMenuOption ( - IN FORM_DISPLAY_ENGINE_STATEMENT *HighLightedStatement - ) + IN FORM_DISPLAY_ENGINE_STATEMENT *HighLightedStatement + ) { - LIST_ENTRY *NewPos; - UI_MENU_OPTION *MenuOption; + LIST_ENTRY *NewPos; + UI_MENU_OPTION *MenuOption; - NewPos = gMenuOption.ForwardLink; + NewPos = gMenuOption.ForwardLink; MenuOption = MENU_OPTION_FROM_LINK (NewPos); if (HighLightedStatement != NULL) { while (MenuOption->ThisTag != HighLightedStatement) { - NewPos = NewPos->ForwardLink; + NewPos = NewPos->ForwardLink; if (NewPos == &gMenuOption) { // // Not Found it, break // break; } + MenuOption = MENU_OPTION_FROM_LINK (NewPos); } @@ -1689,16 +1702,16 @@ FindHighLightMenuOption ( // Must find the highlight statement. // ASSERT (NewPos != &gMenuOption); - } else { while (!IsHighLightMenuOption (MenuOption)) { - NewPos = NewPos->ForwardLink; + NewPos = NewPos->ForwardLink; if (NewPos == &gMenuOption) { // // Not Found it, break // break; } + MenuOption = MENU_OPTION_FROM_LINK (NewPos); } @@ -1724,15 +1737,15 @@ FindHighLightMenuOption ( **/ BOOLEAN IsTopOfScreeMenuOption ( - IN UI_MENU_OPTION *MenuOption + IN UI_MENU_OPTION *MenuOption ) { if (gHighligthMenuInfo.TOSQuestionId != 0) { - return (BOOLEAN) (GetQuestionIdInfo(MenuOption->ThisTag->OpCode) == gHighligthMenuInfo.TOSQuestionId); + return (BOOLEAN)(GetQuestionIdInfo (MenuOption->ThisTag->OpCode) == gHighligthMenuInfo.TOSQuestionId); } - if(CompareMem (gHighligthMenuInfo.TOSOpCode, MenuOption->ThisTag->OpCode, gHighligthMenuInfo.TOSOpCode->Length) == 0) { - if (gHighligthMenuInfo.TOSIndex == 0 || gHighligthMenuInfo.TOSIndex == GetIndexInfoForOpcode(MenuOption->ThisTag->OpCode)) { + if (CompareMem (gHighligthMenuInfo.TOSOpCode, MenuOption->ThisTag->OpCode, gHighligthMenuInfo.TOSOpCode->Length) == 0) { + if ((gHighligthMenuInfo.TOSIndex == 0) || (gHighligthMenuInfo.TOSIndex == GetIndexInfoForOpcode (MenuOption->ThisTag->OpCode))) { return TRUE; } else { return FALSE; @@ -1750,14 +1763,14 @@ IsTopOfScreeMenuOption ( **/ UINTN -GetDistanceBetweenMenus( +GetDistanceBetweenMenus ( IN LIST_ENTRY *StartMenu, IN LIST_ENTRY *EndMenu -) + ) { - LIST_ENTRY *Link; - UI_MENU_OPTION *MenuOption; - UINTN Distance; + LIST_ENTRY *Link; + UI_MENU_OPTION *MenuOption; + UINTN Distance; Distance = 0; @@ -1767,9 +1780,11 @@ GetDistanceBetweenMenus( if (MenuOption->Row == 0) { UpdateOptionSkipLines (MenuOption); } + Distance += MenuOption->Skip; - Link = Link->BackLink; + Link = Link->BackLink; } + return Distance; } @@ -1783,28 +1798,29 @@ GetDistanceBetweenMenus( **/ LIST_ENTRY * FindTopOfScreenMenuOption ( - IN LIST_ENTRY *HighLightMenu + IN LIST_ENTRY *HighLightMenu ) { - LIST_ENTRY *NewPos; - UI_MENU_OPTION *MenuOption; - UINTN TopRow; - UINTN BottomRow; + LIST_ENTRY *NewPos; + UI_MENU_OPTION *MenuOption; + UINTN TopRow; + UINTN BottomRow; TopRow = gStatementDimensions.TopRow + SCROLL_ARROW_HEIGHT; BottomRow = gStatementDimensions.BottomRow - SCROLL_ARROW_HEIGHT; - NewPos = gMenuOption.ForwardLink; + NewPos = gMenuOption.ForwardLink; MenuOption = MENU_OPTION_FROM_LINK (NewPos); - while (!IsTopOfScreeMenuOption(MenuOption)) { - NewPos = NewPos->ForwardLink; + while (!IsTopOfScreeMenuOption (MenuOption)) { + NewPos = NewPos->ForwardLink; if (NewPos == &gMenuOption) { // // Not Found it, break // break; } + MenuOption = MENU_OPTION_FROM_LINK (NewPos); } @@ -1814,6 +1830,7 @@ FindTopOfScreenMenuOption ( if (NewPos == &gMenuOption) { return NULL; } + // // Check whether highlight menu and top of screen menu can be shown within one page, // if can't, return NULL to re-calcaulate the top of scrren menu. Because some new menus @@ -1844,10 +1861,10 @@ FindTopMenu ( OUT UINTN *SkipValue ) { - UINTN TopRow; - UINTN BottomRow; - UI_MENU_OPTION *MenuOption; - UINTN TmpValue; + UINTN TopRow; + UINTN BottomRow; + UI_MENU_OPTION *MenuOption; + UINTN TmpValue; TopRow = gStatementDimensions.TopRow + SCROLL_ARROW_HEIGHT; BottomRow = gStatementDimensions.BottomRow - SCROLL_ARROW_HEIGHT; @@ -1855,13 +1872,13 @@ FindTopMenu ( // When option mismatch happens,there exist two cases,one is reenter the form, just like the if case below, // and the other is exit current form and enter last form, it can be covered by the else case. // - if (gMisMatch && gFormData->HiiHandle == gHighligthMenuInfo.HiiHandle && gFormData->FormId == gHighligthMenuInfo.FormId) { + if (gMisMatch && (gFormData->HiiHandle == gHighligthMenuInfo.HiiHandle) && (gFormData->FormId == gHighligthMenuInfo.FormId)) { // // Reenter caused by option mismatch or auto exit caused by refresh form(refresh interval/guid), // base on the record highlight info to find the highlight menu. // - *HighlightMenu = FindHighLightMenuOption(NULL); + *HighlightMenu = FindHighLightMenuOption (NULL); if (*HighlightMenu != NULL) { // // Update skip info for this highlight menu. @@ -1872,12 +1889,12 @@ FindTopMenu ( // // Found the last time highlight menu. // - *TopOfScreen = FindTopOfScreenMenuOption(*HighlightMenu); + *TopOfScreen = FindTopOfScreenMenuOption (*HighlightMenu); if (*TopOfScreen != NULL) { // // Found the last time selectable top of screen menu. // - AdjustDateAndTimePosition(TRUE, TopOfScreen); + AdjustDateAndTimePosition (TRUE, TopOfScreen); MenuOption = MENU_OPTION_FROM_LINK (*TopOfScreen); UpdateOptionSkipLines (MenuOption); @@ -1893,10 +1910,10 @@ FindTopMenu ( *TopOfScreen = *HighlightMenu; TmpValue = 0; } else { - *TopOfScreen = FindTopOfScreenMenu(*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue); + *TopOfScreen = FindTopOfScreenMenu (*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue); } - *SkipValue = TmpValue; + *SkipValue = TmpValue; } } else { // @@ -1906,17 +1923,17 @@ FindTopMenu ( if (!IsListEmpty (&gMenuOption)) { MoveToNextStatement (FALSE, HighlightMenu, BottomRow - TopRow, TRUE); } - *TopOfScreen = gMenuOption.ForwardLink; - *SkipValue = 0; - } + *TopOfScreen = gMenuOption.ForwardLink; + *SkipValue = 0; + } } else if (FormData->HighLightedStatement != NULL) { if (IsSavedHighlightStatement (FormData->HighLightedStatement)) { // // Input highlight menu is same as last time highlight menu. // Base on last time highlight menu to set the top of screen menu and highlight menu. // - *HighlightMenu = FindHighLightMenuOption(NULL); + *HighlightMenu = FindHighLightMenuOption (NULL); ASSERT (*HighlightMenu != NULL); // @@ -1925,7 +1942,7 @@ FindTopMenu ( MenuOption = MENU_OPTION_FROM_LINK (*HighlightMenu); UpdateOptionSkipLines (MenuOption); - *TopOfScreen = FindTopOfScreenMenuOption(*HighlightMenu); + *TopOfScreen = FindTopOfScreenMenuOption (*HighlightMenu); if (*TopOfScreen == NULL) { // // Not found last time top of screen menu, so base on current highlight menu @@ -1937,24 +1954,25 @@ FindTopMenu ( *TopOfScreen = *HighlightMenu; TmpValue = 0; } else { - *TopOfScreen = FindTopOfScreenMenu(*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue); + *TopOfScreen = FindTopOfScreenMenu (*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue); } - *SkipValue = TmpValue; + *SkipValue = TmpValue; } else { - AdjustDateAndTimePosition(TRUE, TopOfScreen); + AdjustDateAndTimePosition (TRUE, TopOfScreen); MenuOption = MENU_OPTION_FROM_LINK (*TopOfScreen); UpdateOptionSkipLines (MenuOption); *SkipValue = gHighligthMenuInfo.SkipValue; } - AdjustDateAndTimePosition(TRUE, TopOfScreen); + + AdjustDateAndTimePosition (TRUE, TopOfScreen); } else { // // Input highlight menu is not save as last time highlight menu. // - *HighlightMenu = FindHighLightMenuOption(FormData->HighLightedStatement); - MenuOption = MENU_OPTION_FROM_LINK (*HighlightMenu); + *HighlightMenu = FindHighLightMenuOption (FormData->HighLightedStatement); + MenuOption = MENU_OPTION_FROM_LINK (*HighlightMenu); UpdateOptionSkipLines (MenuOption); // @@ -1965,12 +1983,13 @@ FindTopMenu ( *TopOfScreen = *HighlightMenu; TmpValue = 0; } else { - *TopOfScreen = FindTopOfScreenMenu(*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue); + *TopOfScreen = FindTopOfScreenMenu (*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue); } - *SkipValue = TmpValue; + *SkipValue = TmpValue; } - AdjustDateAndTimePosition(TRUE, TopOfScreen); + + AdjustDateAndTimePosition (TRUE, TopOfScreen); } else { // // If not has input highlight statement, just return the first one in this form. @@ -1980,7 +1999,8 @@ FindTopMenu ( if (!IsListEmpty (&gMenuOption)) { MoveToNextStatement (FALSE, HighlightMenu, BottomRow - TopRow, TRUE); } - *SkipValue = 0; + + *SkipValue = 0; } gMisMatch = FALSE; @@ -2001,17 +2021,17 @@ FindTopMenu ( **/ VOID UpdateHighlightMenuInfo ( - IN LIST_ENTRY *Highlight, - IN LIST_ENTRY *TopOfScreen, - IN UINTN SkipValue + IN LIST_ENTRY *Highlight, + IN LIST_ENTRY *TopOfScreen, + IN UINTN SkipValue ) { - UI_MENU_OPTION *MenuOption; - FORM_DISPLAY_ENGINE_STATEMENT *Statement; + UI_MENU_OPTION *MenuOption; + FORM_DISPLAY_ENGINE_STATEMENT *Statement; - gHighligthMenuInfo.HiiHandle = gFormData->HiiHandle; - gHighligthMenuInfo.FormId = gFormData->FormId; - gHighligthMenuInfo.SkipValue = (UINT16)SkipValue; + gHighligthMenuInfo.HiiHandle = gFormData->HiiHandle; + gHighligthMenuInfo.FormId = gFormData->FormId; + gHighligthMenuInfo.SkipValue = (UINT16)SkipValue; if (!IsListEmpty (&gMenuOption)) { MenuOption = MENU_OPTION_FROM_LINK (Highlight); @@ -2020,7 +2040,7 @@ UpdateHighlightMenuInfo ( gUserInput->SelectedStatement = Statement; gHighligthMenuInfo.HLTSequence = MenuOption->Sequence; - gHighligthMenuInfo.HLTQuestionId = GetQuestionIdInfo(Statement->OpCode); + gHighligthMenuInfo.HLTQuestionId = GetQuestionIdInfo (Statement->OpCode); if (gHighligthMenuInfo.HLTQuestionId == 0) { // // if question id == 0, save the opcode buffer.. @@ -2028,16 +2048,17 @@ UpdateHighlightMenuInfo ( if (gHighligthMenuInfo.HLTOpCode != NULL) { FreePool (gHighligthMenuInfo.HLTOpCode); } + gHighligthMenuInfo.HLTOpCode = AllocateCopyPool (Statement->OpCode->Length, Statement->OpCode); ASSERT (gHighligthMenuInfo.HLTOpCode != NULL); - gHighligthMenuInfo.HLTIndex = GetIndexInfoForOpcode(Statement->OpCode); + gHighligthMenuInfo.HLTIndex = GetIndexInfoForOpcode (Statement->OpCode); } MenuOption = MENU_OPTION_FROM_LINK (TopOfScreen); Statement = MenuOption->ThisTag; - gHighligthMenuInfo.TOSQuestionId = GetQuestionIdInfo(Statement->OpCode); + gHighligthMenuInfo.TOSQuestionId = GetQuestionIdInfo (Statement->OpCode); if (gHighligthMenuInfo.TOSQuestionId == 0) { // // if question id == 0, save the opcode buffer.. @@ -2045,28 +2066,31 @@ UpdateHighlightMenuInfo ( if (gHighligthMenuInfo.TOSOpCode != NULL) { FreePool (gHighligthMenuInfo.TOSOpCode); } + gHighligthMenuInfo.TOSOpCode = AllocateCopyPool (Statement->OpCode->Length, Statement->OpCode); ASSERT (gHighligthMenuInfo.TOSOpCode != NULL); - gHighligthMenuInfo.TOSIndex = GetIndexInfoForOpcode(Statement->OpCode); + gHighligthMenuInfo.TOSIndex = GetIndexInfoForOpcode (Statement->OpCode); } } else { - gUserInput->SelectedStatement = NULL; + gUserInput->SelectedStatement = NULL; gHighligthMenuInfo.HLTSequence = 0; gHighligthMenuInfo.HLTQuestionId = 0; if (gHighligthMenuInfo.HLTOpCode != NULL) { FreePool (gHighligthMenuInfo.HLTOpCode); } - gHighligthMenuInfo.HLTOpCode = NULL; - gHighligthMenuInfo.HLTIndex = 0; + + gHighligthMenuInfo.HLTOpCode = NULL; + gHighligthMenuInfo.HLTIndex = 0; gHighligthMenuInfo.TOSQuestionId = 0; if (gHighligthMenuInfo.TOSOpCode != NULL) { FreePool (gHighligthMenuInfo.TOSOpCode); } - gHighligthMenuInfo.TOSOpCode = NULL; - gHighligthMenuInfo.TOSIndex = 0; + + gHighligthMenuInfo.TOSOpCode = NULL; + gHighligthMenuInfo.TOSIndex = 0; } } @@ -2079,11 +2103,11 @@ UpdateHighlightMenuInfo ( **/ VOID SetDisplayAttribute ( - IN UI_MENU_OPTION *MenuOption, - IN BOOLEAN Highlight + IN UI_MENU_OPTION *MenuOption, + IN BOOLEAN Highlight ) { - FORM_DISPLAY_ENGINE_STATEMENT *Statement; + FORM_DISPLAY_ENGINE_STATEMENT *Statement; Statement = MenuOption->ThisTag; @@ -2117,15 +2141,15 @@ SetDisplayAttribute ( **/ VOID DisplayMenuString ( - IN UI_MENU_OPTION *MenuOption, - IN UINTN Col, - IN UINTN Row, - IN CHAR16 *String, - IN UINTN Width, - IN BOOLEAN Highlight + IN UI_MENU_OPTION *MenuOption, + IN UINTN Col, + IN UINTN Row, + IN CHAR16 *String, + IN UINTN Width, + IN BOOLEAN Highlight ) { - UINTN Length; + UINTN Length; // // Print string with normal color. @@ -2139,13 +2163,13 @@ DisplayMenuString ( // Print the highlight menu string. // First print the highlight string. // - SetDisplayAttribute(MenuOption, TRUE); + SetDisplayAttribute (MenuOption, TRUE); Length = PrintStringAt (Col, Row, String); // // Second, clean the empty after the string. // - SetDisplayAttribute(MenuOption, FALSE); + SetDisplayAttribute (MenuOption, FALSE); PrintStringAtWithWidth (Col + Length, Row, L"", Width - Length); } @@ -2160,22 +2184,22 @@ DisplayMenuString ( **/ BOOLEAN HasOptionString ( - IN UI_MENU_OPTION *MenuOption + IN UI_MENU_OPTION *MenuOption ) { - FORM_DISPLAY_ENGINE_STATEMENT *Statement; - CHAR16 *String; - UINTN Size; - EFI_IFR_TEXT *TextOp; + FORM_DISPLAY_ENGINE_STATEMENT *Statement; + CHAR16 *String; + UINTN Size; + EFI_IFR_TEXT *TextOp; - Size = 0; + Size = 0; Statement = MenuOption->ThisTag; // // See if the second text parameter is really NULL // if (Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) { - TextOp = (EFI_IFR_TEXT *) Statement->OpCode; + TextOp = (EFI_IFR_TEXT *)Statement->OpCode; if (TextOp->TextTwo != 0) { String = GetToken (TextOp->TextTwo, gFormData->HiiHandle); Size = StrLen (String); @@ -2184,16 +2208,16 @@ HasOptionString ( } if ((Statement->OpCode->OpCode == EFI_IFR_SUBTITLE_OP) || - (Statement->OpCode->OpCode == EFI_IFR_REF_OP) || - (Statement->OpCode->OpCode == EFI_IFR_PASSWORD_OP) || - (Statement->OpCode->OpCode == EFI_IFR_ACTION_OP) || - (Statement->OpCode->OpCode == EFI_IFR_RESET_BUTTON_OP) || - // - // Allow a wide display if text op-code and no secondary text op-code - // - ((Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) && (Size == 0)) - ) { - + (Statement->OpCode->OpCode == EFI_IFR_REF_OP) || + (Statement->OpCode->OpCode == EFI_IFR_PASSWORD_OP) || + (Statement->OpCode->OpCode == EFI_IFR_ACTION_OP) || + (Statement->OpCode->OpCode == EFI_IFR_RESET_BUTTON_OP) || + // + // Allow a wide display if text op-code and no secondary text op-code + // + ((Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) && (Size == 0)) + ) + { return FALSE; } @@ -2211,16 +2235,16 @@ HasOptionString ( **/ BOOLEAN FxConfirmPopup ( - IN UINT32 Action + IN UINT32 Action ) { - EFI_INPUT_KEY Key; - CHAR16 *CfmStr; - UINTN CfmStrLen; - UINT32 CheckFlags; - BOOLEAN RetVal; - UINTN CatLen; - UINTN MaxLen; + EFI_INPUT_KEY Key; + CHAR16 *CfmStr; + UINTN CfmStrLen; + UINT32 CheckFlags; + BOOLEAN RetVal; + UINTN CatLen; + UINTN MaxLen; CfmStrLen = 0; CatLen = StrLen (gConfirmMsgConnect); @@ -2360,43 +2384,43 @@ FxConfirmPopup ( **/ EFI_STATUS DisplayOneMenu ( - IN UI_MENU_OPTION *MenuOption, - IN UINTN SkipWidth, - IN UINTN BeginCol, - IN UINTN SkipLine, - IN UINTN BottomRow, - IN BOOLEAN Highlight, - IN BOOLEAN UpdateCol + IN UI_MENU_OPTION *MenuOption, + IN UINTN SkipWidth, + IN UINTN BeginCol, + IN UINTN SkipLine, + IN UINTN BottomRow, + IN BOOLEAN Highlight, + IN BOOLEAN UpdateCol ) { - FORM_DISPLAY_ENGINE_STATEMENT *Statement; - UINTN Index; - UINT16 Width; - UINT16 PromptWidth; - CHAR16 *StringPtr; - CHAR16 *OptionString; - CHAR16 *OutputString; - UINT16 GlyphWidth; - UINTN Temp; - UINTN Temp2; - UINTN Temp3; - EFI_STATUS Status; - UINTN Row; - BOOLEAN IsProcessingFirstRow; - UINTN Col; - UINTN PromptLineNum; - UINTN OptionLineNum; - CHAR16 AdjustValue; - UINTN MaxRow; - - Statement = MenuOption->ThisTag; - Temp = SkipLine; - Temp2 = SkipLine; - Temp3 = SkipLine; - AdjustValue = 0; - PromptLineNum = 0; - OptionLineNum = 0; - MaxRow = 0; + FORM_DISPLAY_ENGINE_STATEMENT *Statement; + UINTN Index; + UINT16 Width; + UINT16 PromptWidth; + CHAR16 *StringPtr; + CHAR16 *OptionString; + CHAR16 *OutputString; + UINT16 GlyphWidth; + UINTN Temp; + UINTN Temp2; + UINTN Temp3; + EFI_STATUS Status; + UINTN Row; + BOOLEAN IsProcessingFirstRow; + UINTN Col; + UINTN PromptLineNum; + UINTN OptionLineNum; + CHAR16 AdjustValue; + UINTN MaxRow; + + Statement = MenuOption->ThisTag; + Temp = SkipLine; + Temp2 = SkipLine; + Temp3 = SkipLine; + AdjustValue = 0; + PromptLineNum = 0; + OptionLineNum = 0; + MaxRow = 0; IsProcessingFirstRow = TRUE; // @@ -2413,21 +2437,21 @@ DisplayOneMenu ( } if (OptionString != NULL) { - if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP || Statement->OpCode->OpCode == EFI_IFR_TIME_OP) { + if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) || (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) { // // Adjust option string for date/time opcode. // - ProcessStringForDateTime(MenuOption, OptionString, UpdateCol); + ProcessStringForDateTime (MenuOption, OptionString, UpdateCol); } - Width = (UINT16) gOptionBlockWidth - 1; - Row = MenuOption->Row; - GlyphWidth = 1; + Width = (UINT16)gOptionBlockWidth - 1; + Row = MenuOption->Row; + GlyphWidth = 1; OptionLineNum = 0; for (Index = 0; GetLineByWidth (OptionString, Width, &GlyphWidth, &Index, &OutputString) != 0x0000;) { if (((Temp2 == 0)) && (Row <= BottomRow)) { - if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP || Statement->OpCode->OpCode == EFI_IFR_TIME_OP) { + if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) || (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) { // // For date/time question, it has three menu options for this qustion. // The first/second menu options with the skip value is 0. the last one @@ -2438,7 +2462,7 @@ DisplayOneMenu ( // For date/ time, print the last past (year for date and second for time) // - 7 means skip [##/##/ for date and [##:##: for time. // - DisplayMenuString (MenuOption,MenuOption->OptCol, Row, OutputString, Width + 1 - 7, Highlight); + DisplayMenuString (MenuOption, MenuOption->OptCol, Row, OutputString, Width + 1 - 7, Highlight); } else { // // For date/ time, print the first and second past (year for date and second for time) @@ -2449,6 +2473,7 @@ DisplayOneMenu ( } else { DisplayMenuString (MenuOption, MenuOption->OptCol, Row, OutputString, Width + 1, Highlight); } + OptionLineNum++; } @@ -2490,7 +2515,7 @@ DisplayOneMenu ( GlyphWidth = 1; PromptLineNum = 0; - if (MenuOption->Description == NULL || MenuOption->Description[0] == '\0') { + if ((MenuOption->Description == NULL) || (MenuOption->Description[0] == '\0')) { PrintStringAtWithWidth (BeginCol, Row, L"", PromptWidth + AdjustValue + SkipWidth); PromptLineNum++; } else { @@ -2501,7 +2526,7 @@ DisplayOneMenu ( // PrintStringAtWithWidth (BeginCol, Row, L"", SkipWidth); - if (Statement->OpCode->OpCode == EFI_IFR_REF_OP && MenuOption->Col >= 2 && IsProcessingFirstRow) { + if ((Statement->OpCode->OpCode == EFI_IFR_REF_OP) && (MenuOption->Col >= 2) && IsProcessingFirstRow) { // // Print Arrow for Goto button. // @@ -2512,9 +2537,11 @@ DisplayOneMenu ( ); IsProcessingFirstRow = FALSE; } + DisplayMenuString (MenuOption, MenuOption->Col, Row, OutputString, PromptWidth + AdjustValue, Highlight); - PromptLineNum ++; + PromptLineNum++; } + // // If there is more string to process print on the next row and increment the Skip value // @@ -2533,16 +2560,15 @@ DisplayOneMenu ( Highlight = FALSE; } - // // 3. If this is a text op with secondary text information // - if ((Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT*)Statement->OpCode)->TextTwo != 0)) { - StringPtr = GetToken (((EFI_IFR_TEXT*)Statement->OpCode)->TextTwo, gFormData->HiiHandle); + if ((Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT *)Statement->OpCode)->TextTwo != 0)) { + StringPtr = GetToken (((EFI_IFR_TEXT *)Statement->OpCode)->TextTwo, gFormData->HiiHandle); - Width = (UINT16) gOptionBlockWidth - 1; - Row = MenuOption->Row; - GlyphWidth = 1; + Width = (UINT16)gOptionBlockWidth - 1; + Row = MenuOption->Row; + GlyphWidth = 1; OptionLineNum = 0; for (Index = 0; GetLineByWidth (StringPtr, Width, &GlyphWidth, &Index, &OutputString) != 0x0000;) { @@ -2550,6 +2576,7 @@ DisplayOneMenu ( DisplayMenuString (MenuOption, MenuOption->OptCol, Row, OutputString, Width + 1, Highlight); OptionLineNum++; } + // // If there is more string to process print on the next row and increment the Skip value // @@ -2578,10 +2605,10 @@ DisplayOneMenu ( // 4.Line number for Option string and prompt string are not equal. // Clean the column whose line number is less. // - if (HasOptionString(MenuOption) && (OptionLineNum != PromptLineNum)) { + if (HasOptionString (MenuOption) && (OptionLineNum != PromptLineNum)) { Col = OptionLineNum < PromptLineNum ? MenuOption->OptCol : BeginCol; Row = (OptionLineNum < PromptLineNum ? OptionLineNum : PromptLineNum) + MenuOption->Row; - Width = (UINT16) (OptionLineNum < PromptLineNum ? gOptionBlockWidth : PromptWidth + AdjustValue + SkipWidth); + Width = (UINT16)(OptionLineNum < PromptLineNum ? gOptionBlockWidth : PromptWidth + AdjustValue + SkipWidth); MaxRow = (OptionLineNum < PromptLineNum ? PromptLineNum : OptionLineNum) + MenuOption->Row - 1; while (Row <= MaxRow) { @@ -2608,84 +2635,84 @@ UiDisplayMenu ( IN FORM_DISPLAY_ENGINE_FORM *FormData ) { - UINTN SkipValue; - INTN Difference; - UINTN DistanceValue; - UINTN Row; - UINTN Col; - UINTN Temp; - UINTN Temp2; - UINTN TopRow; - UINTN BottomRow; - UINTN Index; - CHAR16 *StringPtr; - CHAR16 *StringRightPtr; - CHAR16 *StringErrorPtr; - CHAR16 *OptionString; - CHAR16 *HelpString; - CHAR16 *HelpHeaderString; - CHAR16 *HelpBottomString; - BOOLEAN NewLine; - BOOLEAN Repaint; - BOOLEAN UpArrow; - BOOLEAN DownArrow; - EFI_STATUS Status; - EFI_INPUT_KEY Key; - LIST_ENTRY *Link; - LIST_ENTRY *NewPos; - LIST_ENTRY *TopOfScreen; - LIST_ENTRY *SavedListEntry; - UI_MENU_OPTION *MenuOption; - UI_MENU_OPTION *NextMenuOption; - UI_MENU_OPTION *SavedMenuOption; - UI_CONTROL_FLAG ControlFlag; - UI_SCREEN_OPERATION ScreenOperation; - FORM_DISPLAY_ENGINE_STATEMENT *Statement; - BROWSER_HOT_KEY *HotKey; - UINTN HelpPageIndex; - UINTN HelpPageCount; - UINTN RowCount; - UINTN HelpLine; - UINTN HelpHeaderLine; - UINTN HelpBottomLine; - BOOLEAN MultiHelpPage; - UINT16 EachLineWidth; - UINT16 HeaderLineWidth; - UINT16 BottomLineWidth; - EFI_STRING_ID HelpInfo; - UI_EVENT_TYPE EventType; - BOOLEAN SkipHighLight; - EFI_HII_VALUE *StatementValue; - - EventType = UIEventNone; - Status = EFI_SUCCESS; - HelpString = NULL; - HelpHeaderString = NULL; - HelpBottomString = NULL; - OptionString = NULL; - ScreenOperation = UiNoOperation; - NewLine = TRUE; - HelpPageCount = 0; - HelpLine = 0; - RowCount = 0; - HelpBottomLine = 0; - HelpHeaderLine = 0; - HelpPageIndex = 0; - MultiHelpPage = FALSE; - EachLineWidth = 0; - HeaderLineWidth = 0; - BottomLineWidth = 0; - UpArrow = FALSE; - DownArrow = FALSE; - SkipValue = 0; - SkipHighLight = FALSE; - - NextMenuOption = NULL; - SavedMenuOption = NULL; - HotKey = NULL; - Repaint = TRUE; - MenuOption = NULL; - gModalSkipColumn = (CHAR16) (gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn) / 6; + UINTN SkipValue; + INTN Difference; + UINTN DistanceValue; + UINTN Row; + UINTN Col; + UINTN Temp; + UINTN Temp2; + UINTN TopRow; + UINTN BottomRow; + UINTN Index; + CHAR16 *StringPtr; + CHAR16 *StringRightPtr; + CHAR16 *StringErrorPtr; + CHAR16 *OptionString; + CHAR16 *HelpString; + CHAR16 *HelpHeaderString; + CHAR16 *HelpBottomString; + BOOLEAN NewLine; + BOOLEAN Repaint; + BOOLEAN UpArrow; + BOOLEAN DownArrow; + EFI_STATUS Status; + EFI_INPUT_KEY Key; + LIST_ENTRY *Link; + LIST_ENTRY *NewPos; + LIST_ENTRY *TopOfScreen; + LIST_ENTRY *SavedListEntry; + UI_MENU_OPTION *MenuOption; + UI_MENU_OPTION *NextMenuOption; + UI_MENU_OPTION *SavedMenuOption; + UI_CONTROL_FLAG ControlFlag; + UI_SCREEN_OPERATION ScreenOperation; + FORM_DISPLAY_ENGINE_STATEMENT *Statement; + BROWSER_HOT_KEY *HotKey; + UINTN HelpPageIndex; + UINTN HelpPageCount; + UINTN RowCount; + UINTN HelpLine; + UINTN HelpHeaderLine; + UINTN HelpBottomLine; + BOOLEAN MultiHelpPage; + UINT16 EachLineWidth; + UINT16 HeaderLineWidth; + UINT16 BottomLineWidth; + EFI_STRING_ID HelpInfo; + UI_EVENT_TYPE EventType; + BOOLEAN SkipHighLight; + EFI_HII_VALUE *StatementValue; + + EventType = UIEventNone; + Status = EFI_SUCCESS; + HelpString = NULL; + HelpHeaderString = NULL; + HelpBottomString = NULL; + OptionString = NULL; + ScreenOperation = UiNoOperation; + NewLine = TRUE; + HelpPageCount = 0; + HelpLine = 0; + RowCount = 0; + HelpBottomLine = 0; + HelpHeaderLine = 0; + HelpPageIndex = 0; + MultiHelpPage = FALSE; + EachLineWidth = 0; + HeaderLineWidth = 0; + BottomLineWidth = 0; + UpArrow = FALSE; + DownArrow = FALSE; + SkipValue = 0; + SkipHighLight = FALSE; + + NextMenuOption = NULL; + SavedMenuOption = NULL; + HotKey = NULL; + Repaint = TRUE; + MenuOption = NULL; + gModalSkipColumn = (CHAR16)(gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn) / 6; ZeroMem (&Key, sizeof (EFI_INPUT_KEY)); @@ -2699,9 +2726,9 @@ UiDisplayMenu ( Col = gStatementDimensions.LeftColumn + LEFT_SKIPPED_COLUMNS; } - FindTopMenu(FormData, &TopOfScreen, &NewPos, &SkipValue); + FindTopMenu (FormData, &TopOfScreen, &NewPos, &SkipValue); if (!IsListEmpty (&gMenuOption)) { - NextMenuOption = MENU_OPTION_FROM_LINK (NewPos); + NextMenuOption = MENU_OPTION_FROM_LINK (NewPos); gUserInput->SelectedStatement = NextMenuOption->ThisTag; } @@ -2710,376 +2737,371 @@ UiDisplayMenu ( ControlFlag = CfInitialization; while (TRUE) { switch (ControlFlag) { - case CfInitialization: - if ((gOldFormEntry.HiiHandle != FormData->HiiHandle) || - (!CompareGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid))) { - // - // Clear Statement range if different formset is painted. - // - ClearLines ( - gStatementDimensions.LeftColumn, - gStatementDimensions.RightColumn, - TopRow - SCROLL_ARROW_HEIGHT, - BottomRow + SCROLL_ARROW_HEIGHT, - GetFieldTextColor () - ); - - } - ControlFlag = CfRepaint; - break; - - case CfRepaint: - ControlFlag = CfRefreshHighLight; + case CfInitialization: + if ((gOldFormEntry.HiiHandle != FormData->HiiHandle) || + (!CompareGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid))) + { + // + // Clear Statement range if different formset is painted. + // + ClearLines ( + gStatementDimensions.LeftColumn, + gStatementDimensions.RightColumn, + TopRow - SCROLL_ARROW_HEIGHT, + BottomRow + SCROLL_ARROW_HEIGHT, + GetFieldTextColor () + ); + } - if (Repaint) { - // - // Display menu - // - DownArrow = FALSE; - UpArrow = FALSE; - Row = TopRow; + ControlFlag = CfRepaint; + break; - gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ()); + case CfRepaint: + ControlFlag = CfRefreshHighLight; - // - // 1. Check whether need to print the arrow up. - // - if (!ValueIsScroll (TRUE, TopOfScreen)) { - UpArrow = TRUE; - } + if (Repaint) { + // + // Display menu + // + DownArrow = FALSE; + UpArrow = FALSE; + Row = TopRow; - if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { - PrintStringAtWithWidth(gStatementDimensions.LeftColumn + gModalSkipColumn, TopRow - 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * gModalSkipColumn); - } else { - PrintStringAtWithWidth(gStatementDimensions.LeftColumn, TopRow - 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn); - } - if (UpArrow) { - gST->ConOut->SetAttribute (gST->ConOut, GetArrowColor ()); - PrintCharAt ( - gStatementDimensions.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1, - TopRow - SCROLL_ARROW_HEIGHT, - ARROW_UP - ); gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ()); - } - // - // 2.Paint the menu. - // - for (Link = TopOfScreen; Link != &gMenuOption; Link = Link->ForwardLink) { - MenuOption = MENU_OPTION_FROM_LINK (Link); - MenuOption->Row = Row; - MenuOption->Col = Col; + // + // 1. Check whether need to print the arrow up. + // + if (!ValueIsScroll (TRUE, TopOfScreen)) { + UpArrow = TRUE; + } + if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { - MenuOption->OptCol = gStatementDimensions.LeftColumn + LEFT_SKIPPED_COLUMNS + gPromptBlockWidth + gModalSkipColumn; + PrintStringAtWithWidth (gStatementDimensions.LeftColumn + gModalSkipColumn, TopRow - 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * gModalSkipColumn); } else { - MenuOption->OptCol = gStatementDimensions.LeftColumn + LEFT_SKIPPED_COLUMNS + gPromptBlockWidth; + PrintStringAtWithWidth (gStatementDimensions.LeftColumn, TopRow - 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn); } - if (MenuOption->NestInStatement) { - MenuOption->Col += SUBTITLE_INDENT; + if (UpArrow) { + gST->ConOut->SetAttribute (gST->ConOut, GetArrowColor ()); + PrintCharAt ( + gStatementDimensions.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1, + TopRow - SCROLL_ARROW_HEIGHT, + ARROW_UP + ); + gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ()); } // - // Save the highlight menu, will be used in CfRefreshHighLight case. + // 2.Paint the menu. // - if (Link == NewPos) { - SavedMenuOption = MenuOption; - SkipHighLight = TRUE; - } + for (Link = TopOfScreen; Link != &gMenuOption; Link = Link->ForwardLink) { + MenuOption = MENU_OPTION_FROM_LINK (Link); + MenuOption->Row = Row; + MenuOption->Col = Col; + if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { + MenuOption->OptCol = gStatementDimensions.LeftColumn + LEFT_SKIPPED_COLUMNS + gPromptBlockWidth + gModalSkipColumn; + } else { + MenuOption->OptCol = gStatementDimensions.LeftColumn + LEFT_SKIPPED_COLUMNS + gPromptBlockWidth; + } - if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { - Status = DisplayOneMenu (MenuOption, - MenuOption->Col - gStatementDimensions.LeftColumn, - gStatementDimensions.LeftColumn + gModalSkipColumn, - Link == TopOfScreen ? SkipValue : 0, - BottomRow, - (BOOLEAN) ((Link == NewPos) && IsSelectable(MenuOption)), - TRUE - ); - } else { - Status = DisplayOneMenu (MenuOption, - MenuOption->Col - gStatementDimensions.LeftColumn, - gStatementDimensions.LeftColumn, - Link == TopOfScreen ? SkipValue : 0, - BottomRow, - (BOOLEAN) ((Link == NewPos) && IsSelectable(MenuOption)), - TRUE - ); - } + if (MenuOption->NestInStatement) { + MenuOption->Col += SUBTITLE_INDENT; + } + + // + // Save the highlight menu, will be used in CfRefreshHighLight case. + // + if (Link == NewPos) { + SavedMenuOption = MenuOption; + SkipHighLight = TRUE; + } + + if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { + Status = DisplayOneMenu ( + MenuOption, + MenuOption->Col - gStatementDimensions.LeftColumn, + gStatementDimensions.LeftColumn + gModalSkipColumn, + Link == TopOfScreen ? SkipValue : 0, + BottomRow, + (BOOLEAN)((Link == NewPos) && IsSelectable (MenuOption)), + TRUE + ); + } else { + Status = DisplayOneMenu ( + MenuOption, + MenuOption->Col - gStatementDimensions.LeftColumn, + gStatementDimensions.LeftColumn, + Link == TopOfScreen ? SkipValue : 0, + BottomRow, + (BOOLEAN)((Link == NewPos) && IsSelectable (MenuOption)), + TRUE + ); + } + + if (EFI_ERROR (Status)) { + if (gMisMatch) { + return EFI_SUCCESS; + } else { + return Status; + } + } - if (EFI_ERROR (Status)) { - if (gMisMatch) { - return EFI_SUCCESS; + // + // 3. Update the row info which will be used by next menu. + // + if (Link == TopOfScreen) { + Row += MenuOption->Skip - SkipValue; } else { - return Status; + Row += MenuOption->Skip; + } + + if (Row > BottomRow) { + if (!ValueIsScroll (FALSE, Link)) { + DownArrow = TRUE; + } + + Row = BottomRow + 1; + break; } } + // - // 3. Update the row info which will be used by next menu. + // 3. Menus in this form may not cover all form, clean the remain field. // - if (Link == TopOfScreen) { - Row += MenuOption->Skip - SkipValue; - } else { - Row += MenuOption->Skip; - } - - if (Row > BottomRow) { - if (!ValueIsScroll (FALSE, Link)) { - DownArrow = TRUE; + while (Row <= BottomRow) { + if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { + PrintStringAtWithWidth (gStatementDimensions.LeftColumn + gModalSkipColumn, Row++, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * gModalSkipColumn); + } else { + PrintStringAtWithWidth (gStatementDimensions.LeftColumn, Row++, L"", gStatementDimensions.RightColumn - gHelpBlockWidth - gStatementDimensions.LeftColumn); } - - Row = BottomRow + 1; - break; } - } - // - // 3. Menus in this form may not cover all form, clean the remain field. - // - while (Row <= BottomRow) { + // + // 4. Print the down arrow row. + // if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { - PrintStringAtWithWidth(gStatementDimensions.LeftColumn + gModalSkipColumn, Row++, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * gModalSkipColumn); + PrintStringAtWithWidth (gStatementDimensions.LeftColumn + gModalSkipColumn, BottomRow + 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * +gModalSkipColumn); } else { - PrintStringAtWithWidth(gStatementDimensions.LeftColumn, Row++, L"", gStatementDimensions.RightColumn - gHelpBlockWidth - gStatementDimensions.LeftColumn); + PrintStringAtWithWidth (gStatementDimensions.LeftColumn, BottomRow + 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn); } - } - - // - // 4. Print the down arrow row. - // - if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { - PrintStringAtWithWidth(gStatementDimensions.LeftColumn + gModalSkipColumn, BottomRow + 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * + gModalSkipColumn); - } else { - PrintStringAtWithWidth(gStatementDimensions.LeftColumn, BottomRow + 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn); - } - if (DownArrow) { - gST->ConOut->SetAttribute (gST->ConOut, GetArrowColor ()); - PrintCharAt ( - gStatementDimensions.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1, - BottomRow + SCROLL_ARROW_HEIGHT, - ARROW_DOWN - ); - gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ()); - } - - MenuOption = NULL; - } - break; - case CfRefreshHighLight: - - // - // MenuOption: Last menu option that need to remove hilight - // MenuOption is set to NULL in Repaint - // NewPos: Current menu option that need to hilight - // - ControlFlag = CfUpdateHelpString; + if (DownArrow) { + gST->ConOut->SetAttribute (gST->ConOut, GetArrowColor ()); + PrintCharAt ( + gStatementDimensions.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1, + BottomRow + SCROLL_ARROW_HEIGHT, + ARROW_DOWN + ); + gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ()); + } - ASSERT (NewPos != NULL); - UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue); + MenuOption = NULL; + } - if (SkipHighLight) { - SkipHighLight = FALSE; - MenuOption = SavedMenuOption; - RefreshKeyHelp(gFormData, SavedMenuOption->ThisTag, FALSE); break; - } - if (IsListEmpty (&gMenuOption)) { + case CfRefreshHighLight: + // - // No menu option, just update the hotkey filed. + // MenuOption: Last menu option that need to remove hilight + // MenuOption is set to NULL in Repaint + // NewPos: Current menu option that need to hilight // - RefreshKeyHelp(gFormData, NULL, FALSE); - break; - } + ControlFlag = CfUpdateHelpString; - if (MenuOption != NULL && TopOfScreen == &MenuOption->Link) { - Temp = SkipValue; - } else { - Temp = 0; - } - if (NewPos == TopOfScreen) { - Temp2 = SkipValue; - } else { - Temp2 = 0; - } + ASSERT (NewPos != NULL); + UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue); + + if (SkipHighLight) { + SkipHighLight = FALSE; + MenuOption = SavedMenuOption; + RefreshKeyHelp (gFormData, SavedMenuOption->ThisTag, FALSE); + break; + } - if (MenuOption == NULL || NewPos != &MenuOption->Link) { - if (MenuOption != NULL) { + if (IsListEmpty (&gMenuOption)) { // - // Remove the old highlight menu. + // No menu option, just update the hotkey filed. // - Status = DisplayOneMenu (MenuOption, - MenuOption->Col - gStatementDimensions.LeftColumn, - gStatementDimensions.LeftColumn, - Temp, - BottomRow, - FALSE, - FALSE - ); + RefreshKeyHelp (gFormData, NULL, FALSE); + break; } - // - // This is the current selected statement - // - MenuOption = MENU_OPTION_FROM_LINK (NewPos); - RefreshKeyHelp(gFormData, MenuOption->ThisTag, FALSE); - - if (!IsSelectable (MenuOption)) { - break; + if ((MenuOption != NULL) && (TopOfScreen == &MenuOption->Link)) { + Temp = SkipValue; + } else { + Temp = 0; } - Status = DisplayOneMenu (MenuOption, - MenuOption->Col - gStatementDimensions.LeftColumn, - gStatementDimensions.LeftColumn, - Temp2, - BottomRow, - TRUE, - FALSE - ); - } - break; + if (NewPos == TopOfScreen) { + Temp2 = SkipValue; + } else { + Temp2 = 0; + } - case CfUpdateHelpString: - ControlFlag = CfPrepareToReadKey; - if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { - break; - } + if ((MenuOption == NULL) || (NewPos != &MenuOption->Link)) { + if (MenuOption != NULL) { + // + // Remove the old highlight menu. + // + Status = DisplayOneMenu ( + MenuOption, + MenuOption->Col - gStatementDimensions.LeftColumn, + gStatementDimensions.LeftColumn, + Temp, + BottomRow, + FALSE, + FALSE + ); + } - // - // NewLine means only update highlight menu (remove old highlight and highlith - // the new one), not need to full repain the form. - // - if (Repaint || NewLine) { - if (IsListEmpty (&gMenuOption)) { - // - // Don't print anything if no mwnu option. - // - StringPtr = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle); - } else { // - // Don't print anything if it is a NULL help token + // This is the current selected statement // - ASSERT(MenuOption != NULL); - HelpInfo = ((EFI_IFR_STATEMENT_HEADER *) ((CHAR8 *)MenuOption->ThisTag->OpCode + sizeof (EFI_IFR_OP_HEADER)))->Help; - Statement = MenuOption->ThisTag; - StatementValue = &Statement->CurrentValue; - if (HelpInfo == 0 || !IsSelectable (MenuOption)) { - if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP && StatementValue->Value.date.Month== 0xff)||(Statement->OpCode->OpCode == EFI_IFR_TIME_OP && StatementValue->Value.time.Hour == 0xff)){ - StringPtr = GetToken (STRING_TOKEN (GET_TIME_FAIL), gHiiHandle); - } else { - StringPtr = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle); - } - } else { - if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP && StatementValue->Value.date.Month== 0xff)||(Statement->OpCode->OpCode == EFI_IFR_TIME_OP && StatementValue->Value.time.Hour == 0xff)){ - StringRightPtr = GetToken (HelpInfo, gFormData->HiiHandle); - StringErrorPtr = GetToken (STRING_TOKEN (GET_TIME_FAIL), gHiiHandle); - StringPtr = AllocateZeroPool ((StrLen (StringRightPtr) + StrLen (StringErrorPtr)+ 1 ) * sizeof (CHAR16)); - StrCpyS (StringPtr, StrLen (StringRightPtr) + StrLen (StringErrorPtr) + 1, StringRightPtr); - StrCatS (StringPtr, StrLen (StringRightPtr) + StrLen (StringErrorPtr) + 1, StringErrorPtr); - FreePool (StringRightPtr); - FreePool (StringErrorPtr); - } else { - StringPtr = GetToken (HelpInfo, gFormData->HiiHandle); - } + MenuOption = MENU_OPTION_FROM_LINK (NewPos); + RefreshKeyHelp (gFormData, MenuOption->ThisTag, FALSE); + + if (!IsSelectable (MenuOption)) { + break; } + + Status = DisplayOneMenu ( + MenuOption, + MenuOption->Col - gStatementDimensions.LeftColumn, + gStatementDimensions.LeftColumn, + Temp2, + BottomRow, + TRUE, + FALSE + ); + } + + break; + + case CfUpdateHelpString: + ControlFlag = CfPrepareToReadKey; + if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { + break; } - RowCount = BottomRow - TopRow + 1; - HelpPageIndex = 0; // - // 1.Calculate how many line the help string need to print. + // NewLine means only update highlight menu (remove old highlight and highlith + // the new one), not need to full repain the form. // - if (HelpString != NULL) { - FreePool (HelpString); - HelpString = NULL; - } - HelpLine = ProcessHelpString (StringPtr, &HelpString, &EachLineWidth, RowCount); - FreePool (StringPtr); - - if (HelpLine > RowCount) { - MultiHelpPage = TRUE; - StringPtr = GetToken (STRING_TOKEN(ADJUST_HELP_PAGE_UP), gHiiHandle); - if (HelpHeaderString != NULL) { - FreePool (HelpHeaderString); - HelpHeaderString = NULL; - } - HelpHeaderLine = ProcessHelpString (StringPtr, &HelpHeaderString, &HeaderLineWidth, 0); - FreePool (StringPtr); - StringPtr = GetToken (STRING_TOKEN(ADJUST_HELP_PAGE_DOWN), gHiiHandle); - if (HelpBottomString != NULL) { - FreePool (HelpBottomString); - HelpBottomString = NULL; + if (Repaint || NewLine) { + if (IsListEmpty (&gMenuOption)) { + // + // Don't print anything if no mwnu option. + // + StringPtr = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle); + } else { + // + // Don't print anything if it is a NULL help token + // + ASSERT (MenuOption != NULL); + HelpInfo = ((EFI_IFR_STATEMENT_HEADER *)((CHAR8 *)MenuOption->ThisTag->OpCode + sizeof (EFI_IFR_OP_HEADER)))->Help; + Statement = MenuOption->ThisTag; + StatementValue = &Statement->CurrentValue; + if ((HelpInfo == 0) || !IsSelectable (MenuOption)) { + if (((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) && (StatementValue->Value.date.Month == 0xff)) || ((Statement->OpCode->OpCode == EFI_IFR_TIME_OP) && (StatementValue->Value.time.Hour == 0xff))) { + StringPtr = GetToken (STRING_TOKEN (GET_TIME_FAIL), gHiiHandle); + } else { + StringPtr = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle); + } + } else { + if (((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) && (StatementValue->Value.date.Month == 0xff)) || ((Statement->OpCode->OpCode == EFI_IFR_TIME_OP) && (StatementValue->Value.time.Hour == 0xff))) { + StringRightPtr = GetToken (HelpInfo, gFormData->HiiHandle); + StringErrorPtr = GetToken (STRING_TOKEN (GET_TIME_FAIL), gHiiHandle); + StringPtr = AllocateZeroPool ((StrLen (StringRightPtr) + StrLen (StringErrorPtr)+ 1) * sizeof (CHAR16)); + StrCpyS (StringPtr, StrLen (StringRightPtr) + StrLen (StringErrorPtr) + 1, StringRightPtr); + StrCatS (StringPtr, StrLen (StringRightPtr) + StrLen (StringErrorPtr) + 1, StringErrorPtr); + FreePool (StringRightPtr); + FreePool (StringErrorPtr); + } else { + StringPtr = GetToken (HelpInfo, gFormData->HiiHandle); + } + } } - HelpBottomLine = ProcessHelpString (StringPtr, &HelpBottomString, &BottomLineWidth, 0); - FreePool (StringPtr); + + RowCount = BottomRow - TopRow + 1; + HelpPageIndex = 0; // - // Calculate the help page count. + // 1.Calculate how many line the help string need to print. // - if (HelpLine > 2 * RowCount - 2) { - HelpPageCount = (HelpLine - RowCount + 1) / (RowCount - 2) + 1; - if ((HelpLine - RowCount + 1) % (RowCount - 2) != 0) { - HelpPageCount += 1; + if (HelpString != NULL) { + FreePool (HelpString); + HelpString = NULL; + } + + HelpLine = ProcessHelpString (StringPtr, &HelpString, &EachLineWidth, RowCount); + FreePool (StringPtr); + + if (HelpLine > RowCount) { + MultiHelpPage = TRUE; + StringPtr = GetToken (STRING_TOKEN (ADJUST_HELP_PAGE_UP), gHiiHandle); + if (HelpHeaderString != NULL) { + FreePool (HelpHeaderString); + HelpHeaderString = NULL; + } + + HelpHeaderLine = ProcessHelpString (StringPtr, &HelpHeaderString, &HeaderLineWidth, 0); + FreePool (StringPtr); + StringPtr = GetToken (STRING_TOKEN (ADJUST_HELP_PAGE_DOWN), gHiiHandle); + if (HelpBottomString != NULL) { + FreePool (HelpBottomString); + HelpBottomString = NULL; + } + + HelpBottomLine = ProcessHelpString (StringPtr, &HelpBottomString, &BottomLineWidth, 0); + FreePool (StringPtr); + // + // Calculate the help page count. + // + if (HelpLine > 2 * RowCount - 2) { + HelpPageCount = (HelpLine - RowCount + 1) / (RowCount - 2) + 1; + if ((HelpLine - RowCount + 1) % (RowCount - 2) != 0) { + HelpPageCount += 1; + } + } else { + HelpPageCount = 2; } } else { - HelpPageCount = 2; + MultiHelpPage = FALSE; } - } else { - MultiHelpPage = FALSE; } - } - // - // Check whether need to show the 'More(U/u)' at the begin. - // Base on current direct info, here shows aligned to the right side of the column. - // If the direction is multi line and aligned to right side may have problem, so - // add ASSERT code here. - // - if (HelpPageIndex > 0) { - gST->ConOut->SetAttribute (gST->ConOut, GetInfoTextColor ()); - for (Index = 0; Index < HelpHeaderLine; Index++) { - ASSERT (HelpHeaderLine == 1); - ASSERT (GetStringWidth (HelpHeaderString) / 2 < ((UINT32) gHelpBlockWidth - 1)); - PrintStringAtWithWidth ( - gStatementDimensions.RightColumn - gHelpBlockWidth, - Index + TopRow, - gEmptyString, - gHelpBlockWidth - ); - PrintStringAt ( - gStatementDimensions.RightColumn - GetStringWidth (HelpHeaderString) / 2 - 1, - Index + TopRow, - &HelpHeaderString[Index * HeaderLineWidth] - ); + // + // Check whether need to show the 'More(U/u)' at the begin. + // Base on current direct info, here shows aligned to the right side of the column. + // If the direction is multi line and aligned to right side may have problem, so + // add ASSERT code here. + // + if (HelpPageIndex > 0) { + gST->ConOut->SetAttribute (gST->ConOut, GetInfoTextColor ()); + for (Index = 0; Index < HelpHeaderLine; Index++) { + ASSERT (HelpHeaderLine == 1); + ASSERT (GetStringWidth (HelpHeaderString) / 2 < ((UINT32)gHelpBlockWidth - 1)); + PrintStringAtWithWidth ( + gStatementDimensions.RightColumn - gHelpBlockWidth, + Index + TopRow, + gEmptyString, + gHelpBlockWidth + ); + PrintStringAt ( + gStatementDimensions.RightColumn - GetStringWidth (HelpHeaderString) / 2 - 1, + Index + TopRow, + &HelpHeaderString[Index * HeaderLineWidth] + ); + } } - } - gST->ConOut->SetAttribute (gST->ConOut, GetHelpTextColor ()); - // - // Print the help string info. - // - if (!MultiHelpPage) { - for (Index = 0; Index < HelpLine; Index++) { - PrintStringAtWithWidth ( - gStatementDimensions.RightColumn - gHelpBlockWidth, - Index + TopRow, - &HelpString[Index * EachLineWidth], - gHelpBlockWidth - ); - } - for (; Index < RowCount; Index ++) { - PrintStringAtWithWidth ( - gStatementDimensions.RightColumn - gHelpBlockWidth, - Index + TopRow, - gEmptyString, - gHelpBlockWidth - ); - } - gST->ConOut->SetCursorPosition(gST->ConOut, gStatementDimensions.RightColumn-1, BottomRow); - } else { - if (HelpPageIndex == 0) { - for (Index = 0; Index < RowCount - HelpBottomLine; Index++) { + gST->ConOut->SetAttribute (gST->ConOut, GetHelpTextColor ()); + // + // Print the help string info. + // + if (!MultiHelpPage) { + for (Index = 0; Index < HelpLine; Index++) { PrintStringAtWithWidth ( gStatementDimensions.RightColumn - gHelpBlockWidth, Index + TopRow, @@ -3087,714 +3109,764 @@ UiDisplayMenu ( gHelpBlockWidth ); } - } else { - for (Index = 0; (Index < RowCount - HelpBottomLine - HelpHeaderLine) && - (Index + HelpPageIndex * (RowCount - 2) + 1 < HelpLine); Index++) { + + for ( ; Index < RowCount; Index++) { PrintStringAtWithWidth ( gStatementDimensions.RightColumn - gHelpBlockWidth, - Index + TopRow + HelpHeaderLine, - &HelpString[(Index + HelpPageIndex * (RowCount - 2) + 1)* EachLineWidth], + Index + TopRow, + gEmptyString, gHelpBlockWidth ); } - if (HelpPageIndex == HelpPageCount - 1) { - for (; Index < RowCount - HelpHeaderLine; Index ++) { + + gST->ConOut->SetCursorPosition (gST->ConOut, gStatementDimensions.RightColumn-1, BottomRow); + } else { + if (HelpPageIndex == 0) { + for (Index = 0; Index < RowCount - HelpBottomLine; Index++) { + PrintStringAtWithWidth ( + gStatementDimensions.RightColumn - gHelpBlockWidth, + Index + TopRow, + &HelpString[Index * EachLineWidth], + gHelpBlockWidth + ); + } + } else { + for (Index = 0; (Index < RowCount - HelpBottomLine - HelpHeaderLine) && + (Index + HelpPageIndex * (RowCount - 2) + 1 < HelpLine); Index++) + { PrintStringAtWithWidth ( gStatementDimensions.RightColumn - gHelpBlockWidth, Index + TopRow + HelpHeaderLine, - gEmptyString, + &HelpString[(Index + HelpPageIndex * (RowCount - 2) + 1)* EachLineWidth], gHelpBlockWidth ); } - gST->ConOut->SetCursorPosition(gST->ConOut, gStatementDimensions.RightColumn-1, BottomRow); - } - } - } - - // - // Check whether need to print the 'More(D/d)' at the bottom. - // Base on current direct info, here shows aligned to the right side of the column. - // If the direction is multi line and aligned to right side may have problem, so - // add ASSERT code here. - // - if (HelpPageIndex < HelpPageCount - 1 && MultiHelpPage) { - gST->ConOut->SetAttribute (gST->ConOut, GetInfoTextColor ()); - for (Index = 0; Index < HelpBottomLine; Index++) { - ASSERT (HelpBottomLine == 1); - ASSERT (GetStringWidth (HelpBottomString) / 2 < ((UINT32) gHelpBlockWidth - 1)); - PrintStringAtWithWidth ( - gStatementDimensions.RightColumn - gHelpBlockWidth, - BottomRow + Index - HelpBottomLine + 1, - gEmptyString, - gHelpBlockWidth - ); - PrintStringAt ( - gStatementDimensions.RightColumn - GetStringWidth (HelpBottomString) / 2 - 1, - BottomRow + Index - HelpBottomLine + 1, - &HelpBottomString[Index * BottomLineWidth] - ); - } - } - // - // Reset this flag every time we finish using it. - // - Repaint = FALSE; - NewLine = FALSE; - break; - - case CfPrepareToReadKey: - ControlFlag = CfReadKey; - ScreenOperation = UiNoOperation; - break; - case CfReadKey: - ControlFlag = CfScreenOperation; + if (HelpPageIndex == HelpPageCount - 1) { + for ( ; Index < RowCount - HelpHeaderLine; Index++) { + PrintStringAtWithWidth ( + gStatementDimensions.RightColumn - gHelpBlockWidth, + Index + TopRow + HelpHeaderLine, + gEmptyString, + gHelpBlockWidth + ); + } - // - // Wait for user's selection - // - while (TRUE) { - Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key); - if (!EFI_ERROR (Status)) { - EventType = UIEventKey; - break; + gST->ConOut->SetCursorPosition (gST->ConOut, gStatementDimensions.RightColumn-1, BottomRow); + } + } } // - // If we encounter error, continue to read another key in. + // Check whether need to print the 'More(D/d)' at the bottom. + // Base on current direct info, here shows aligned to the right side of the column. + // If the direction is multi line and aligned to right side may have problem, so + // add ASSERT code here. // - if (Status != EFI_NOT_READY) { - continue; + if ((HelpPageIndex < HelpPageCount - 1) && MultiHelpPage) { + gST->ConOut->SetAttribute (gST->ConOut, GetInfoTextColor ()); + for (Index = 0; Index < HelpBottomLine; Index++) { + ASSERT (HelpBottomLine == 1); + ASSERT (GetStringWidth (HelpBottomString) / 2 < ((UINT32)gHelpBlockWidth - 1)); + PrintStringAtWithWidth ( + gStatementDimensions.RightColumn - gHelpBlockWidth, + BottomRow + Index - HelpBottomLine + 1, + gEmptyString, + gHelpBlockWidth + ); + PrintStringAt ( + gStatementDimensions.RightColumn - GetStringWidth (HelpBottomString) / 2 - 1, + BottomRow + Index - HelpBottomLine + 1, + &HelpBottomString[Index * BottomLineWidth] + ); + } } - EventType = UiWaitForEvent(gST->ConIn->WaitForKey); - if (EventType == UIEventKey) { - gST->ConIn->ReadKeyStroke (gST->ConIn, &Key); - } + // + // Reset this flag every time we finish using it. + // + Repaint = FALSE; + NewLine = FALSE; break; - } - if (EventType == UIEventDriver) { - gMisMatch = TRUE; - gUserInput->Action = BROWSER_ACTION_NONE; - ControlFlag = CfExit; + case CfPrepareToReadKey: + ControlFlag = CfReadKey; + ScreenOperation = UiNoOperation; break; - } - if (EventType == UIEventTimeOut) { - gUserInput->Action = BROWSER_ACTION_FORM_EXIT; - ControlFlag = CfExit; - break; - } + case CfReadKey: + ControlFlag = CfScreenOperation; + + // + // Wait for user's selection + // + while (TRUE) { + Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key); + if (!EFI_ERROR (Status)) { + EventType = UIEventKey; + break; + } + + // + // If we encounter error, continue to read another key in. + // + if (Status != EFI_NOT_READY) { + continue; + } + + EventType = UiWaitForEvent (gST->ConIn->WaitForKey); + if (EventType == UIEventKey) { + gST->ConIn->ReadKeyStroke (gST->ConIn, &Key); + } - switch (Key.UnicodeChar) { - case CHAR_CARRIAGE_RETURN: - if(MenuOption == NULL || MenuOption->GrayOut || MenuOption->ReadOnly) { - ControlFlag = CfReadKey; break; } - ScreenOperation = UiSelect; - gDirection = 0; - break; + if (EventType == UIEventDriver) { + gMisMatch = TRUE; + gUserInput->Action = BROWSER_ACTION_NONE; + ControlFlag = CfExit; + break; + } - // - // We will push the adjustment of these numeric values directly to the input handler - // NOTE: we won't handle manual input numeric - // - case '+': - case '-': - // - // If the screen has no menu items, and the user didn't select UiReset - // ignore the selection and go back to reading keys. - // - ASSERT(MenuOption != NULL); - if(IsListEmpty (&gMenuOption) || MenuOption->GrayOut || MenuOption->ReadOnly) { - ControlFlag = CfReadKey; + if (EventType == UIEventTimeOut) { + gUserInput->Action = BROWSER_ACTION_FORM_EXIT; + ControlFlag = CfExit; break; } - Statement = MenuOption->ThisTag; - if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) - || (Statement->OpCode->OpCode == EFI_IFR_TIME_OP) - || ((Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) && (GetFieldFromNum(Statement->OpCode) != 0)) - ){ - if (Key.UnicodeChar == '+') { - gDirection = SCAN_RIGHT; - } else { - gDirection = SCAN_LEFT; - } + switch (Key.UnicodeChar) { + case CHAR_CARRIAGE_RETURN: + if ((MenuOption == NULL) || MenuOption->GrayOut || MenuOption->ReadOnly) { + ControlFlag = CfReadKey; + break; + } - Status = ProcessOptions (MenuOption, TRUE, &OptionString, TRUE); - if (OptionString != NULL) { - FreePool (OptionString); - } - if (EFI_ERROR (Status)) { + ScreenOperation = UiSelect; + gDirection = 0; + break; + + // + // We will push the adjustment of these numeric values directly to the input handler + // NOTE: we won't handle manual input numeric + // + case '+': + case '-': // - // Repaint to clear possible error prompt pop-up + // If the screen has no menu items, and the user didn't select UiReset + // ignore the selection and go back to reading keys. // - Repaint = TRUE; - NewLine = TRUE; - } else { - ControlFlag = CfExit; - } - } - break; + ASSERT (MenuOption != NULL); + if (IsListEmpty (&gMenuOption) || MenuOption->GrayOut || MenuOption->ReadOnly) { + ControlFlag = CfReadKey; + break; + } - case '^': - ScreenOperation = UiUp; - break; + Statement = MenuOption->ThisTag; + if ( (Statement->OpCode->OpCode == EFI_IFR_DATE_OP) + || (Statement->OpCode->OpCode == EFI_IFR_TIME_OP) + || ((Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) && (GetFieldFromNum (Statement->OpCode) != 0)) + ) + { + if (Key.UnicodeChar == '+') { + gDirection = SCAN_RIGHT; + } else { + gDirection = SCAN_LEFT; + } + + Status = ProcessOptions (MenuOption, TRUE, &OptionString, TRUE); + if (OptionString != NULL) { + FreePool (OptionString); + } + + if (EFI_ERROR (Status)) { + // + // Repaint to clear possible error prompt pop-up + // + Repaint = TRUE; + NewLine = TRUE; + } else { + ControlFlag = CfExit; + } + } - case 'V': - case 'v': - ScreenOperation = UiDown; - break; + break; - case ' ': - if(IsListEmpty (&gMenuOption)) { - ControlFlag = CfReadKey; - break; - } + case '^': + ScreenOperation = UiUp; + break; - ASSERT(MenuOption != NULL); - if (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_CHECKBOX_OP && !MenuOption->GrayOut && !MenuOption->ReadOnly) { - ScreenOperation = UiSelect; - } - break; + case 'V': + case 'v': + ScreenOperation = UiDown; + break; - case 'D': - case 'd': - if (!MultiHelpPage) { - ControlFlag = CfReadKey; - break; - } - ControlFlag = CfUpdateHelpString; - HelpPageIndex = HelpPageIndex < HelpPageCount - 1 ? HelpPageIndex + 1 : HelpPageCount - 1; - break; + case ' ': + if (IsListEmpty (&gMenuOption)) { + ControlFlag = CfReadKey; + break; + } - case 'U': - case 'u': - if (!MultiHelpPage) { - ControlFlag = CfReadKey; - break; + ASSERT (MenuOption != NULL); + if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_CHECKBOX_OP) && !MenuOption->GrayOut && !MenuOption->ReadOnly) { + ScreenOperation = UiSelect; + } + + break; + + case 'D': + case 'd': + if (!MultiHelpPage) { + ControlFlag = CfReadKey; + break; + } + + ControlFlag = CfUpdateHelpString; + HelpPageIndex = HelpPageIndex < HelpPageCount - 1 ? HelpPageIndex + 1 : HelpPageCount - 1; + break; + + case 'U': + case 'u': + if (!MultiHelpPage) { + ControlFlag = CfReadKey; + break; + } + + ControlFlag = CfUpdateHelpString; + HelpPageIndex = HelpPageIndex > 0 ? HelpPageIndex - 1 : 0; + break; + + case CHAR_NULL: + for (Index = 0; Index < mScanCodeNumber; Index++) { + if (Key.ScanCode == gScanCodeToOperation[Index].ScanCode) { + ScreenOperation = gScanCodeToOperation[Index].ScreenOperation; + break; + } + } + + if (((FormData->Attribute & HII_DISPLAY_MODAL) != 0) && ((Key.ScanCode == SCAN_ESC) || (Index == mScanCodeNumber))) { + // + // ModalForm has no ESC key and Hot Key. + // + ControlFlag = CfReadKey; + } else if (Index == mScanCodeNumber) { + // + // Check whether Key matches the registered hot key. + // + HotKey = NULL; + HotKey = GetHotKeyFromRegisterList (&Key); + if (HotKey != NULL) { + ScreenOperation = UiHotKey; + } + } + + break; } - ControlFlag = CfUpdateHelpString; - HelpPageIndex = HelpPageIndex > 0 ? HelpPageIndex - 1 : 0; + break; - case CHAR_NULL: - for (Index = 0; Index < mScanCodeNumber; Index++) { - if (Key.ScanCode == gScanCodeToOperation[Index].ScanCode) { - ScreenOperation = gScanCodeToOperation[Index].ScreenOperation; + case CfScreenOperation: + if ((ScreenOperation != UiReset) && (ScreenOperation != UiHotKey)) { + // + // If the screen has no menu items, and the user didn't select UiReset or UiHotKey + // ignore the selection and go back to reading keys. + // + if (IsListEmpty (&gMenuOption)) { + ControlFlag = CfReadKey; break; } } - if (((FormData->Attribute & HII_DISPLAY_MODAL) != 0) && (Key.ScanCode == SCAN_ESC || Index == mScanCodeNumber)) { - // - // ModalForm has no ESC key and Hot Key. - // - ControlFlag = CfReadKey; - } else if (Index == mScanCodeNumber) { - // - // Check whether Key matches the registered hot key. - // - HotKey = NULL; - HotKey = GetHotKeyFromRegisterList (&Key); - if (HotKey != NULL) { - ScreenOperation = UiHotKey; + for (Index = 0; + Index < ARRAY_SIZE (gScreenOperationToControlFlag); + Index++ + ) + { + if (ScreenOperation == gScreenOperationToControlFlag[Index].ScreenOperation) { + ControlFlag = gScreenOperationToControlFlag[Index].ControlFlag; + break; } } + break; - } - break; - case CfScreenOperation: - if ((ScreenOperation != UiReset) && (ScreenOperation != UiHotKey)) { - // - // If the screen has no menu items, and the user didn't select UiReset or UiHotKey - // ignore the selection and go back to reading keys. - // - if (IsListEmpty (&gMenuOption)) { - ControlFlag = CfReadKey; - break; - } - } + case CfUiSelect: + ControlFlag = CfRepaint; - for (Index = 0; - Index < ARRAY_SIZE (gScreenOperationToControlFlag); - Index++ - ) { - if (ScreenOperation == gScreenOperationToControlFlag[Index].ScreenOperation) { - ControlFlag = gScreenOperationToControlFlag[Index].ControlFlag; + ASSERT (MenuOption != NULL); + Statement = MenuOption->ThisTag; + if (Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) { break; } - } - break; - case CfUiSelect: - ControlFlag = CfRepaint; + switch (Statement->OpCode->OpCode) { + case EFI_IFR_REF_OP: + case EFI_IFR_ACTION_OP: + case EFI_IFR_RESET_BUTTON_OP: + ControlFlag = CfExit; + break; - ASSERT(MenuOption != NULL); - Statement = MenuOption->ThisTag; - if (Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) { - break; - } + default: + // + // Editable Questions: oneof, ordered list, checkbox, numeric, string, password + // + RefreshKeyHelp (gFormData, Statement, TRUE); + Status = ProcessOptions (MenuOption, TRUE, &OptionString, TRUE); + + if (OptionString != NULL) { + FreePool (OptionString); + } + + if (EFI_ERROR (Status)) { + Repaint = TRUE; + NewLine = TRUE; + RefreshKeyHelp (gFormData, Statement, FALSE); + break; + } else { + ControlFlag = CfExit; + break; + } + } - switch (Statement->OpCode->OpCode) { - case EFI_IFR_REF_OP: - case EFI_IFR_ACTION_OP: - case EFI_IFR_RESET_BUTTON_OP: - ControlFlag = CfExit; break; - default: + case CfUiReset: // - // Editable Questions: oneof, ordered list, checkbox, numeric, string, password + // We come here when someone press ESC + // If the policy is not exit front page when user press ESC, process here. // - RefreshKeyHelp (gFormData, Statement, TRUE); - Status = ProcessOptions (MenuOption, TRUE, &OptionString, TRUE); - - if (OptionString != NULL) { - FreePool (OptionString); - } - - if (EFI_ERROR (Status)) { - Repaint = TRUE; - NewLine = TRUE; - RefreshKeyHelp (gFormData, Statement, FALSE); - break; - } else { - ControlFlag = CfExit; + if (!FormExitPolicy ()) { + Repaint = TRUE; + NewLine = TRUE; + ControlFlag = CfRepaint; break; } - } - break; - case CfUiReset: - // - // We come here when someone press ESC - // If the policy is not exit front page when user press ESC, process here. - // - if (!FormExitPolicy()) { - Repaint = TRUE; - NewLine = TRUE; - ControlFlag = CfRepaint; + gUserInput->Action = BROWSER_ACTION_FORM_EXIT; + ControlFlag = CfExit; break; - } - gUserInput->Action = BROWSER_ACTION_FORM_EXIT; - ControlFlag = CfExit; - break; + case CfUiHotKey: + ControlFlag = CfRepaint; - case CfUiHotKey: - ControlFlag = CfRepaint; + ASSERT (HotKey != NULL); - ASSERT (HotKey != NULL); + if (FxConfirmPopup (HotKey->Action)) { + gUserInput->Action = HotKey->Action; + if ((HotKey->Action & BROWSER_ACTION_DEFAULT) == BROWSER_ACTION_DEFAULT) { + gUserInput->DefaultId = HotKey->DefaultId; + } - if (FxConfirmPopup(HotKey->Action)) { - gUserInput->Action = HotKey->Action; - if ((HotKey->Action & BROWSER_ACTION_DEFAULT) == BROWSER_ACTION_DEFAULT) { - gUserInput->DefaultId = HotKey->DefaultId; + ControlFlag = CfExit; + } else { + Repaint = TRUE; + NewLine = TRUE; + ControlFlag = CfRepaint; } - ControlFlag = CfExit; - } else { - Repaint = TRUE; - NewLine = TRUE; - ControlFlag = CfRepaint; - } - break; + break; - case CfUiLeft: - ControlFlag = CfRepaint; - ASSERT(MenuOption != NULL); - if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_DATE_OP) || (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) { - if (MenuOption->Sequence != 0) { - // - // In the middle or tail of the Date/Time op-code set, go left. - // - ASSERT(NewPos != NULL); - NewPos = NewPos->BackLink; + case CfUiLeft: + ControlFlag = CfRepaint; + ASSERT (MenuOption != NULL); + if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_DATE_OP) || (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) { + if (MenuOption->Sequence != 0) { + // + // In the middle or tail of the Date/Time op-code set, go left. + // + ASSERT (NewPos != NULL); + NewPos = NewPos->BackLink; + } } - } - break; - case CfUiRight: - ControlFlag = CfRepaint; - ASSERT(MenuOption != NULL); - if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_DATE_OP) || (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) { - if (MenuOption->Sequence != 2) { - // - // In the middle or tail of the Date/Time op-code set, go left. - // - ASSERT(NewPos != NULL); - NewPos = NewPos->ForwardLink; + break; + + case CfUiRight: + ControlFlag = CfRepaint; + ASSERT (MenuOption != NULL); + if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_DATE_OP) || (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) { + if (MenuOption->Sequence != 2) { + // + // In the middle or tail of the Date/Time op-code set, go left. + // + ASSERT (NewPos != NULL); + NewPos = NewPos->ForwardLink; + } } - } - break; - case CfUiUp: - ControlFlag = CfRepaint; - NewLine = TRUE; + break; - SavedListEntry = NewPos; - ASSERT(NewPos != NULL); + case CfUiUp: + ControlFlag = CfRepaint; + NewLine = TRUE; - MenuOption = MENU_OPTION_FROM_LINK (NewPos); - ASSERT (MenuOption != NULL); + SavedListEntry = NewPos; + ASSERT (NewPos != NULL); - // - // Adjust Date/Time position before we advance forward. - // - AdjustDateAndTimePosition (TRUE, &NewPos); + MenuOption = MENU_OPTION_FROM_LINK (NewPos); + ASSERT (MenuOption != NULL); - NewPos = NewPos->BackLink; - // - // Find next selectable menu or the first menu beyond current form. - // - Difference = MoveToNextStatement (TRUE, &NewPos, MenuOption->Row - TopRow, FALSE); - if (Difference < 0) { // - // We hit the begining MenuOption that can be focused - // so we simply scroll to the top. + // Adjust Date/Time position before we advance forward. // - Repaint = TRUE; - if (TopOfScreen != gMenuOption.ForwardLink || SkipValue != 0) { - TopOfScreen = gMenuOption.ForwardLink; - NewPos = SavedListEntry; - SkipValue = 0; - } else { - // - // Scroll up to the last page when we have arrived at top page. - // - TopOfScreen = FindTopOfScreenMenu (gMenuOption.BackLink, BottomRow - TopRow, &SkipValue); - NewPos = gMenuOption.BackLink; - MoveToNextStatement (TRUE, &NewPos, BottomRow - TopRow, TRUE); - } - } else { - NextMenuOption = MENU_OPTION_FROM_LINK (NewPos); - - if (MenuOption->Row < TopRow + Difference + NextMenuOption->Skip) { - // - // Previous focus MenuOption is above the TopOfScreen, so we need to scroll - // - TopOfScreen = NewPos; - Repaint = TRUE; - SkipValue = 0; - } + AdjustDateAndTimePosition (TRUE, &NewPos); + NewPos = NewPos->BackLink; // - // Check whether new highlight menu is selectable, if not, keep highlight on the old one. - // - // BottomRow - TopRow + 1 means the total rows current forms supported. - // Difference + NextMenuOption->Skip + 1 means the distance between last highlight menu - // and new top menu. New top menu will all shows in next form, but last highlight menu - // may only shows 1 line. + 1 at right part means at least need to keep 1 line for the - // last highlight menu. + // Find next selectable menu or the first menu beyond current form. // - if (!IsSelectable(NextMenuOption) && IsSelectable(MenuOption) && - (BottomRow - TopRow + 1 >= Difference + NextMenuOption->Skip + 1)) { - NewPos = SavedListEntry; - } - } - - UpdateStatusBar (INPUT_ERROR, FALSE); + Difference = MoveToNextStatement (TRUE, &NewPos, MenuOption->Row - TopRow, FALSE); + if (Difference < 0) { + // + // We hit the begining MenuOption that can be focused + // so we simply scroll to the top. + // + Repaint = TRUE; + if ((TopOfScreen != gMenuOption.ForwardLink) || (SkipValue != 0)) { + TopOfScreen = gMenuOption.ForwardLink; + NewPos = SavedListEntry; + SkipValue = 0; + } else { + // + // Scroll up to the last page when we have arrived at top page. + // + TopOfScreen = FindTopOfScreenMenu (gMenuOption.BackLink, BottomRow - TopRow, &SkipValue); + NewPos = gMenuOption.BackLink; + MoveToNextStatement (TRUE, &NewPos, BottomRow - TopRow, TRUE); + } + } else { + NextMenuOption = MENU_OPTION_FROM_LINK (NewPos); - // - // If we encounter a Date/Time op-code set, rewind to the first op-code of the set. - // - AdjustDateAndTimePosition (TRUE, &TopOfScreen); - AdjustDateAndTimePosition (TRUE, &NewPos); + if (MenuOption->Row < TopRow + Difference + NextMenuOption->Skip) { + // + // Previous focus MenuOption is above the TopOfScreen, so we need to scroll + // + TopOfScreen = NewPos; + Repaint = TRUE; + SkipValue = 0; + } - UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue); - break; + // + // Check whether new highlight menu is selectable, if not, keep highlight on the old one. + // + // BottomRow - TopRow + 1 means the total rows current forms supported. + // Difference + NextMenuOption->Skip + 1 means the distance between last highlight menu + // and new top menu. New top menu will all shows in next form, but last highlight menu + // may only shows 1 line. + 1 at right part means at least need to keep 1 line for the + // last highlight menu. + // + if (!IsSelectable (NextMenuOption) && IsSelectable (MenuOption) && + (BottomRow - TopRow + 1 >= Difference + NextMenuOption->Skip + 1)) + { + NewPos = SavedListEntry; + } + } - case CfUiPageUp: - // - // SkipValue means lines is skipped when show the top menu option. - // - ControlFlag = CfRepaint; - NewLine = TRUE; - Repaint = TRUE; + UpdateStatusBar (INPUT_ERROR, FALSE); - Link = TopOfScreen; - // - // First minus the menu of the top screen, it's value is SkipValue. - // - if (SkipValue >= BottomRow - TopRow + 1) { // - // SkipValue > (BottomRow - TopRow + 1) means current menu has more than one - // form of options to be show, so just update the SkipValue to show the next - // parts of options. + // If we encounter a Date/Time op-code set, rewind to the first op-code of the set. // - SkipValue -= BottomRow - TopRow + 1; - NewPos = TopOfScreen; + AdjustDateAndTimePosition (TRUE, &TopOfScreen); + AdjustDateAndTimePosition (TRUE, &NewPos); + + UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue); break; - } else { - Index = (BottomRow + 1) - SkipValue - TopRow; - } - TopOfScreen = FindTopOfScreenMenu(TopOfScreen, Index, &SkipValue); - NewPos = TopOfScreen; - MoveToNextStatement (FALSE, &NewPos, BottomRow - TopRow, FALSE); + case CfUiPageUp: + // + // SkipValue means lines is skipped when show the top menu option. + // + ControlFlag = CfRepaint; + NewLine = TRUE; + Repaint = TRUE; - UpdateStatusBar (INPUT_ERROR, FALSE); + Link = TopOfScreen; + // + // First minus the menu of the top screen, it's value is SkipValue. + // + if (SkipValue >= BottomRow - TopRow + 1) { + // + // SkipValue > (BottomRow - TopRow + 1) means current menu has more than one + // form of options to be show, so just update the SkipValue to show the next + // parts of options. + // + SkipValue -= BottomRow - TopRow + 1; + NewPos = TopOfScreen; + break; + } else { + Index = (BottomRow + 1) - SkipValue - TopRow; + } - // - // If we encounter a Date/Time op-code set, rewind to the first op-code of the set. - // Don't do this when we are already in the first page. - // - AdjustDateAndTimePosition (TRUE, &TopOfScreen); - AdjustDateAndTimePosition (TRUE, &NewPos); + TopOfScreen = FindTopOfScreenMenu (TopOfScreen, Index, &SkipValue); + NewPos = TopOfScreen; + MoveToNextStatement (FALSE, &NewPos, BottomRow - TopRow, FALSE); - UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue); - break; + UpdateStatusBar (INPUT_ERROR, FALSE); - case CfUiPageDown: - // - // SkipValue means lines is skipped when show the top menu option. - // - ControlFlag = CfRepaint; - NewLine = TRUE; - Repaint = TRUE; + // + // If we encounter a Date/Time op-code set, rewind to the first op-code of the set. + // Don't do this when we are already in the first page. + // + AdjustDateAndTimePosition (TRUE, &TopOfScreen); + AdjustDateAndTimePosition (TRUE, &NewPos); - Link = TopOfScreen; - NextMenuOption = MENU_OPTION_FROM_LINK (Link); - Index = TopRow + NextMenuOption->Skip - SkipValue; - // - // Count to the menu option which will show at the top of the next form. - // - while ((Index <= BottomRow + 1) && (Link->ForwardLink != &gMenuOption)) { - Link = Link->ForwardLink; - NextMenuOption = MENU_OPTION_FROM_LINK (Link); - Index = Index + NextMenuOption->Skip; - } + UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue); + break; - if ((Link->ForwardLink == &gMenuOption) && (Index <= BottomRow + 1)) { + case CfUiPageDown: // - // Highlight on the last menu which can be highlight. + // SkipValue means lines is skipped when show the top menu option. // - Repaint = FALSE; - MoveToNextStatement (TRUE, &Link, Index - TopRow, TRUE); - } else { + ControlFlag = CfRepaint; + NewLine = TRUE; + Repaint = TRUE; + + Link = TopOfScreen; + NextMenuOption = MENU_OPTION_FROM_LINK (Link); + Index = TopRow + NextMenuOption->Skip - SkipValue; // - // Calculate the skip line for top of screen menu. + // Count to the menu option which will show at the top of the next form. // - if (Link == TopOfScreen) { + while ((Index <= BottomRow + 1) && (Link->ForwardLink != &gMenuOption)) { + Link = Link->ForwardLink; + NextMenuOption = MENU_OPTION_FROM_LINK (Link); + Index = Index + NextMenuOption->Skip; + } + + if ((Link->ForwardLink == &gMenuOption) && (Index <= BottomRow + 1)) { // - // The top of screen menu option occupies the entire form. + // Highlight on the last menu which can be highlight. // - SkipValue += BottomRow - TopRow + 1; + Repaint = FALSE; + MoveToNextStatement (TRUE, &Link, Index - TopRow, TRUE); } else { - SkipValue = NextMenuOption->Skip - (Index - (BottomRow + 1)); + // + // Calculate the skip line for top of screen menu. + // + if (Link == TopOfScreen) { + // + // The top of screen menu option occupies the entire form. + // + SkipValue += BottomRow - TopRow + 1; + } else { + SkipValue = NextMenuOption->Skip - (Index - (BottomRow + 1)); + } + + TopOfScreen = Link; + MenuOption = NULL; + // + // Move to the Next selectable menu. + // + MoveToNextStatement (FALSE, &Link, BottomRow - TopRow, TRUE); } - TopOfScreen = Link; - MenuOption = NULL; + // - // Move to the Next selectable menu. + // Save the menu as the next highlight menu. // - MoveToNextStatement (FALSE, &Link, BottomRow - TopRow, TRUE); - } - - // - // Save the menu as the next highlight menu. - // - NewPos = Link; - - UpdateStatusBar (INPUT_ERROR, FALSE); - - // - // If we encounter a Date/Time op-code set, rewind to the first op-code of the set. - // Don't do this when we are already in the last page. - // - AdjustDateAndTimePosition (TRUE, &TopOfScreen); - AdjustDateAndTimePosition (TRUE, &NewPos); + NewPos = Link; - UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue); - break; + UpdateStatusBar (INPUT_ERROR, FALSE); - case CfUiDown: - // - // SkipValue means lines is skipped when show the top menu option. - // NewPos points to the menu which is highlighted now. - // - ControlFlag = CfRepaint; - NewLine = TRUE; + // + // If we encounter a Date/Time op-code set, rewind to the first op-code of the set. + // Don't do this when we are already in the last page. + // + AdjustDateAndTimePosition (TRUE, &TopOfScreen); + AdjustDateAndTimePosition (TRUE, &NewPos); - if (NewPos == TopOfScreen) { - Temp2 = SkipValue; - } else { - Temp2 = 0; - } + UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue); + break; - SavedListEntry = NewPos; - // - // Since the behavior of hitting the down arrow on a Date/Time op-code is intended - // to be one that progresses to the next set of op-codes, we need to advance to the last - // Date/Time op-code and leave the remaining logic in UiDown intact so the appropriate - // checking can be done. The only other logic we need to introduce is that if a Date/Time - // op-code is the last entry in the menu, we need to rewind back to the first op-code of - // the Date/Time op-code. - // - AdjustDateAndTimePosition (FALSE, &NewPos); + case CfUiDown: + // + // SkipValue means lines is skipped when show the top menu option. + // NewPos points to the menu which is highlighted now. + // + ControlFlag = CfRepaint; + NewLine = TRUE; - MenuOption = MENU_OPTION_FROM_LINK (NewPos); - NewPos = NewPos->ForwardLink; - // - // Find the next selectable menu. - // - if (MenuOption->Row + MenuOption->Skip - Temp2 > BottomRow + 1) { - if (gMenuOption.ForwardLink == NewPos || &gMenuOption == NewPos) { - Difference = -1; + if (NewPos == TopOfScreen) { + Temp2 = SkipValue; } else { - Difference = 0; + Temp2 = 0; } - } else { - Difference = MoveToNextStatement (FALSE, &NewPos, BottomRow + 1 - (MenuOption->Row + MenuOption->Skip - Temp2), FALSE); - } - if (Difference < 0) { + + SavedListEntry = NewPos; // - // Scroll to the first page. + // Since the behavior of hitting the down arrow on a Date/Time op-code is intended + // to be one that progresses to the next set of op-codes, we need to advance to the last + // Date/Time op-code and leave the remaining logic in UiDown intact so the appropriate + // checking can be done. The only other logic we need to introduce is that if a Date/Time + // op-code is the last entry in the menu, we need to rewind back to the first op-code of + // the Date/Time op-code. // - if (TopOfScreen != gMenuOption.ForwardLink || SkipValue != 0) { - TopOfScreen = gMenuOption.ForwardLink; - Repaint = TRUE; - MenuOption = NULL; - } else { - MenuOption = MENU_OPTION_FROM_LINK (SavedListEntry); - } - NewPos = gMenuOption.ForwardLink; - MoveToNextStatement (FALSE, &NewPos, BottomRow - TopRow, TRUE); + AdjustDateAndTimePosition (FALSE, &NewPos); - SkipValue = 0; + MenuOption = MENU_OPTION_FROM_LINK (NewPos); + NewPos = NewPos->ForwardLink; // - // If we are at the end of the list and sitting on a Date/Time op, rewind to the head. + // Find the next selectable menu. // - AdjustDateAndTimePosition (TRUE, &TopOfScreen); - AdjustDateAndTimePosition (TRUE, &NewPos); + if (MenuOption->Row + MenuOption->Skip - Temp2 > BottomRow + 1) { + if ((gMenuOption.ForwardLink == NewPos) || (&gMenuOption == NewPos)) { + Difference = -1; + } else { + Difference = 0; + } + } else { + Difference = MoveToNextStatement (FALSE, &NewPos, BottomRow + 1 - (MenuOption->Row + MenuOption->Skip - Temp2), FALSE); + } - UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue); - break; - } + if (Difference < 0) { + // + // Scroll to the first page. + // + if ((TopOfScreen != gMenuOption.ForwardLink) || (SkipValue != 0)) { + TopOfScreen = gMenuOption.ForwardLink; + Repaint = TRUE; + MenuOption = NULL; + } else { + MenuOption = MENU_OPTION_FROM_LINK (SavedListEntry); + } - // - // Get next selected menu info. - // - AdjustDateAndTimePosition (FALSE, &NewPos); - NextMenuOption = MENU_OPTION_FROM_LINK (NewPos); - if (NextMenuOption->Row == 0) { - UpdateOptionSkipLines (NextMenuOption); - } + NewPos = gMenuOption.ForwardLink; + MoveToNextStatement (FALSE, &NewPos, BottomRow - TopRow, TRUE); + + SkipValue = 0; + // + // If we are at the end of the list and sitting on a Date/Time op, rewind to the head. + // + AdjustDateAndTimePosition (TRUE, &TopOfScreen); + AdjustDateAndTimePosition (TRUE, &NewPos); + + UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue); + break; + } - // - // Calculate new highlight menu end row. - // - Temp = (MenuOption->Row + MenuOption->Skip - Temp2) + Difference + NextMenuOption->Skip - 1; - if (Temp > BottomRow) { // - // Get the top screen menu info. + // Get next selected menu info. // - AdjustDateAndTimePosition (FALSE, &TopOfScreen); - SavedMenuOption = MENU_OPTION_FROM_LINK (TopOfScreen); + AdjustDateAndTimePosition (FALSE, &NewPos); + NextMenuOption = MENU_OPTION_FROM_LINK (NewPos); + if (NextMenuOption->Row == 0) { + UpdateOptionSkipLines (NextMenuOption); + } // - // Current Top screen menu occupy (SavedMenuOption->Skip - SkipValue) rows. - // Full shows the new selected menu need to skip (Temp - BottomRow - 1) rows. + // Calculate new highlight menu end row. // - if ((Temp - BottomRow) >= (SavedMenuOption->Skip - SkipValue)) { + Temp = (MenuOption->Row + MenuOption->Skip - Temp2) + Difference + NextMenuOption->Skip - 1; + if (Temp > BottomRow) { // - // Skip the top op-code + // Get the top screen menu info. // - TopOfScreen = TopOfScreen->ForwardLink; - DistanceValue = (Temp - BottomRow) - (SavedMenuOption->Skip - SkipValue); - + AdjustDateAndTimePosition (FALSE, &TopOfScreen); SavedMenuOption = MENU_OPTION_FROM_LINK (TopOfScreen); // - // If we have a remainder, skip that many more op-codes until we drain the remainder - // Special case is the selected highlight menu has more than one form of menus. + // Current Top screen menu occupy (SavedMenuOption->Skip - SkipValue) rows. + // Full shows the new selected menu need to skip (Temp - BottomRow - 1) rows. // - while (DistanceValue >= SavedMenuOption->Skip && TopOfScreen != NewPos) { + if ((Temp - BottomRow) >= (SavedMenuOption->Skip - SkipValue)) { // - // Since the Difference is greater than or equal to this op-code's skip value, skip it + // Skip the top op-code // - DistanceValue = DistanceValue - (INTN) SavedMenuOption->Skip; - TopOfScreen = TopOfScreen->ForwardLink; + TopOfScreen = TopOfScreen->ForwardLink; + DistanceValue = (Temp - BottomRow) - (SavedMenuOption->Skip - SkipValue); + SavedMenuOption = MENU_OPTION_FROM_LINK (TopOfScreen); - } - // - // Since we will act on this op-code in the next routine, and increment the - // SkipValue, set the skips to one less than what is required. - // - if (TopOfScreen != NewPos) { - SkipValue = DistanceValue; + + // + // If we have a remainder, skip that many more op-codes until we drain the remainder + // Special case is the selected highlight menu has more than one form of menus. + // + while (DistanceValue >= SavedMenuOption->Skip && TopOfScreen != NewPos) { + // + // Since the Difference is greater than or equal to this op-code's skip value, skip it + // + DistanceValue = DistanceValue - (INTN)SavedMenuOption->Skip; + TopOfScreen = TopOfScreen->ForwardLink; + SavedMenuOption = MENU_OPTION_FROM_LINK (TopOfScreen); + } + + // + // Since we will act on this op-code in the next routine, and increment the + // SkipValue, set the skips to one less than what is required. + // + if (TopOfScreen != NewPos) { + SkipValue = DistanceValue; + } else { + SkipValue = 0; + } } else { - SkipValue = 0; + // + // Since we will act on this op-code in the next routine, and increment the + // SkipValue, set the skips to one less than what is required. + // + SkipValue += Temp - BottomRow; } - } else { + + Repaint = TRUE; + } else if (!IsSelectable (NextMenuOption)) { // - // Since we will act on this op-code in the next routine, and increment the - // SkipValue, set the skips to one less than what is required. + // Continue to go down until scroll to next page or the selectable option is found. // - SkipValue += Temp - BottomRow; + ScreenOperation = UiDown; + ControlFlag = CfScreenOperation; + break; } - Repaint = TRUE; - } else if (!IsSelectable (NextMenuOption)) { + + MenuOption = MENU_OPTION_FROM_LINK (SavedListEntry); + // - // Continue to go down until scroll to next page or the selectable option is found. + // Check whether new highlight menu is selectable, if not, keep highlight on the old one. // - ScreenOperation = UiDown; - ControlFlag = CfScreenOperation; - break; - } + // BottomRow - TopRow + 1 means the total rows current forms supported. + // Difference + NextMenuOption->Skip + 1 means the distance between last highlight menu + // and new top menu. New top menu will all shows in next form, but last highlight menu + // may only shows 1 line. + 1 at right part means at least need to keep 1 line for the + // last highlight menu. + // + if (!IsSelectable (NextMenuOption) && IsSelectable (MenuOption) && + (BottomRow - TopRow + 1 >= Difference + NextMenuOption->Skip + 1)) + { + NewPos = SavedListEntry; + } - MenuOption = MENU_OPTION_FROM_LINK (SavedListEntry); + UpdateStatusBar (INPUT_ERROR, FALSE); - // - // Check whether new highlight menu is selectable, if not, keep highlight on the old one. - // - // BottomRow - TopRow + 1 means the total rows current forms supported. - // Difference + NextMenuOption->Skip + 1 means the distance between last highlight menu - // and new top menu. New top menu will all shows in next form, but last highlight menu - // may only shows 1 line. + 1 at right part means at least need to keep 1 line for the - // last highlight menu. - // - if (!IsSelectable (NextMenuOption) && IsSelectable (MenuOption) && - (BottomRow - TopRow + 1 >= Difference + NextMenuOption->Skip + 1)) { - NewPos = SavedListEntry; - } + // + // If we are at the end of the list and sitting on a Date/Time op, rewind to the head. + // + AdjustDateAndTimePosition (TRUE, &TopOfScreen); + AdjustDateAndTimePosition (TRUE, &NewPos); - UpdateStatusBar (INPUT_ERROR, FALSE); + UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue); + break; - // - // If we are at the end of the list and sitting on a Date/Time op, rewind to the head. - // - AdjustDateAndTimePosition (TRUE, &TopOfScreen); - AdjustDateAndTimePosition (TRUE, &NewPos); + case CfUiNoOperation: + ControlFlag = CfRepaint; + break; - UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue); - break; + case CfExit: + gST->ConOut->SetAttribute (gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK)); + if (HelpString != NULL) { + FreePool (HelpString); + } - case CfUiNoOperation: - ControlFlag = CfRepaint; - break; + if (HelpHeaderString != NULL) { + FreePool (HelpHeaderString); + } - case CfExit: - gST->ConOut->SetAttribute (gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK)); - if (HelpString != NULL) { - FreePool (HelpString); - } - if (HelpHeaderString != NULL) { - FreePool (HelpHeaderString); - } - if (HelpBottomString != NULL) { - FreePool (HelpBottomString); - } - return EFI_SUCCESS; + if (HelpBottomString != NULL) { + FreePool (HelpBottomString); + } - default: - break; + return EFI_SUCCESS; + + default: + break; } } } @@ -3806,22 +3878,23 @@ UiDisplayMenu ( **/ VOID -FreeMenuOptionData( - LIST_ENTRY *MenuOptionList +FreeMenuOptionData ( + LIST_ENTRY *MenuOptionList ) { - LIST_ENTRY *Link; - UI_MENU_OPTION *Option; + LIST_ENTRY *Link; + UI_MENU_OPTION *Option; // // Free menu option list // while (!IsListEmpty (MenuOptionList)) { - Link = GetFirstNode (MenuOptionList); + Link = GetFirstNode (MenuOptionList); Option = MENU_OPTION_FROM_LINK (Link); - if (Option->Description != NULL){ - FreePool(Option->Description); + if (Option->Description != NULL) { + FreePool (Option->Description); } + RemoveEntryList (&Option->Link); FreePool (Option); } @@ -3837,20 +3910,20 @@ BrowserStatusProcess ( VOID ) { - CHAR16 *ErrorInfo; - EFI_INPUT_KEY Key; - EFI_EVENT WaitList[2]; - EFI_EVENT RefreshIntervalEvent; - EFI_EVENT TimeOutEvent; - UINT8 TimeOut; - EFI_STATUS Status; - UINTN Index; - WARNING_IF_CONTEXT EventContext; - EFI_IFR_OP_HEADER *OpCodeBuf; - EFI_STRING_ID StringToken; - CHAR16 DiscardChange; - CHAR16 JumpToFormSet; - CHAR16 *PrintString; + CHAR16 *ErrorInfo; + EFI_INPUT_KEY Key; + EFI_EVENT WaitList[2]; + EFI_EVENT RefreshIntervalEvent; + EFI_EVENT TimeOutEvent; + UINT8 TimeOut; + EFI_STATUS Status; + UINTN Index; + WARNING_IF_CONTEXT EventContext; + EFI_IFR_OP_HEADER *OpCodeBuf; + EFI_STRING_ID StringToken; + CHAR16 DiscardChange; + CHAR16 JumpToFormSet; + CHAR16 *PrintString; if (gFormData->BrowserStatus == BROWSER_SUCCESS) { return; @@ -3867,16 +3940,18 @@ BrowserStatusProcess ( if (gFormData->BrowserStatus == (BROWSER_WARNING_IF)) { ASSERT (OpCodeBuf != NULL && OpCodeBuf->OpCode == EFI_IFR_WARNING_IF_OP); - TimeOut = ((EFI_IFR_WARNING_IF *) OpCodeBuf)->TimeOut; - StringToken = ((EFI_IFR_WARNING_IF *) OpCodeBuf)->Warning; + TimeOut = ((EFI_IFR_WARNING_IF *)OpCodeBuf)->TimeOut; + StringToken = ((EFI_IFR_WARNING_IF *)OpCodeBuf)->Warning; } else { TimeOut = 0; if ((gFormData->BrowserStatus == (BROWSER_NO_SUBMIT_IF)) && - (OpCodeBuf != NULL && OpCodeBuf->OpCode == EFI_IFR_NO_SUBMIT_IF_OP)) { - StringToken = ((EFI_IFR_NO_SUBMIT_IF *) OpCodeBuf)->Error; + ((OpCodeBuf != NULL) && (OpCodeBuf->OpCode == EFI_IFR_NO_SUBMIT_IF_OP))) + { + StringToken = ((EFI_IFR_NO_SUBMIT_IF *)OpCodeBuf)->Error; } else if ((gFormData->BrowserStatus == (BROWSER_INCONSISTENT_IF)) && - (OpCodeBuf != NULL && OpCodeBuf->OpCode == EFI_IFR_INCONSISTENT_IF_OP)) { - StringToken = ((EFI_IFR_INCONSISTENT_IF *) OpCodeBuf)->Error; + ((OpCodeBuf != NULL) && (OpCodeBuf->OpCode == EFI_IFR_INCONSISTENT_IF_OP))) + { + StringToken = ((EFI_IFR_INCONSISTENT_IF *)OpCodeBuf)->Error; } } @@ -3890,127 +3965,129 @@ BrowserStatusProcess ( ErrorInfo = gFormData->ErrorString; } else { switch (gFormData->BrowserStatus) { - case BROWSER_SUBMIT_FAIL: - ErrorInfo = gSaveFailed; - break; + case BROWSER_SUBMIT_FAIL: + ErrorInfo = gSaveFailed; + break; - case BROWSER_FORM_NOT_FOUND: - ErrorInfo = gFormNotFound; - break; + case BROWSER_FORM_NOT_FOUND: + ErrorInfo = gFormNotFound; + break; - case BROWSER_FORM_SUPPRESS: - ErrorInfo = gFormSuppress; - break; + case BROWSER_FORM_SUPPRESS: + ErrorInfo = gFormSuppress; + break; - case BROWSER_PROTOCOL_NOT_FOUND: - ErrorInfo = gProtocolNotFound; - break; + case BROWSER_PROTOCOL_NOT_FOUND: + ErrorInfo = gProtocolNotFound; + break; - case BROWSER_SUBMIT_FAIL_NO_SUBMIT_IF: - ErrorInfo = gNoSubmitIfFailed; - break; + case BROWSER_SUBMIT_FAIL_NO_SUBMIT_IF: + ErrorInfo = gNoSubmitIfFailed; + break; - case BROWSER_RECONNECT_FAIL: - ErrorInfo = gReconnectFail; - break; + case BROWSER_RECONNECT_FAIL: + ErrorInfo = gReconnectFail; + break; - case BROWSER_RECONNECT_SAVE_CHANGES: - ErrorInfo = gReconnectConfirmChanges; - break; + case BROWSER_RECONNECT_SAVE_CHANGES: + ErrorInfo = gReconnectConfirmChanges; + break; - case BROWSER_RECONNECT_REQUIRED: - ErrorInfo = gReconnectRequired; - break; + case BROWSER_RECONNECT_REQUIRED: + ErrorInfo = gReconnectRequired; + break; - default: - ErrorInfo = gBrowserError; - break; + default: + ErrorInfo = gBrowserError; + break; } } switch (gFormData->BrowserStatus) { - case BROWSER_SUBMIT_FAIL: - case BROWSER_SUBMIT_FAIL_NO_SUBMIT_IF: - case BROWSER_RECONNECT_SAVE_CHANGES: - ASSERT (gUserInput != NULL); - if (gFormData->BrowserStatus == (BROWSER_SUBMIT_FAIL)) { - PrintString = gSaveProcess; - JumpToFormSet = gJumpToFormSet[0]; - DiscardChange = gDiscardChange[0]; - } else if (gFormData->BrowserStatus == (BROWSER_RECONNECT_SAVE_CHANGES)){ - PrintString = gChangesOpt; - JumpToFormSet = gConfirmOptYes[0]; - DiscardChange = gConfirmOptNo[0]; - } else { - PrintString = gSaveNoSubmitProcess; - JumpToFormSet = gCheckError[0]; - DiscardChange = gDiscardChange[0]; - } + case BROWSER_SUBMIT_FAIL: + case BROWSER_SUBMIT_FAIL_NO_SUBMIT_IF: + case BROWSER_RECONNECT_SAVE_CHANGES: + ASSERT (gUserInput != NULL); + if (gFormData->BrowserStatus == (BROWSER_SUBMIT_FAIL)) { + PrintString = gSaveProcess; + JumpToFormSet = gJumpToFormSet[0]; + DiscardChange = gDiscardChange[0]; + } else if (gFormData->BrowserStatus == (BROWSER_RECONNECT_SAVE_CHANGES)) { + PrintString = gChangesOpt; + JumpToFormSet = gConfirmOptYes[0]; + DiscardChange = gConfirmOptNo[0]; + } else { + PrintString = gSaveNoSubmitProcess; + JumpToFormSet = gCheckError[0]; + DiscardChange = gDiscardChange[0]; + } - do { - CreateDialog (&Key, gEmptyString, ErrorInfo, PrintString, gEmptyString, NULL); - } while (((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (DiscardChange | UPPER_LOWER_CASE_OFFSET)) && - ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (JumpToFormSet | UPPER_LOWER_CASE_OFFSET))); + do { + CreateDialog (&Key, gEmptyString, ErrorInfo, PrintString, gEmptyString, NULL); + } while (((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (DiscardChange | UPPER_LOWER_CASE_OFFSET)) && + ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (JumpToFormSet | UPPER_LOWER_CASE_OFFSET))); - if ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) == (DiscardChange | UPPER_LOWER_CASE_OFFSET)) { - gUserInput->Action = BROWSER_ACTION_DISCARD; - } else { - gUserInput->Action = BROWSER_ACTION_GOTO; - } - break; + if ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) == (DiscardChange | UPPER_LOWER_CASE_OFFSET)) { + gUserInput->Action = BROWSER_ACTION_DISCARD; + } else { + gUserInput->Action = BROWSER_ACTION_GOTO; + } - default: - if (TimeOut == 0) { - do { - CreateDialog (&Key, gEmptyString, ErrorInfo, gPressEnter, gEmptyString, NULL); - } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN); - } else { - Status = gBS->CreateEvent (EVT_NOTIFY_WAIT, TPL_CALLBACK, EmptyEventProcess, NULL, &TimeOutEvent); - ASSERT_EFI_ERROR (Status); + break; - EventContext.SyncEvent = TimeOutEvent; - EventContext.TimeOut = &TimeOut; - EventContext.ErrorInfo = ErrorInfo; + default: + if (TimeOut == 0) { + do { + CreateDialog (&Key, gEmptyString, ErrorInfo, gPressEnter, gEmptyString, NULL); + } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN); + } else { + Status = gBS->CreateEvent (EVT_NOTIFY_WAIT, TPL_CALLBACK, EmptyEventProcess, NULL, &TimeOutEvent); + ASSERT_EFI_ERROR (Status); - Status = gBS->CreateEvent (EVT_TIMER | EVT_NOTIFY_SIGNAL, TPL_CALLBACK, RefreshTimeOutProcess, &EventContext, &RefreshIntervalEvent); - ASSERT_EFI_ERROR (Status); + EventContext.SyncEvent = TimeOutEvent; + EventContext.TimeOut = &TimeOut; + EventContext.ErrorInfo = ErrorInfo; - // - // Show the dialog first to avoid long time not reaction. - // - gBS->SignalEvent (RefreshIntervalEvent); + Status = gBS->CreateEvent (EVT_TIMER | EVT_NOTIFY_SIGNAL, TPL_CALLBACK, RefreshTimeOutProcess, &EventContext, &RefreshIntervalEvent); + ASSERT_EFI_ERROR (Status); - Status = gBS->SetTimer (RefreshIntervalEvent, TimerPeriodic, ONE_SECOND); - ASSERT_EFI_ERROR (Status); + // + // Show the dialog first to avoid long time not reaction. + // + gBS->SignalEvent (RefreshIntervalEvent); - while (TRUE) { - Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key); - if (!EFI_ERROR (Status) && Key.UnicodeChar == CHAR_CARRIAGE_RETURN) { - break; - } + Status = gBS->SetTimer (RefreshIntervalEvent, TimerPeriodic, ONE_SECOND); + ASSERT_EFI_ERROR (Status); - if (Status != EFI_NOT_READY) { - continue; - } + while (TRUE) { + Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key); + if (!EFI_ERROR (Status) && (Key.UnicodeChar == CHAR_CARRIAGE_RETURN)) { + break; + } - WaitList[0] = TimeOutEvent; - WaitList[1] = gST->ConIn->WaitForKey; + if (Status != EFI_NOT_READY) { + continue; + } - Status = gBS->WaitForEvent (2, WaitList, &Index); - ASSERT_EFI_ERROR (Status); + WaitList[0] = TimeOutEvent; + WaitList[1] = gST->ConIn->WaitForKey; - if (Index == 0) { - // - // Timeout occur, close the hoot time out event. - // - break; + Status = gBS->WaitForEvent (2, WaitList, &Index); + ASSERT_EFI_ERROR (Status); + + if (Index == 0) { + // + // Timeout occur, close the hoot time out event. + // + break; + } } + + gBS->CloseEvent (TimeOutEvent); + gBS->CloseEvent (RefreshIntervalEvent); } - gBS->CloseEvent (TimeOutEvent); - gBS->CloseEvent (RefreshIntervalEvent); - } - break; + break; } if (StringToken != 0) { @@ -4049,7 +4126,7 @@ FormDisplay ( // // Process the status info first. // - BrowserStatusProcess(); + BrowserStatusProcess (); if (gFormData->BrowserStatus != BROWSER_SUCCESS) { // // gFormData->BrowserStatus != BROWSER_SUCCESS, means only need to print the error info, return here. @@ -4071,25 +4148,26 @@ FormDisplay ( // |<-.->|<-.........->|<- .........->|<-...........->| // Skip Prompt Option Help // - gOptionBlockWidth = (CHAR16) ((gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn) / 3) + 1; - gHelpBlockWidth = (CHAR16) (gOptionBlockWidth - 1 - LEFT_SKIPPED_COLUMNS); - gPromptBlockWidth = (CHAR16) (gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * (gOptionBlockWidth - 1) - 1); + gOptionBlockWidth = (CHAR16)((gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn) / 3) + 1; + gHelpBlockWidth = (CHAR16)(gOptionBlockWidth - 1 - LEFT_SKIPPED_COLUMNS); + gPromptBlockWidth = (CHAR16)(gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * (gOptionBlockWidth - 1) - 1); - ConvertStatementToMenu(); + ConvertStatementToMenu (); // // Check whether layout is changed. // - if (mIsFirstForm - || (gOldFormEntry.HiiHandle != FormData->HiiHandle) - || (!CompareGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid)) - || (gOldFormEntry.FormId != FormData->FormId)) { + if ( mIsFirstForm + || (gOldFormEntry.HiiHandle != FormData->HiiHandle) + || (!CompareGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid)) + || (gOldFormEntry.FormId != FormData->FormId)) + { mStatementLayoutIsChanged = TRUE; } else { mStatementLayoutIsChanged = FALSE; } - Status = UiDisplayMenu(FormData); + Status = UiDisplayMenu (FormData); // // Backup last form info. @@ -4097,12 +4175,12 @@ FormDisplay ( mIsFirstForm = FALSE; gOldFormEntry.HiiHandle = FormData->HiiHandle; CopyGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid); - gOldFormEntry.FormId = FormData->FormId; + gOldFormEntry.FormId = FormData->FormId; // - //Free the Ui menu option list. + // Free the Ui menu option list. // - FreeMenuOptionData(&gMenuOption); + FreeMenuOptionData (&gMenuOption); return Status; } @@ -4130,9 +4208,9 @@ DriverClearDisplayPage ( **/ VOID SetUnicodeMem ( - IN VOID *Buffer, - IN UINTN Size, - IN CHAR16 Value + IN VOID *Buffer, + IN UINTN Size, + IN CHAR16 Value ) { CHAR16 *Ptr; @@ -4156,14 +4234,14 @@ SetUnicodeMem ( EFI_STATUS EFIAPI InitializeDisplayEngine ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_INPUT_KEY HotKey; - EFI_STRING NewString; - EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2; + EFI_STATUS Status; + EFI_INPUT_KEY HotKey; + EFI_STRING NewString; + EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2; // // Publish our HII data @@ -4191,14 +4269,14 @@ InitializeDisplayEngine ( // Install HII Popup Protocol. // Status = gBS->InstallProtocolInterface ( - &mPrivateData.Handle, - &gEfiHiiPopupProtocolGuid, - EFI_NATIVE_INTERFACE, - &mPrivateData.HiiPopup - ); + &mPrivateData.Handle, + &gEfiHiiPopupProtocolGuid, + EFI_NATIVE_INTERFACE, + &mPrivateData.HiiPopup + ); ASSERT_EFI_ERROR (Status); - InitializeDisplayStrings(); + InitializeDisplayStrings (); ZeroMem (&gHighligthMenuInfo, sizeof (gHighligthMenuInfo)); ZeroMem (&gOldFormEntry, sizeof (gOldFormEntry)); @@ -4206,20 +4284,20 @@ InitializeDisplayEngine ( // // Use BrowserEx2 protocol to register HotKey. // - Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **) &FormBrowserEx2); + Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **)&FormBrowserEx2); if (!EFI_ERROR (Status)) { // // Register the default HotKey F9 and F10 again. // HotKey.UnicodeChar = CHAR_NULL; - HotKey.ScanCode = SCAN_F10; - NewString = HiiGetString (gHiiHandle, STRING_TOKEN (FUNCTION_TEN_STRING), NULL); + HotKey.ScanCode = SCAN_F10; + NewString = HiiGetString (gHiiHandle, STRING_TOKEN (FUNCTION_TEN_STRING), NULL); ASSERT (NewString != NULL); FormBrowserEx2->RegisterHotKey (&HotKey, BROWSER_ACTION_SUBMIT, 0, NewString); FreePool (NewString); - HotKey.ScanCode = SCAN_F9; - NewString = HiiGetString (gHiiHandle, STRING_TOKEN (FUNCTION_NINE_STRING), NULL); + HotKey.ScanCode = SCAN_F9; + NewString = HiiGetString (gHiiHandle, STRING_TOKEN (FUNCTION_NINE_STRING), NULL); ASSERT (NewString != NULL); FormBrowserEx2->RegisterHotKey (&HotKey, BROWSER_ACTION_DEFAULT, EFI_HII_DEFAULT_CLASS_STANDARD, NewString); FreePool (NewString); @@ -4240,10 +4318,10 @@ InitializeDisplayEngine ( EFI_STATUS EFIAPI UnloadDisplayEngine ( - IN EFI_HANDLE ImageHandle + IN EFI_HANDLE ImageHandle ) { - HiiRemovePackages(gHiiHandle); + HiiRemovePackages (gHiiHandle); FreeDisplayStrings ();