17c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** @file 27c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 37c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong This library class defines a set of interfaces to customize Display module 47c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric DongCopyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR> 67c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongThis program and the accompanying materials are licensed and made available under 77c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dongthe terms and conditions of the BSD License that accompanies this distribution. 87c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongThe full text of the license may be found at 97c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Donghttp://opensource.org/licenses/bsd-license.php. 107c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 117c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 127c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 137c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 147c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 157c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong#include "CustomizedDisplayLibInternal.h" 167c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 177c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFI_GUID gCustomizedDisplayLibGuid = { 0x99fdc8fd, 0x849b, 0x4eba, { 0xad, 0x13, 0xfb, 0x96, 0x99, 0xc9, 0xa, 0x4d } }; 187c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 197c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFI_HII_HANDLE mCDLStringPackHandle; 207c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT16 gClassOfVfr; // Formset class information 215a9f73bf065eda6b830445dc907e778f4a13d8d7Eric DongBOOLEAN gLibIsFirstForm = TRUE; 227c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongBANNER_DATA *gBannerData; 237c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 247c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINTN gFooterHeight; 257c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 267c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 277c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong+------------------------------------------------------------------------------+ 287c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong| Setup Page | 297c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong+------------------------------------------------------------------------------+ 307c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 317c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongStatement 327c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongStatement 337c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongStatement 347c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 357c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 367c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 377c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 387c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 397c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong+------------------------------------------------------------------------------+ 405a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong| F9=Reset to Defaults F10=Save | 415a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong| ^"=Move Highlight <Spacebar> Toggles Checkbox Esc=Exit | 427c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong+------------------------------------------------------------------------------+ 437c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong StatusBar 447c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 457c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 467c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 477c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong This funtion defines Page Frame and Backgroud. 487c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 497c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Based on the above layout, it will be responsible for HeaderHeight, FooterHeight, 507c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong StatusBarHeight and Backgroud. And, it will reserve Screen for Statement. 517c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 527c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param[in] FormData Form Data to be shown in Page. 537c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param[out] ScreenForStatement Screen to be used for Statement. (Prompt, Value and Help) 547c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 557c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @return Status 567c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 577c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFI_STATUS 587c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 597c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongDisplayPageFrame ( 607c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN FORM_DISPLAY_ENGINE_FORM *FormData, 617c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong OUT EFI_SCREEN_DESCRIPTOR *ScreenForStatement 627c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 637c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 647c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong EFI_STATUS Status; 657c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 667c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ASSERT (FormData != NULL && ScreenForStatement != NULL); 677c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (FormData == NULL || ScreenForStatement == NULL) { 687c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return EFI_INVALID_PARAMETER; 697c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 707c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 717c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Status = ScreenDiemensionInfoValidate (FormData); 727c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (EFI_ERROR (Status)) { 737c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return Status; 747c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 757c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 767c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gClassOfVfr = FORMSET_CLASS_PLATFORM_SETUP; 777c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 787c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ProcessExternedOpcode(FormData); 797c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 807c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 817c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // Calculate the ScreenForStatement. 827c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 837c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ScreenForStatement->BottomRow = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight; 845a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong if (gClassOfVfr == FORMSET_CLASS_FRONT_PAGE) { 857c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ScreenForStatement->TopRow = gScreenDimensions.TopRow + FRONT_PAGE_HEADER_HEIGHT; 867c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else { 877c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ScreenForStatement->TopRow = gScreenDimensions.TopRow + NONE_FRONT_PAGE_HEADER_HEIGHT; 887c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 897c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ScreenForStatement->LeftColumn = gScreenDimensions.LeftColumn; 907c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ScreenForStatement->RightColumn = gScreenDimensions.RightColumn; 917c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 925a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong if ((gLibIsFirstForm) || ((FormData->Attribute & HII_DISPLAY_MODAL) != 0)) { 935a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong // 945a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong // Ensure we are in Text mode 955a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong // 965a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong gST->ConOut->SetAttribute (gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK)); 975a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong ClearLines (0, gScreenDimensions.RightColumn, 0, gScreenDimensions.BottomRow, KEYHELP_BACKGROUND); 985a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong gLibIsFirstForm = FALSE; 997c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 1007c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1017c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 1025a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong // Don't print frame for modal form. 1037c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 1047c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { 1057c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return EFI_SUCCESS; 1067c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 1077c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1085a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong if (gClassOfVfr == FORMSET_CLASS_FRONT_PAGE) { 1097c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintBannerInfo (FormData); 1107c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 1117c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1125a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong PrintFramework (FormData); 1137c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1147c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UpdateStatusBar(NV_UPDATE_REQUIRED, FormData->SettingChangedFlag); 1157c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1167c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return EFI_SUCCESS; 1177c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 1187c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1197c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 1207c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong This function updates customized key panel's help information. 1217c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong The library will prepare those Strings for the basic key, ESC, Enter, Up/Down/Left/Right, +/-. 1227c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong and arrange them in Footer panel. 1237c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1247c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param[in] FormData Form Data to be shown in Page. FormData has the highlighted statement. 1257c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param[in] Statement The statement current selected. 1267c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param[in] Selected Whether or not a tag be selected. TRUE means Enter has hit this question. 1277c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 1287c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongVOID 1297c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 1307c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongRefreshKeyHelp ( 1317c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN FORM_DISPLAY_ENGINE_FORM *FormData, 1327c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN FORM_DISPLAY_ENGINE_STATEMENT *Statement, 1337c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN BOOLEAN Selected 1347c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 1357c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 1367c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN SecCol; 1377c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN ThdCol; 1387c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN RightColumnOfHelp; 1397c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN TopRowOfHelp; 1407c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN BottomRowOfHelp; 1417c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN StartColumnOfHelp; 1427c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong EFI_IFR_NUMERIC *NumericOp; 1437c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong EFI_IFR_DATE *DateOp; 1447c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong EFI_IFR_TIME *TimeOp; 1457c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong BOOLEAN HexDisplay; 146af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong UINTN ColumnWidth1; 147af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong UINTN ColumnWidth2; 148af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong UINTN ColumnWidth3; 149af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong CHAR16 *ColumnStr1; 150af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong CHAR16 *ColumnStr2; 151af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong CHAR16 *ColumnStr3; 1527c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1537c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ASSERT (FormData != NULL); 1547c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (FormData == NULL) { 1557c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return; 1567c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 1577c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1587c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_TEXT | KEYHELP_BACKGROUND); 1597c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1607c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) { 1617c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return; 1627c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 1637c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 1647c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong SecCol = gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3; 1657c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ThdCol = gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3 * 2; 1667c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 167d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong // 168d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong // + 2 means leave 1 space before the first hotkey info. 169d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong // 1707c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong StartColumnOfHelp = gScreenDimensions.LeftColumn + 2; 171af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong RightColumnOfHelp = gScreenDimensions.RightColumn - 1; 1727c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong TopRowOfHelp = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight + 1; 1737c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong BottomRowOfHelp = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 2; 1747c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 175af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnWidth1 = SecCol - StartColumnOfHelp; 176af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnWidth2 = ThdCol - SecCol; 177af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnWidth3 = RightColumnOfHelp - ThdCol; 178af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr1 = gLibEmptyString; 179af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr2 = gLibEmptyString; 180af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr3 = gLibEmptyString; 181af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong 182d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong // 183d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong // Clean the space at gScreenDimensions.LeftColumn + 1. 184d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong // 185d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong PrintStringAtWithWidth (StartColumnOfHelp - 1, BottomRowOfHelp, gLibEmptyString, 1); 186d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong PrintStringAtWithWidth (StartColumnOfHelp - 1, TopRowOfHelp, gLibEmptyString, 1); 187d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong 1887c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (Statement == NULL) { 1897c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 1907c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // Print Key for Form without showable statement. 1917c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 192af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintHotKeyHelpString (FormData, TRUE); 193af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (StartColumnOfHelp, BottomRowOfHelp, gLibEmptyString, ColumnWidth1); 194af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gLibEmptyString, ColumnWidth2); 195af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, gLibEmptyString, ColumnWidth1); 196d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) { 197d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong ColumnStr3 = gEscapeString; 198d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong } 199d89d1a546a7db864cc94efc3ba79db61e1dc3ba1Eric Dong PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3); 200af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong 2017c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return; 2027c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 2037c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 2047c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong HexDisplay = FALSE; 2057c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong NumericOp = NULL; 2067c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong DateOp = NULL; 2077c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong TimeOp = NULL; 2087c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) { 2097c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong NumericOp = (EFI_IFR_NUMERIC *) Statement->OpCode; 2107c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong HexDisplay = (NumericOp->Flags & EFI_IFR_DISPLAY_UINT_HEX) == EFI_IFR_DISPLAY_UINT_HEX; 2117c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP) { 2127c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong DateOp = (EFI_IFR_DATE *) Statement->OpCode; 2137c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong HexDisplay = (DateOp->Flags & EFI_IFR_DISPLAY_UINT_HEX) == EFI_IFR_DISPLAY_UINT_HEX; 2147c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else if (Statement->OpCode->OpCode == EFI_IFR_TIME_OP) { 2157c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong TimeOp = (EFI_IFR_TIME *) Statement->OpCode; 2167c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong HexDisplay = (TimeOp->Flags & EFI_IFR_DISPLAY_UINT_HEX) == EFI_IFR_DISPLAY_UINT_HEX; 2177c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 2187c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong switch (Statement->OpCode->OpCode) { 2197c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_ORDERED_LIST_OP: 2207c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_ONE_OF_OP: 2217c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_NUMERIC_OP: 2227c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_TIME_OP: 2237c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_DATE_OP: 2247c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (!Selected) { 225af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintHotKeyHelpString (FormData, TRUE); 2267c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 2275a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) { 228af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr3 = gEscapeString; 2297c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 230af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3); 2317c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 2327c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) || 2337c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) { 2347c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintAt ( 235af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnWidth1, 2367c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong StartColumnOfHelp, 2377c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong BottomRowOfHelp, 2387c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong L"%c%c%c%c%s", 2397c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ARROW_UP, 2407c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ARROW_DOWN, 2417c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ARROW_RIGHT, 2427c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ARROW_LEFT, 2437c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gMoveHighlight 2447c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ); 245af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterString, ColumnWidth2); 246af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, gAdjustNumber, ColumnWidth1); 2477c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else { 248af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight); 2497c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP && NumericOp != NULL && LibGetFieldFromNum(Statement->OpCode) != 0) { 250af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr1 = gAdjustNumber; 251af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong } 252af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1); 253af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterString, ColumnWidth2); 2547c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 2557c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else { 256af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintHotKeyHelpString (FormData, FALSE); 257af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterCommitString, ColumnWidth2); 2587c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 2597c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 2607c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // If it is a selected numeric with manual input, display different message 2617c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 2627c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if ((Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) || 2637c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong (Statement->OpCode->OpCode == EFI_IFR_DATE_OP) || 2647c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) { 265af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr2 = HexDisplay ? gHexNumericInput : gDecNumericInput; 266af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (StartColumnOfHelp, BottomRowOfHelp, gLibEmptyString, ColumnWidth1); 267af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong } else { 268af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight); 2697c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 2707c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 2717c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (Statement->OpCode->OpCode == EFI_IFR_ORDERED_LIST_OP) { 272af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr1 = gPlusString; 273af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr3 = gMinusString; 2747c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 275af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1); 276af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (ThdCol, TopRowOfHelp, ColumnStr3, ColumnWidth3); 277af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (SecCol, TopRowOfHelp, ColumnStr2, ColumnWidth2); 2787c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 279af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, gEnterEscapeString, ColumnWidth3); 2807c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 2817c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong break; 2827c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 2837c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_CHECKBOX_OP: 284af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintHotKeyHelpString (FormData, TRUE); 2857c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 2865a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) { 287af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr3 = gEscapeString; 2887c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 289af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3); 2907c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 291af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight); 292af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gToggleCheckBox, ColumnWidth2); 293af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, gLibEmptyString, ColumnWidth1); 2947c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong break; 2957c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 2967c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_REF_OP: 2977c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_PASSWORD_OP: 2987c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_STRING_OP: 2997c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_TEXT_OP: 3007c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_ACTION_OP: 3017c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_RESET_BUTTON_OP: 3027c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case EFI_IFR_SUBTITLE_OP: 3037c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (!Selected) { 304af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintHotKeyHelpString (FormData, TRUE); 3057c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 3065a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) { 307af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr3 = gEscapeString; 3087c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 309af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3); 3107c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 311af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight); 3127c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (Statement->OpCode->OpCode != EFI_IFR_TEXT_OP && Statement->OpCode->OpCode != EFI_IFR_SUBTITLE_OP) { 313af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr2 = gEnterString; 3147c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 315af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (SecCol, BottomRowOfHelp, ColumnStr2, ColumnWidth2); 316af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1); 3177c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else { 318af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintHotKeyHelpString (FormData, FALSE); 319af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong if (Statement->OpCode->OpCode != EFI_IFR_REF_OP) { 320af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr2 = gEnterCommitString; 321af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong ColumnStr3 = gEnterEscapeString; 3227c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 323af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1); 324af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (StartColumnOfHelp, BottomRowOfHelp, ColumnStr1, ColumnWidth1); 325af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (SecCol, BottomRowOfHelp, ColumnStr2, ColumnWidth2); 326af047db78d297ca33dd74e5e749166bb17a4cc4eEric Dong PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3); 3277c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 3287c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong break; 3297c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 3307c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong default: 3317c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong break; 3327c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 3337c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 3347c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 3357c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 3367c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Update status bar. 3377c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 3387c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong This function updates the status bar on the bottom of menu screen. It just shows StatusBar. 3397c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Original logic in this function should be splitted out. 3407c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 3417c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param[in] MessageType The type of message to be shown. InputError or Configuration Changed. 3427c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param[in] State Show or Clear Message. 3437c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 3447c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongVOID 3457c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 3467c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUpdateStatusBar ( 3477c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN MessageType, 3487c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN BOOLEAN State 3497c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 3507c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 3517c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN Index; 3527c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong CHAR16 OptionWidth; 3537c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 3547c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong OptionWidth = (CHAR16) ((gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3); 3557c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 3567c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong switch (MessageType) { 3577c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case INPUT_ERROR: 3587c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (State) { 3597c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetAttribute (gST->ConOut, ERROR_TEXT); 3607c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintStringAt ( 3617c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gScreenDimensions.LeftColumn + OptionWidth, 3627c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gScreenDimensions.BottomRow - 1, 3637c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gInputErrorMessage 3647c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ); 3657c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else { 3667c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_BACKGROUND); 3677c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong for (Index = 0; Index < (LibGetStringWidth (gInputErrorMessage) - 2) / 2; Index++) { 3687c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintStringAt (gScreenDimensions.LeftColumn + OptionWidth + Index, gScreenDimensions.BottomRow - 1, L" "); 3697c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 3707c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 3717c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong break; 3727c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 3737c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong case NV_UPDATE_REQUIRED: 3747c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 3757c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // Global setting support. Show configuration change on every form. 3767c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 3777c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (State) { 3787c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetAttribute (gST->ConOut, INFO_TEXT); 3797c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintStringAt ( 3807c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gScreenDimensions.LeftColumn + OptionWidth * 2, 3817c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gScreenDimensions.BottomRow - 1, 3827c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gNvUpdateMessage 3837c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ); 3847c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else { 3857c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_BACKGROUND); 3867c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong for (Index = 0; Index < (LibGetStringWidth (gNvUpdateMessage) - 2) / 2; Index++) { 3877c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintStringAt ( 3887c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong (gScreenDimensions.LeftColumn + OptionWidth * 2 + Index), 3897c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gScreenDimensions.BottomRow - 1, 3907c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong L" " 3917c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ); 3927c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 3937c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 3947c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong break; 3957c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 3967c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong default: 3977c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong break; 3987c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 3997c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 4007c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4017c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 4027c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Create popup window. It will replace CreateDialog(). 4037c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4047c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong This function draws OEM/Vendor specific pop up windows. 4057c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4067c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param[out] Key User Input Key 4077c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param ... String to be shown in Popup. The variable argument list is terminated by a NULL. 4087c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4097c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 4107c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongVOID 4117c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 4127c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongCreateDialog ( 4137c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong OUT EFI_INPUT_KEY *Key, OPTIONAL 4147c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ... 4157c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 4167c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 4177c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VA_LIST Marker; 4187c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong EFI_INPUT_KEY KeyValue; 4197c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong EFI_STATUS Status; 4207c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN LargestString; 4217c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN LineNum; 4227c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN Index; 4237c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN Count; 4247c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong CHAR16 Character; 4257c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN Start; 4267c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN End; 4277c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN Top; 4287c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN Bottom; 4297c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong CHAR16 *String; 4307c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN DimensionsWidth; 4317c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN DimensionsHeight; 4327c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN CurrentAttribute; 433980f3026e56ef7868962bbca386655f11c10fd33Eric Dong BOOLEAN CursorVisible; 4347c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4357c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 4367c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // If screen dimension info is not ready, get it from console. 4377c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 4387c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (gScreenDimensions.RightColumn == 0 || gScreenDimensions.BottomRow == 0) { 4397c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ZeroMem (&gScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR)); 4407c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->QueryMode ( 4417c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut, 4427c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->Mode->Mode, 4437c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong &gScreenDimensions.RightColumn, 4447c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong &gScreenDimensions.BottomRow 4457c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ); 4467c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 4477c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4487c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong DimensionsWidth = gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn; 4497c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong DimensionsHeight = gScreenDimensions.BottomRow - gScreenDimensions.TopRow; 4507c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4517c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong LargestString = 0; 4527c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong LineNum = 0; 4537c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VA_START (Marker, Key); 4547c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong while ((String = VA_ARG (Marker, CHAR16 *)) != NULL) { 4557c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong LineNum ++; 4567c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4577c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if ((LibGetStringWidth (String) / 2) > LargestString) { 4587c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong LargestString = (LibGetStringWidth (String) / 2); 4597c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 4607c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 4617c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VA_END (Marker); 4627c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4637c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if ((LargestString + 2) > DimensionsWidth) { 4647c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong LargestString = DimensionsWidth - 2; 4657c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 4667c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 467980f3026e56ef7868962bbca386655f11c10fd33Eric Dong CurrentAttribute = gST->ConOut->Mode->Attribute; 468980f3026e56ef7868962bbca386655f11c10fd33Eric Dong CursorVisible = gST->ConOut->Mode->CursorVisible; 4697c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->EnableCursor (gST->ConOut, FALSE); 4707c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetAttribute (gST->ConOut, GetPopupColor ()); 4717c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4727c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 4737c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // Subtract the PopUp width from total Columns, allow for one space extra on 4747c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // each end plus a border. 4757c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 4767c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Start = (DimensionsWidth - LargestString - 2) / 2 + gScreenDimensions.LeftColumn + 1; 4777c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong End = Start + LargestString + 1; 4787c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4797c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Top = ((DimensionsHeight - LineNum - 2) / 2) + gScreenDimensions.TopRow - 1; 4807c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Bottom = Top + LineNum + 2; 4817c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4827c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Character = BOXDRAW_DOWN_RIGHT; 4837c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintCharAt (Start, Top, Character); 4847c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Character = BOXDRAW_HORIZONTAL; 4857c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong for (Index = Start; Index + 2 < End; Index++) { 4867c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintCharAt ((UINTN)-1, (UINTN)-1, Character); 4877c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 4887c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4897c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Character = BOXDRAW_DOWN_LEFT; 4907c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintCharAt ((UINTN)-1, (UINTN)-1, Character); 4917c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Character = BOXDRAW_VERTICAL; 4927c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4937c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Count = 0; 4947c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VA_START (Marker, Key); 4957c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong for (Index = Top; Index + 2 < Bottom; Index++, Count++) { 4967c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong String = VA_ARG (Marker, CHAR16*); 4977c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 4987c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (String[0] == CHAR_NULL) { 4997c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 5007c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // Passing in a NULL results in a blank space 5017c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 5027c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ClearLines (Start, End, Index + 1, Index + 1, GetPopupColor ()); 5037c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else if (String[0] == L' ') { 5047c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 5057c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // Passing in a space results in the assumption that this is where typing will occur 5067c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 5077c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ClearLines (Start + 1, End - 1, Index + 1, Index + 1, POPUP_INVERSE_TEXT | POPUP_INVERSE_BACKGROUND); 5087c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintStringAt ( 5097c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ((DimensionsWidth - LibGetStringWidth (String) / 2) / 2) + gScreenDimensions.LeftColumn + 1, 5107c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Index + 1, 5117c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong String + 1 5127c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ); 5137c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else { 5147c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 5157c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // This will clear the background of the line - we never know who might have been 5167c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // here before us. This differs from the next clear in that it used the non-reverse 5177c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // video for normal printing. 5187c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 5197c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ClearLines (Start, End, Index + 1, Index + 1, GetPopupColor ()); 5207c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintStringAt ( 5217c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ((DimensionsWidth - LibGetStringWidth (String) / 2) / 2) + gScreenDimensions.LeftColumn + 1, 5227c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Index + 1, 5237c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong String 5247c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ); 5257c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 5267c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5277c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetAttribute (gST->ConOut, GetPopupColor ()); 5287c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintCharAt (Start, Index + 1, Character); 5297c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintCharAt (End - 1, Index + 1, Character); 5307c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 5317c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VA_END (Marker); 5327c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5337c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Character = BOXDRAW_UP_RIGHT; 5347c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintCharAt (Start, Bottom - 1, Character); 5357c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Character = BOXDRAW_HORIZONTAL; 5367c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong for (Index = Start; Index + 2 < End; Index++) { 5377c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintCharAt ((UINTN)-1, (UINTN) -1, Character); 5387c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 5397c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5407c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Character = BOXDRAW_UP_LEFT; 5417c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintCharAt ((UINTN)-1, (UINTN) -1, Character); 5427c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5437c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (Key != NULL) { 5447c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Status = WaitForKeyStroke (&KeyValue); 5457c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ASSERT_EFI_ERROR (Status); 5467c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong CopyMem (Key, &KeyValue, sizeof (EFI_INPUT_KEY)); 5477c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 5487c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5497c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetAttribute (gST->ConOut, CurrentAttribute); 550980f3026e56ef7868962bbca386655f11c10fd33Eric Dong gST->ConOut->EnableCursor (gST->ConOut, CursorVisible); 5517c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 5527c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5537c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 5547c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Confirm how to handle the changed data. 5557c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5566307a8b6dc054339db3b3d9733f2ce1a248b483cEric Dong @return Action BROWSER_ACTION_SUBMIT, BROWSER_ACTION_DISCARD or other values. 5577c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 5587c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINTN 5597c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 5607c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongConfirmDataChange ( 5617c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 5627c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 5637c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 5647c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong CHAR16 YesResponse; 5657c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong CHAR16 NoResponse; 5667c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong EFI_INPUT_KEY Key; 5677c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5687c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConIn->ReadKeyStroke (gST->ConIn, &Key); 5697c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5707c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong YesResponse = gYesResponse[0]; 5717c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong NoResponse = gNoResponse[0]; 5727c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5737c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 5747c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // If NV flag is up, prompt user 5757c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 5767c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong do { 5777c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong CreateDialog (&Key, gLibEmptyString, gSaveChanges, gAreYouSure, gLibEmptyString, NULL); 5787c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } while 5797c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ( 5807c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong (Key.ScanCode != SCAN_ESC) && 5817c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (NoResponse | UPPER_LOWER_CASE_OFFSET)) && 5827c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (YesResponse | UPPER_LOWER_CASE_OFFSET)) 5837c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ); 5847c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5857c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong if (Key.ScanCode == SCAN_ESC) { 5866307a8b6dc054339db3b3d9733f2ce1a248b483cEric Dong return BROWSER_ACTION_NONE; 5877c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else if ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) == (YesResponse | UPPER_LOWER_CASE_OFFSET)) { 5886307a8b6dc054339db3b3d9733f2ce1a248b483cEric Dong return BROWSER_ACTION_SUBMIT; 5897c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } else { 5906307a8b6dc054339db3b3d9733f2ce1a248b483cEric Dong return BROWSER_ACTION_DISCARD; 5917c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 5927c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 5937c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5947c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 5957c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong OEM specifies whether Setup exits Page by ESC key. 5967c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 5977c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong This function customized the behavior that whether Setup exits Page so that 5987c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong system able to boot when configuration is not changed. 5997c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6007c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval TRUE Exits FrontPage 6017c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval FALSE Don't exit FrontPage. 6027c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 6037c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongBOOLEAN 6047c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 6057c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongFormExitPolicy ( 6067c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 6077c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 6087c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 6095a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong return gClassOfVfr == FORMSET_CLASS_FRONT_PAGE ? FALSE : TRUE; 6107c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 6117c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6127c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 6137c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Set Timeout value for a ceratain Form to get user response. 6147c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6157c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong This function allows to set timeout value on a ceratain form if necessary. 6167c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong If timeout is not zero, the form will exit if user has no response in timeout. 6177c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6187c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param[in] FormData Form Data to be shown in Page 6197c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6207c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @return 0 No timeout for this form. 6217c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @return > 0 Timeout value in 100 ns units. 6227c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 6237c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT64 6247c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 6257c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongFormExitTimeout ( 6267c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN FORM_DISPLAY_ENGINE_FORM *FormData 6277c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 6287c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 6297c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return 0; 6307c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 6317c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong// 6327c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong// Print Functions 6337c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong// 6347c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 6357c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Prints a unicode string to the default console, at 6367c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong the supplied cursor position, using L"%s" format. 6377c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6387c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param Column The cursor position to print the string at. When it is -1, use current Position. 6397c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param Row The cursor position to print the string at. When it is -1, use current Position. 6407c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param String String pointer. 6417c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6427c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @return Length of string printed to the console 6437c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6447c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 6457c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINTN 6467c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 6477c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongPrintStringAt ( 6487c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN Column, 6497c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN Row, 6507c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN CHAR16 *String 6517c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 6527c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 6537c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return PrintAt (0, Column, Row, L"%s", String); 6547c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 6557c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6567c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 6577c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Prints a unicode string to the default console, at 6587c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong the supplied cursor position, using L"%s" format. 6597c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6607c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param Column The cursor position to print the string at. When it is -1, use current Position. 6617c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param Row The cursor position to print the string at. When it is -1, use current Position. 6627c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param String String pointer. 6637c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param Width Width for String. 6647c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6657c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @return Length of string printed to the console 6667c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6677c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 6687c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINTN 6697c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 6707c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongPrintStringAtWithWidth ( 6717c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN Column, 6727c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN Row, 6737c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN CHAR16 *String, 6747c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN Width 6757c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 6767c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 6777c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return PrintAt (Width, Column, Row, L"%s", String); 6787c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 6797c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6807c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 6817c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Prints a chracter to the default console, at 6827c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong the supplied cursor position, using L"%c" format. 6837c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6847c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param Column The cursor position to print the string at. When it is -1, use current Position. 6857c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param Row The cursor position to print the string at. When it is -1, use current Position. 6867c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param Character Character to print. 6877c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6887c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @return Length of string printed to the console. 6897c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 6907c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 6917c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINTN 6927c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 6937c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongPrintCharAt ( 6947c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN Column, 6957c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN Row, 6967c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong CHAR16 Character 6977c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 6987c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 6997c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return PrintAt (0, Column, Row, L"%c", Character); 7007c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 7017c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7027c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 7037c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Clear retangle with specified text attribute. 7047c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7057c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param LeftColumn Left column of retangle. 7067c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param RightColumn Right column of retangle. 7077c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param TopRow Start row of retangle. 7087c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param BottomRow End row of retangle. 7097c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param TextAttribute The character foreground and background. 7107c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7117c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 7127c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongVOID 7137c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 7147c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongClearLines ( 7157c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN LeftColumn, 7167c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN RightColumn, 7177c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN TopRow, 7187c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN BottomRow, 7197c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN UINTN TextAttribute 7207c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 7217c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 7227c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong CHAR16 *Buffer; 7237c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong UINTN Row; 7247c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7257c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 7267c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // For now, allocate an arbitrarily long buffer 7277c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 7287c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Buffer = AllocateZeroPool (0x10000); 7297c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ASSERT (Buffer != NULL); 7307c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7317c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 7327c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // Set foreground and background as defined 7337c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 7347c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetAttribute (gST->ConOut, TextAttribute); 7357c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7367c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 7377c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // Much faster to buffer the long string instead of print it a character at a time 7387c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 7397c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong LibSetUnicodeMem (Buffer, RightColumn - LeftColumn, L' '); 7407c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7417c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 7427c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // Clear the desired area with the appropriate foreground/background 7437c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong // 7447c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong for (Row = TopRow; Row <= BottomRow; Row++) { 7457c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong PrintStringAt (LeftColumn, Row, Buffer); 7467c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong } 7477c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7487c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetCursorPosition (gST->ConOut, LeftColumn, TopRow); 7497c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7507c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong FreePool (Buffer); 7517c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 7527c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7537c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong// 7547c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong// Color Setting Functions 7557c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong// 7567c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7577c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 7587c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Get OEM/Vendor specific popup attribute colors. 7597c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7607c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Byte code color setting for popup color. 7617c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 7627c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT8 7637c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 7647c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongGetPopupColor ( 7657c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 7667c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 7677c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 7687c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return POPUP_TEXT | POPUP_BACKGROUND; 7697c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 7707c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7717c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 7727c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Get OEM/Vendor specific popup attribute colors. 7737c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7747c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Byte code color setting for popup inverse color. 7757c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 7767c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT8 7777c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 7787c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongGetPopupInverseColor ( 7797c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 7807c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 7817c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 7827c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return POPUP_INVERSE_TEXT | POPUP_INVERSE_BACKGROUND; 7837c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 7847c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7857c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 7867c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Get OEM/Vendor specific PickList color attribute. 7877c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7887c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Byte code color setting for pick list color. 7897c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 7907c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT8 7917c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 7927c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongGetPickListColor ( 7937c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 7947c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 7957c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 7967c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return PICKLIST_HIGHLIGHT_TEXT | PICKLIST_HIGHLIGHT_BACKGROUND; 7977c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 7987c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 7997c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 8007c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Get OEM/Vendor specific arrow color attribute. 8017c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8027c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Byte code color setting for arrow color. 8037c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 8047c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT8 8057c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 8067c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongGetArrowColor ( 8077c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 8087c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 8097c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 8107c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return ARROW_TEXT | ARROW_BACKGROUND; 8117c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 8127c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8137c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 8147c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Get OEM/Vendor specific info text color attribute. 8157c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8167c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Byte code color setting for info text color. 8177c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 8187c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT8 8197c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 8207c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongGetInfoTextColor ( 8217c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 8227c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 8237c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 8247c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return INFO_TEXT | FIELD_BACKGROUND; 8257c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 8267c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8277c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 8287c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Get OEM/Vendor specific help text color attribute. 8297c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8307c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Byte code color setting for help text color. 8317c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 8327c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT8 8337c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 8347c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongGetHelpTextColor ( 8357c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 8367c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 8377c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 8387c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return HELP_TEXT | FIELD_BACKGROUND; 8397c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 8407c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8417c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 8427c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Get OEM/Vendor specific grayed out text color attribute. 8437c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8447c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Byte code color setting for grayed out text color. 8457c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 8467c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT8 8477c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 8487c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongGetGrayedTextColor ( 8497c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 8507c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 8517c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 8527c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return FIELD_TEXT_GRAYED | FIELD_BACKGROUND; 8537c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 8547c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8557c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 8567c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Get OEM/Vendor specific highlighted text color attribute. 8577c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8587c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Byte code color setting for highlight text color. 8597c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 8607c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT8 8617c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 8627c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongGetHighlightTextColor ( 8637c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 8647c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 8657c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 8667c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return PcdGet8 (PcdBrowserFieldTextHighlightColor) | PcdGet8 (PcdBrowserFieldBackgroundHighlightColor); 8677c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 8687c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8697c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 8707c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Get OEM/Vendor specific field text color attribute. 8717c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8727c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Byte code color setting for field text color. 8737c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 8747c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT8 8757c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 8767c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongGetFieldTextColor ( 8777c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 8787c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 8797c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 8807c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return PcdGet8 (PcdBrowserFieldTextColor) | FIELD_BACKGROUND; 8817c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 8827c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8837c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 8847c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Get OEM/Vendor specific subtitle text color attribute. 8857c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8867c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Byte code color setting for subtitle text color. 8877c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 8887c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongUINT8 8897c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 8907c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongGetSubTitleTextColor ( 8917c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 8927c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 8937c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 8947c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return PcdGet8 (PcdBrowserSubtitleTextColor) | FIELD_BACKGROUND; 8957c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 8967c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 8977c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 8987c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Clear Screen to the initial state. 8997c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 9007c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongVOID 9017c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 9027c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongClearDisplayPage ( 9037c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong VOID 9047c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 9057c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 9067c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->SetAttribute (gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK)); 9077c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong gST->ConOut->ClearScreen (gST->ConOut); 9085a9f73bf065eda6b830445dc907e778f4a13d8d7Eric Dong gLibIsFirstForm = TRUE; 9097c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 9107c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9117c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 9127c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Constructor of Customized Display Library Instance. 9137c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9147c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param ImageHandle The firmware allocated handle for the EFI image. 9157c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param SystemTable A pointer to the EFI System Table. 9167c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9177c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. 9187c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9197c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 9207c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFI_STATUS 9217c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 9227c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongCustomizedDisplayLibConstructor ( 9237c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN EFI_HANDLE ImageHandle, 9247c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN EFI_SYSTEM_TABLE *SystemTable 9257c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 9267c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 9277c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong mCDLStringPackHandle = HiiAddPackages (&gCustomizedDisplayLibGuid, ImageHandle, CustomizedDisplayLibStrings, NULL); 9287c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ASSERT (mCDLStringPackHandle != NULL); 9297c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9307c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong InitializeLibStrings(); 9317c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9327c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return EFI_SUCCESS; 9337c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 9347c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9357c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong/** 9367c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong Destructor of Customized Display Library Instance. 9377c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9387c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param ImageHandle The firmware allocated handle for the EFI image. 9397c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @param SystemTable A pointer to the EFI System Table. 9407c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9417c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval EFI_SUCCESS The destructor completed successfully. 9427c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong @retval Other value The destructor did not complete successfully. 9437c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9447c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong**/ 9457c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFI_STATUS 9467c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongEFIAPI 9477c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric DongCustomizedDisplayLibDestructor ( 9487c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN EFI_HANDLE ImageHandle, 9497c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong IN EFI_SYSTEM_TABLE *SystemTable 9507c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong ) 9517c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong{ 9527c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong HiiRemovePackages(mCDLStringPackHandle); 9537c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9547c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong FreeLibStrings (); 9557c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 9567c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong return EFI_SUCCESS; 9577c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong} 9587c6c064ca8ebb5baf5104e8a4764cd3c19ef8bf1Eric Dong 959