|
@@ -1,7 +1,7 @@
|
|
|
/** @file
|
|
|
The application to show the Boot Manager Menu.
|
|
|
|
|
|
-Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.<BR>
|
|
|
+Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
|
|
|
This program and the accompanying materials
|
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
@@ -91,19 +91,19 @@ UINTN
|
|
|
GetLineWidth (
|
|
|
IN EFI_STRING_ID StringId
|
|
|
)
|
|
|
-{
|
|
|
+{
|
|
|
UINTN Index;
|
|
|
UINTN IncrementValue;
|
|
|
EFI_STRING String;
|
|
|
UINTN LineWidth;
|
|
|
-
|
|
|
+
|
|
|
LineWidth = 0;
|
|
|
- String = HiiGetString (gStringPackHandle, StringId, NULL);
|
|
|
-
|
|
|
+ String = HiiGetString (gStringPackHandle, StringId, NULL);
|
|
|
+
|
|
|
if (String != NULL) {
|
|
|
Index = 0;
|
|
|
IncrementValue = 1;
|
|
|
-
|
|
|
+
|
|
|
do {
|
|
|
//
|
|
|
// Advance to the null-terminator or to the first width directive
|
|
@@ -113,7 +113,7 @@ GetLineWidth (
|
|
|
Index++, LineWidth = LineWidth + IncrementValue
|
|
|
)
|
|
|
;
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
// We hit the null-terminator, we now have a count
|
|
|
//
|
|
@@ -137,11 +137,11 @@ GetLineWidth (
|
|
|
Index++;
|
|
|
IncrementValue = 2;
|
|
|
}
|
|
|
- } while (String[Index] != 0);
|
|
|
+ } while (String[Index] != 0);
|
|
|
FreePool (String);
|
|
|
}
|
|
|
-
|
|
|
- return LineWidth;
|
|
|
+
|
|
|
+ return LineWidth;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -150,10 +150,10 @@ GetLineWidth (
|
|
|
@param BootMenuData The boot menu data to be processed.
|
|
|
|
|
|
@return EFI_SUCCESS calculate boot menu information successful.
|
|
|
- @retval EFI_INVALID_PARAMETER Input parameter is invalid
|
|
|
+ @retval EFI_INVALID_PARAMETER Input parameter is invalid
|
|
|
|
|
|
**/
|
|
|
-EFI_STATUS
|
|
|
+EFI_STATUS
|
|
|
InitializeBootMenuScreen (
|
|
|
IN OUT BOOT_MENU_POPUP_DATA *BootMenuData
|
|
|
)
|
|
@@ -172,21 +172,21 @@ InitializeBootMenuScreen (
|
|
|
//
|
|
|
// Get maximum string width
|
|
|
//
|
|
|
- MaxStrWidth = 0;
|
|
|
- for (Index = 0; Index < TITLE_TOKEN_COUNT; Index++) {
|
|
|
+ MaxStrWidth = 0;
|
|
|
+ for (Index = 0; Index < TITLE_TOKEN_COUNT; Index++) {
|
|
|
StrWidth = GetLineWidth (BootMenuData->TitleToken[Index]);
|
|
|
MaxStrWidth = MaxStrWidth > StrWidth ? MaxStrWidth : StrWidth;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
for (Index = 0; Index < BootMenuData->ItemCount; Index++) {
|
|
|
StrWidth = GetLineWidth (BootMenuData->PtrTokens[Index]);
|
|
|
- MaxStrWidth = MaxStrWidth > StrWidth ? MaxStrWidth : StrWidth;
|
|
|
- }
|
|
|
-
|
|
|
- for (Index = 0; Index < HELP_TOKEN_COUNT; Index++) {
|
|
|
+ MaxStrWidth = MaxStrWidth > StrWidth ? MaxStrWidth : StrWidth;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (Index = 0; Index < HELP_TOKEN_COUNT; Index++) {
|
|
|
StrWidth = GetLineWidth (BootMenuData->HelpToken[Index]);
|
|
|
MaxStrWidth = MaxStrWidth > StrWidth ? MaxStrWidth : StrWidth;
|
|
|
- }
|
|
|
+ }
|
|
|
//
|
|
|
// query current row and column to calculate boot menu location
|
|
|
//
|
|
@@ -195,10 +195,10 @@ InitializeBootMenuScreen (
|
|
|
gST->ConOut->Mode->Mode,
|
|
|
&Column,
|
|
|
&Row
|
|
|
- );
|
|
|
-
|
|
|
- MaxPrintRows = Row - 6;
|
|
|
- UnSelectableItmes = TITLE_TOKEN_COUNT + 2 + HELP_TOKEN_COUNT + 2;
|
|
|
+ );
|
|
|
+
|
|
|
+ MaxPrintRows = Row - 6;
|
|
|
+ UnSelectableItmes = TITLE_TOKEN_COUNT + 2 + HELP_TOKEN_COUNT + 2;
|
|
|
BootMenuData->MenuScreen.Width = MaxStrWidth + 8;
|
|
|
if (BootMenuData->ItemCount + UnSelectableItmes > MaxPrintRows) {
|
|
|
BootMenuData->MenuScreen.Height = MaxPrintRows;
|
|
@@ -211,10 +211,10 @@ InitializeBootMenuScreen (
|
|
|
BootMenuData->ScrollBarControl.HasScrollBar = FALSE;
|
|
|
BootMenuData->ScrollBarControl.ItemCountPerScreen = BootMenuData->ItemCount;
|
|
|
BootMenuData->ScrollBarControl.FirstItem = 0;
|
|
|
- BootMenuData->ScrollBarControl.LastItem = BootMenuData->ItemCount - 1;
|
|
|
+ BootMenuData->ScrollBarControl.LastItem = BootMenuData->ItemCount - 1;
|
|
|
}
|
|
|
- BootMenuData->MenuScreen.StartCol = (Column - BootMenuData->MenuScreen.Width) / 2;
|
|
|
- BootMenuData->MenuScreen.StartRow = (Row - BootMenuData->MenuScreen.Height) / 2;
|
|
|
+ BootMenuData->MenuScreen.StartCol = (Column - BootMenuData->MenuScreen.Width) / 2;
|
|
|
+ BootMenuData->MenuScreen.StartRow = (Row - BootMenuData->MenuScreen.Height) / 2;
|
|
|
|
|
|
return EFI_SUCCESS;
|
|
|
}
|
|
@@ -222,7 +222,7 @@ InitializeBootMenuScreen (
|
|
|
This function uses check boot option is wheher setup application or no
|
|
|
|
|
|
@param BootOption Pointer to EFI_BOOT_MANAGER_LOAD_OPTION array.
|
|
|
-
|
|
|
+
|
|
|
@retval TRUE This boot option is setup application.
|
|
|
@retval FALSE This boot options isn't setup application
|
|
|
|
|
@@ -291,9 +291,9 @@ IgnoreBootOption (
|
|
|
@param BootOption Pointer to EFI_BOOT_MANAGER_LOAD_OPTION array.
|
|
|
@param BootOptionCount Number of boot option.
|
|
|
@param BootMenuData The Input BootMenuData to be initialized.
|
|
|
-
|
|
|
+
|
|
|
@retval EFI_SUCCESS Initialize boot menu data successful.
|
|
|
- @retval EFI_INVALID_PARAMETER Input parameter is invalid.
|
|
|
+ @retval EFI_INVALID_PARAMETER Input parameter is invalid.
|
|
|
|
|
|
**/
|
|
|
EFI_STATUS
|
|
@@ -305,7 +305,7 @@ InitializeBootMenuData (
|
|
|
{
|
|
|
UINTN Index;
|
|
|
UINTN StrIndex;
|
|
|
-
|
|
|
+
|
|
|
if (BootOption == NULL || BootMenuData == NULL) {
|
|
|
return EFI_INVALID_PARAMETER;
|
|
|
}
|
|
@@ -324,21 +324,21 @@ InitializeBootMenuData (
|
|
|
|
|
|
ASSERT (BootOption[Index].Description != NULL);
|
|
|
BootMenuData->PtrTokens[StrIndex++] = HiiSetString (
|
|
|
- gStringPackHandle,
|
|
|
+ gStringPackHandle,
|
|
|
0,
|
|
|
BootOption[Index].Description,
|
|
|
NULL
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- BootMenuData->ItemCount = StrIndex;
|
|
|
+ BootMenuData->ItemCount = StrIndex;
|
|
|
BootMenuData->HelpToken[0] = STRING_TOKEN (STR_BOOT_POPUP_MENU_HELP1_STRING);
|
|
|
BootMenuData->HelpToken[1] = STRING_TOKEN (STR_BOOT_POPUP_MENU_HELP2_STRING);
|
|
|
BootMenuData->HelpToken[2] = STRING_TOKEN (STR_BOOT_POPUP_MENU_HELP3_STRING);
|
|
|
InitializeBootMenuScreen (BootMenuData);
|
|
|
BootMenuData->SelectItem = 0;
|
|
|
return EFI_SUCCESS;
|
|
|
-}
|
|
|
+}
|
|
|
|
|
|
/**
|
|
|
This function uses input select item to highlight selected item
|
|
@@ -347,9 +347,9 @@ InitializeBootMenuData (
|
|
|
@param WantSelectItem The user wants to select item.
|
|
|
@param BootMenuData The boot menu data to be processed
|
|
|
|
|
|
- @return EFI_SUCCESS Highlight selected item and update current selected
|
|
|
- item successful
|
|
|
- @retval EFI_INVALID_PARAMETER Input parameter is invalid
|
|
|
+ @return EFI_SUCCESS Highlight selected item and update current selected
|
|
|
+ item successful
|
|
|
+ @retval EFI_INVALID_PARAMETER Input parameter is invalid
|
|
|
**/
|
|
|
EFI_STATUS
|
|
|
BootMenuSelectItem (
|
|
@@ -359,7 +359,7 @@ BootMenuSelectItem (
|
|
|
{
|
|
|
INT32 SavedAttribute;
|
|
|
EFI_STRING String;
|
|
|
- UINTN StartCol;
|
|
|
+ UINTN StartCol;
|
|
|
UINTN StartRow;
|
|
|
UINTN PrintCol;
|
|
|
UINTN PrintRow;
|
|
@@ -370,7 +370,7 @@ BootMenuSelectItem (
|
|
|
UINTN ItemCountPerScreen;
|
|
|
UINTN Index;
|
|
|
BOOLEAN RePaintItems;
|
|
|
-
|
|
|
+
|
|
|
if (BootMenuData == NULL || WantSelectItem >= BootMenuData->ItemCount) {
|
|
|
return EFI_INVALID_PARAMETER;
|
|
|
}
|
|
@@ -381,20 +381,20 @@ BootMenuSelectItem (
|
|
|
StartRow = BootMenuData->MenuScreen.StartRow;
|
|
|
//
|
|
|
// print selectable items again and adjust scroll bar if need
|
|
|
- //
|
|
|
+ //
|
|
|
if (BootMenuData->ScrollBarControl.HasScrollBar &&
|
|
|
(WantSelectItem < BootMenuData->ScrollBarControl.FirstItem ||
|
|
|
WantSelectItem > BootMenuData->ScrollBarControl.LastItem ||
|
|
|
- WantSelectItem == BootMenuData->SelectItem)) {
|
|
|
+ WantSelectItem == BootMenuData->SelectItem)) {
|
|
|
ItemCountPerScreen = BootMenuData->ScrollBarControl.ItemCountPerScreen;
|
|
|
//
|
|
|
// Set first item and last item
|
|
|
- //
|
|
|
+ //
|
|
|
if (WantSelectItem < BootMenuData->ScrollBarControl.FirstItem) {
|
|
|
BootMenuData->ScrollBarControl.FirstItem = WantSelectItem;
|
|
|
- BootMenuData->ScrollBarControl.LastItem = WantSelectItem + ItemCountPerScreen - 1;
|
|
|
+ BootMenuData->ScrollBarControl.LastItem = WantSelectItem + ItemCountPerScreen - 1;
|
|
|
} else if (WantSelectItem > BootMenuData->ScrollBarControl.LastItem) {
|
|
|
- BootMenuData->ScrollBarControl.FirstItem = WantSelectItem - ItemCountPerScreen + 1;
|
|
|
+ BootMenuData->ScrollBarControl.FirstItem = WantSelectItem - ItemCountPerScreen + 1;
|
|
|
BootMenuData->ScrollBarControl.LastItem = WantSelectItem;
|
|
|
}
|
|
|
gST->ConOut->SetAttribute (gST->ConOut, EFI_WHITE | EFI_BACKGROUND_BLUE);
|
|
@@ -407,7 +407,7 @@ BootMenuSelectItem (
|
|
|
TopShadeNum++;
|
|
|
}
|
|
|
PrintCol = StartCol + BootMenuData->MenuScreen.Width - 2;
|
|
|
- PrintRow = StartRow + TITLE_TOKEN_COUNT + 2;
|
|
|
+ PrintRow = StartRow + TITLE_TOKEN_COUNT + 2;
|
|
|
for (Index = 0; Index < TopShadeNum; Index++, PrintRow++) {
|
|
|
PrintCharAt (PrintCol, PrintRow, BLOCKELEMENT_LIGHT_SHADE);
|
|
|
}
|
|
@@ -419,65 +419,65 @@ BootMenuSelectItem (
|
|
|
LowShadeNum++;
|
|
|
}
|
|
|
PrintCol = StartCol + BootMenuData->MenuScreen.Width - 2;
|
|
|
- PrintRow = StartRow + TITLE_TOKEN_COUNT + 2 + ItemCountPerScreen - LowShadeNum;
|
|
|
+ PrintRow = StartRow + TITLE_TOKEN_COUNT + 2 + ItemCountPerScreen - LowShadeNum;
|
|
|
for (Index = 0; Index < LowShadeNum; Index++, PrintRow++) {
|
|
|
PrintCharAt (PrintCol, PrintRow, BLOCKELEMENT_LIGHT_SHADE);
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
PrintCol = StartCol + BootMenuData->MenuScreen.Width - 2;
|
|
|
- PrintRow = StartRow + TITLE_TOKEN_COUNT + 2 + TopShadeNum;
|
|
|
+ PrintRow = StartRow + TITLE_TOKEN_COUNT + 2 + TopShadeNum;
|
|
|
for (Index = TopShadeNum; Index < ItemCountPerScreen - LowShadeNum; Index++, PrintRow++) {
|
|
|
PrintCharAt (PrintCol, PrintRow, BLOCKELEMENT_FULL_BLOCK);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
//
|
|
|
// Clear selectable items first
|
|
|
//
|
|
|
PrintCol = StartCol + 1;
|
|
|
- PrintRow = StartRow + TITLE_TOKEN_COUNT + 2;
|
|
|
+ PrintRow = StartRow + TITLE_TOKEN_COUNT + 2;
|
|
|
String = AllocateZeroPool ((BootMenuData->MenuScreen.Width - 2) * sizeof (CHAR16));
|
|
|
ASSERT (String != NULL);
|
|
|
for (Index = 0; Index < BootMenuData->MenuScreen.Width - 3; Index++) {
|
|
|
String[Index] = 0x20;
|
|
|
- }
|
|
|
- for (Index = 0; Index < ItemCountPerScreen; Index++) {
|
|
|
- PrintStringAt (PrintCol, PrintRow + Index, String);
|
|
|
+ }
|
|
|
+ for (Index = 0; Index < ItemCountPerScreen; Index++) {
|
|
|
+ PrintStringAt (PrintCol, PrintRow + Index, String);
|
|
|
}
|
|
|
FreePool (String);
|
|
|
//
|
|
|
- // print selectable items
|
|
|
+ // print selectable items
|
|
|
//
|
|
|
for (Index = 0; Index < ItemCountPerScreen; Index++, PrintRow++) {
|
|
|
String = HiiGetString (gStringPackHandle, BootMenuData->PtrTokens[Index + FirstItem], NULL);
|
|
|
PrintStringAt (PrintCol, PrintRow, String);
|
|
|
- FreePool (String);
|
|
|
+ FreePool (String);
|
|
|
}
|
|
|
RePaintItems = TRUE;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
- // Print want to select item
|
|
|
+ // Print want to select item
|
|
|
//
|
|
|
FirstItem = BootMenuData->ScrollBarControl.FirstItem;
|
|
|
gST->ConOut->SetAttribute (gST->ConOut, EFI_WHITE | EFI_BACKGROUND_BLACK);
|
|
|
String = HiiGetString (gStringPackHandle, BootMenuData->PtrTokens[WantSelectItem], NULL);
|
|
|
- PrintCol = StartCol + 1;
|
|
|
- PrintRow = StartRow + TITLE_TOKEN_COUNT + 2 + WantSelectItem - FirstItem;
|
|
|
+ PrintCol = StartCol + 1;
|
|
|
+ PrintRow = StartRow + TITLE_TOKEN_COUNT + 2 + WantSelectItem - FirstItem;
|
|
|
PrintStringAt (PrintCol, PrintRow, String);
|
|
|
FreePool (String);
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
- // if Want Select and selected item isn't the same and doesn't re-draw selectable
|
|
|
+ // if Want Select and selected item isn't the same and doesn't re-draw selectable
|
|
|
// items, clear select item
|
|
|
//
|
|
|
if (WantSelectItem != BootMenuData->SelectItem && !RePaintItems) {
|
|
|
gST->ConOut->SetAttribute (gST->ConOut, EFI_WHITE | EFI_BACKGROUND_BLUE);
|
|
|
String = HiiGetString (gStringPackHandle, BootMenuData->PtrTokens[BootMenuData->SelectItem], NULL);
|
|
|
- PrintCol = StartCol + 1;
|
|
|
- PrintRow = StartRow + 3 + BootMenuData->SelectItem - FirstItem;
|
|
|
+ PrintCol = StartCol + 1;
|
|
|
+ PrintRow = StartRow + 3 + BootMenuData->SelectItem - FirstItem;
|
|
|
PrintStringAt (PrintCol, PrintRow, String);
|
|
|
- FreePool (String);
|
|
|
+ FreePool (String);
|
|
|
}
|
|
|
|
|
|
gST->ConOut->SetAttribute (gST->ConOut, SavedAttribute);
|
|
@@ -489,28 +489,28 @@ BootMenuSelectItem (
|
|
|
This function uses to draw boot popup menu
|
|
|
|
|
|
@param BootMenuData The Input BootMenuData to be processed.
|
|
|
-
|
|
|
+
|
|
|
@retval EFI_SUCCESS Draw boot popup menu successful.
|
|
|
|
|
|
**/
|
|
|
-EFI_STATUS
|
|
|
+EFI_STATUS
|
|
|
DrawBootPopupMenu (
|
|
|
IN BOOT_MENU_POPUP_DATA *BootMenuData
|
|
|
)
|
|
|
{
|
|
|
EFI_STRING String;
|
|
|
UINTN Index;
|
|
|
- UINTN Width;
|
|
|
+ UINTN Width;
|
|
|
UINTN StartCol;
|
|
|
UINTN StartRow;
|
|
|
UINTN PrintRow;
|
|
|
UINTN PrintCol;
|
|
|
UINTN LineWidth;
|
|
|
- INT32 SavedAttribute;
|
|
|
- UINTN ItemCountPerScreen;
|
|
|
+ INT32 SavedAttribute;
|
|
|
+ UINTN ItemCountPerScreen;
|
|
|
|
|
|
gST->ConOut->ClearScreen (gST->ConOut);
|
|
|
-
|
|
|
+
|
|
|
SavedAttribute = gST->ConOut->Mode->Attribute;
|
|
|
gST->ConOut->SetAttribute (gST->ConOut, EFI_WHITE | EFI_BACKGROUND_BLUE);
|
|
|
Width = BootMenuData->MenuScreen.Width;
|
|
@@ -518,17 +518,17 @@ DrawBootPopupMenu (
|
|
|
StartRow = BootMenuData->MenuScreen.StartRow;
|
|
|
ItemCountPerScreen = BootMenuData->ScrollBarControl.ItemCountPerScreen;
|
|
|
PrintRow = StartRow;
|
|
|
-
|
|
|
+
|
|
|
gST->ConOut->EnableCursor (gST->ConOut, FALSE);
|
|
|
//
|
|
|
// Draw Boot popup menu screen
|
|
|
//
|
|
|
PrintCharAt (StartCol, PrintRow, BOXDRAW_DOWN_RIGHT);
|
|
|
for (Index = 1; Index < Width - 1; Index++) {
|
|
|
- PrintCharAt (StartCol + Index, PrintRow, BOXDRAW_HORIZONTAL);
|
|
|
+ PrintCharAt (StartCol + Index, PrintRow, BOXDRAW_HORIZONTAL);
|
|
|
}
|
|
|
PrintCharAt (StartCol + Width - 1, PrintRow, BOXDRAW_DOWN_LEFT);
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
// Draw the screen for title
|
|
|
//
|
|
@@ -540,18 +540,18 @@ DrawBootPopupMenu (
|
|
|
|
|
|
for (Index = 0; Index < TITLE_TOKEN_COUNT; Index++) {
|
|
|
PrintRow++;
|
|
|
- PrintCharAt (StartCol, PrintRow, BOXDRAW_VERTICAL);
|
|
|
+ PrintCharAt (StartCol, PrintRow, BOXDRAW_VERTICAL);
|
|
|
PrintStringAt (StartCol + 1, PrintRow, String);
|
|
|
PrintCharAt (StartCol + Width - 1, PrintRow, BOXDRAW_VERTICAL);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
PrintRow++;
|
|
|
PrintCharAt (StartCol, PrintRow, BOXDRAW_VERTICAL_RIGHT);
|
|
|
for (Index = 1; Index < Width - 1; Index++) {
|
|
|
- PrintCharAt (StartCol + Index, PrintRow, BOXDRAW_HORIZONTAL);
|
|
|
+ PrintCharAt (StartCol + Index, PrintRow, BOXDRAW_HORIZONTAL);
|
|
|
}
|
|
|
- PrintCharAt (StartCol + Width - 1, PrintRow, BOXDRAW_VERTICAL_LEFT);
|
|
|
-
|
|
|
+ PrintCharAt (StartCol + Width - 1, PrintRow, BOXDRAW_VERTICAL_LEFT);
|
|
|
+
|
|
|
//
|
|
|
// Draw screen for selectable items
|
|
|
//
|
|
@@ -560,15 +560,15 @@ DrawBootPopupMenu (
|
|
|
PrintCharAt (StartCol, PrintRow, BOXDRAW_VERTICAL);
|
|
|
PrintStringAt (StartCol + 1, PrintRow, String);
|
|
|
PrintCharAt (StartCol + Width - 1, PrintRow, BOXDRAW_VERTICAL);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
PrintRow++;
|
|
|
PrintCharAt (StartCol, PrintRow, BOXDRAW_VERTICAL_RIGHT);
|
|
|
for (Index = 1; Index < Width - 1; Index++) {
|
|
|
- PrintCharAt (StartCol + Index, PrintRow, BOXDRAW_HORIZONTAL);
|
|
|
+ PrintCharAt (StartCol + Index, PrintRow, BOXDRAW_HORIZONTAL);
|
|
|
}
|
|
|
PrintCharAt (StartCol + Width - 1, PrintRow, BOXDRAW_VERTICAL_LEFT);
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
// Draw screen for Help
|
|
|
//
|
|
@@ -578,39 +578,39 @@ DrawBootPopupMenu (
|
|
|
PrintStringAt (StartCol + 1, PrintRow, String);
|
|
|
PrintCharAt (StartCol + Width - 1, PrintRow, BOXDRAW_VERTICAL);
|
|
|
}
|
|
|
- FreePool (String);
|
|
|
-
|
|
|
- PrintRow++;
|
|
|
+ FreePool (String);
|
|
|
+
|
|
|
+ PrintRow++;
|
|
|
PrintCharAt (StartCol, PrintRow, BOXDRAW_UP_RIGHT);
|
|
|
for (Index = 1; Index < Width - 1; Index++) {
|
|
|
- PrintCharAt (StartCol + Index, PrintRow, BOXDRAW_HORIZONTAL);
|
|
|
+ PrintCharAt (StartCol + Index, PrintRow, BOXDRAW_HORIZONTAL);
|
|
|
}
|
|
|
- PrintCharAt (StartCol + Width - 1, PrintRow, BOXDRAW_UP_LEFT);
|
|
|
-
|
|
|
-
|
|
|
+ PrintCharAt (StartCol + Width - 1, PrintRow, BOXDRAW_UP_LEFT);
|
|
|
+
|
|
|
+
|
|
|
//
|
|
|
// print title strings
|
|
|
//
|
|
|
PrintRow = StartRow + 1;
|
|
|
for (Index = 0; Index < TITLE_TOKEN_COUNT; Index++, PrintRow++) {
|
|
|
String = HiiGetString (gStringPackHandle, BootMenuData->TitleToken[Index], NULL);
|
|
|
- LineWidth = GetLineWidth (BootMenuData->TitleToken[Index]);
|
|
|
+ LineWidth = GetLineWidth (BootMenuData->TitleToken[Index]);
|
|
|
PrintCol = StartCol + (Width - LineWidth) / 2;
|
|
|
PrintStringAt (PrintCol, PrintRow, String);
|
|
|
FreePool (String);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
// print selectable items
|
|
|
//
|
|
|
PrintCol = StartCol + 1;
|
|
|
- PrintRow = StartRow + TITLE_TOKEN_COUNT + 2;
|
|
|
+ PrintRow = StartRow + TITLE_TOKEN_COUNT + 2;
|
|
|
for (Index = 0; Index < ItemCountPerScreen; Index++, PrintRow++) {
|
|
|
String = HiiGetString (gStringPackHandle, BootMenuData->PtrTokens[Index], NULL);
|
|
|
PrintStringAt (PrintCol, PrintRow, String);
|
|
|
- FreePool (String);
|
|
|
+ FreePool (String);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
// Print Help strings
|
|
|
//
|
|
@@ -622,20 +622,20 @@ DrawBootPopupMenu (
|
|
|
PrintStringAt (PrintCol, PrintRow, String);
|
|
|
FreePool (String);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
// Print scroll bar if has scroll bar
|
|
|
//
|
|
|
if (BootMenuData->ScrollBarControl.HasScrollBar) {
|
|
|
PrintCol = StartCol + Width - 2;
|
|
|
- PrintRow = StartRow + 2;
|
|
|
- PrintCharAt (PrintCol, PrintRow, GEOMETRICSHAPE_UP_TRIANGLE);
|
|
|
- PrintCharAt (PrintCol + 1, PrintRow, BOXDRAW_VERTICAL);
|
|
|
- PrintRow += (ItemCountPerScreen + 1);
|
|
|
+ PrintRow = StartRow + 2;
|
|
|
+ PrintCharAt (PrintCol, PrintRow, GEOMETRICSHAPE_UP_TRIANGLE);
|
|
|
+ PrintCharAt (PrintCol + 1, PrintRow, BOXDRAW_VERTICAL);
|
|
|
+ PrintRow += (ItemCountPerScreen + 1);
|
|
|
PrintCharAt (PrintCol, PrintRow, GEOMETRICSHAPE_DOWN_TRIANGLE);
|
|
|
- PrintCharAt (PrintCol + 1, PrintRow, BOXDRAW_VERTICAL);
|
|
|
- }
|
|
|
-
|
|
|
+ PrintCharAt (PrintCol + 1, PrintRow, BOXDRAW_VERTICAL);
|
|
|
+ }
|
|
|
+
|
|
|
gST->ConOut->SetAttribute (gST->ConOut, SavedAttribute);
|
|
|
//
|
|
|
// Print Selected item
|
|
@@ -645,7 +645,7 @@ DrawBootPopupMenu (
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- This function uses to boot from selected item
|
|
|
+ This function uses to boot from selected item
|
|
|
|
|
|
@param BootOptions Pointer to EFI_BOOT_MANAGER_LOAD_OPTION array.
|
|
|
@param BootOptionCount Number of boot option.
|
|
@@ -654,7 +654,7 @@ DrawBootPopupMenu (
|
|
|
VOID
|
|
|
BootFromSelectOption (
|
|
|
IN EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions,
|
|
|
- IN UINTN BootOptionCount,
|
|
|
+ IN UINTN BootOptionCount,
|
|
|
IN UINTN SelectItem
|
|
|
)
|
|
|
{
|
|
@@ -677,9 +677,9 @@ BootFromSelectOption (
|
|
|
|
|
|
/**
|
|
|
This function will change video resolution and text mode
|
|
|
- according to defined setup mode or defined boot mode
|
|
|
+ according to defined setup mode or defined boot mode
|
|
|
|
|
|
- @param IsSetupMode Indicate mode is changed to setup mode or boot mode.
|
|
|
+ @param IsSetupMode Indicate mode is changed to setup mode or boot mode.
|
|
|
|
|
|
@retval EFI_SUCCESS Mode is changed successfully.
|
|
|
@retval Others Mode failed to be changed.
|
|
@@ -707,13 +707,13 @@ BdsSetConsoleMode (
|
|
|
EFI_STATUS Status;
|
|
|
UINTN Index;
|
|
|
UINTN CurrentColumn;
|
|
|
- UINTN CurrentRow;
|
|
|
+ UINTN CurrentRow;
|
|
|
|
|
|
MaxGopMode = 0;
|
|
|
MaxTextMode = 0;
|
|
|
|
|
|
//
|
|
|
- // Get current video resolution and text mode
|
|
|
+ // Get current video resolution and text mode
|
|
|
//
|
|
|
Status = gBS->HandleProtocol (
|
|
|
gST->ConsoleOutHandle,
|
|
@@ -731,7 +731,7 @@ BdsSetConsoleMode (
|
|
|
);
|
|
|
if (EFI_ERROR (Status)) {
|
|
|
SimpleTextOut = NULL;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
if ((GraphicsOutput == NULL) || (SimpleTextOut == NULL)) {
|
|
|
return EFI_UNSUPPORTED;
|
|
@@ -752,12 +752,12 @@ BdsSetConsoleMode (
|
|
|
NewHorizontalResolution = mBootHorizontalResolution;
|
|
|
NewVerticalResolution = mBootVerticalResolution;
|
|
|
NewColumns = mBootTextModeColumn;
|
|
|
- NewRows = mBootTextModeRow;
|
|
|
+ NewRows = mBootTextModeRow;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (GraphicsOutput != NULL) {
|
|
|
MaxGopMode = GraphicsOutput->Mode->MaxMode;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
if (SimpleTextOut != NULL) {
|
|
|
MaxTextMode = SimpleTextOut->Mode->MaxMode;
|
|
@@ -861,7 +861,7 @@ BdsSetConsoleMode (
|
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
Status = PcdSet32S (PcdConOutRow, NewRows);
|
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
// Video mode is changed, so restart graphics console driver and higher level driver.
|
|
|
// Reconnect graphics console driver and higher level driver.
|
|
@@ -894,10 +894,10 @@ BdsSetConsoleMode (
|
|
|
|
|
|
@param ImageHandle The image handle.
|
|
|
@param SystemTable The system table.
|
|
|
-
|
|
|
+
|
|
|
@retval EFI_SUCCESS Boot from selected boot option, and return success from boot option
|
|
|
@retval EFI_NOT_FOUND User select to enter setup or can not find boot option
|
|
|
-
|
|
|
+
|
|
|
**/
|
|
|
EFI_STATUS
|
|
|
EFIAPI
|
|
@@ -907,7 +907,7 @@ BootManagerMenuEntry (
|
|
|
)
|
|
|
{
|
|
|
EFI_BOOT_MANAGER_LOAD_OPTION *BootOption;
|
|
|
- UINTN BootOptionCount;
|
|
|
+ UINTN BootOptionCount;
|
|
|
EFI_STATUS Status;
|
|
|
BOOT_MENU_POPUP_DATA BootMenuData;
|
|
|
UINTN Index;
|
|
@@ -950,7 +950,7 @@ BootManagerMenuEntry (
|
|
|
|
|
|
if (!mModeInitialized) {
|
|
|
//
|
|
|
- // After the console is ready, get current video resolution
|
|
|
+ // After the console is ready, get current video resolution
|
|
|
// and text mode before launching setup at first time.
|
|
|
//
|
|
|
Status = gBS->HandleProtocol (
|
|
@@ -961,7 +961,7 @@ BootManagerMenuEntry (
|
|
|
if (EFI_ERROR (Status)) {
|
|
|
GraphicsOutput = NULL;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
Status = gBS->HandleProtocol (
|
|
|
gST->ConsoleOutHandle,
|
|
|
&gEfiSimpleTextOutProtocolGuid,
|
|
@@ -969,7 +969,7 @@ BootManagerMenuEntry (
|
|
|
);
|
|
|
if (EFI_ERROR (Status)) {
|
|
|
SimpleTextOut = NULL;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
if (GraphicsOutput != NULL) {
|
|
|
//
|
|
@@ -992,14 +992,14 @@ BootManagerMenuEntry (
|
|
|
|
|
|
//
|
|
|
// Get user defined text mode for setup.
|
|
|
- //
|
|
|
+ //
|
|
|
mSetupHorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);
|
|
|
- mSetupVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
|
|
|
+ mSetupVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
|
|
|
mSetupTextModeColumn = PcdGet32 (PcdSetupConOutColumn);
|
|
|
mSetupTextModeRow = PcdGet32 (PcdSetupConOutRow);
|
|
|
mModeInitialized = TRUE;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
// Set back to conventional setup resolution
|
|
|
//
|
|
@@ -1013,7 +1013,7 @@ BootManagerMenuEntry (
|
|
|
// According to boot menu data to draw boot popup menu
|
|
|
//
|
|
|
DrawBootPopupMenu (&BootMenuData);
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
// check user input to determine want to re-draw or boot from user selected item
|
|
|
//
|
|
@@ -1023,18 +1023,18 @@ BootManagerMenuEntry (
|
|
|
Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
|
|
|
if (!EFI_ERROR (Status)) {
|
|
|
switch (Key.UnicodeChar) {
|
|
|
-
|
|
|
- case CHAR_NULL:
|
|
|
- switch (Key.ScanCode) {
|
|
|
-
|
|
|
+
|
|
|
+ case CHAR_NULL:
|
|
|
+ switch (Key.ScanCode) {
|
|
|
+
|
|
|
case SCAN_UP:
|
|
|
SelectItem = BootMenuData.SelectItem == 0 ? BootMenuData.ItemCount - 1 : BootMenuData.SelectItem - 1;
|
|
|
- BootMenuSelectItem (SelectItem, &BootMenuData);
|
|
|
+ BootMenuSelectItem (SelectItem, &BootMenuData);
|
|
|
break;
|
|
|
-
|
|
|
+
|
|
|
case SCAN_DOWN:
|
|
|
SelectItem = BootMenuData.SelectItem == BootMenuData.ItemCount - 1 ? 0 : BootMenuData.SelectItem + 1;
|
|
|
- BootMenuSelectItem (SelectItem, &BootMenuData);
|
|
|
+ BootMenuSelectItem (SelectItem, &BootMenuData);
|
|
|
break;
|
|
|
|
|
|
case SCAN_ESC:
|
|
@@ -1045,12 +1045,12 @@ BootManagerMenuEntry (
|
|
|
//
|
|
|
BdsSetConsoleMode (FALSE);
|
|
|
break;
|
|
|
-
|
|
|
+
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
break;
|
|
|
-
|
|
|
+
|
|
|
case CHAR_CARRIAGE_RETURN:
|
|
|
gST->ConOut->ClearScreen (gST->ConOut);
|
|
|
//
|
|
@@ -1064,7 +1064,7 @@ BootManagerMenuEntry (
|
|
|
BdsSetConsoleMode (TRUE);
|
|
|
DrawBootPopupMenu (&BootMenuData);
|
|
|
break;
|
|
|
-
|
|
|
+
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
@@ -1076,5 +1076,5 @@ BootManagerMenuEntry (
|
|
|
HiiRemovePackages (gStringPackHandle);
|
|
|
|
|
|
return Status;
|
|
|
-
|
|
|
+
|
|
|
}
|