\r
This library class defines a set of interfaces to customize Display module\r
\r
-Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials are licensed and made available under \r
-the terms and conditions of the BSD License that accompanies this distribution. \r
-The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php. \r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2013-2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
#include "CustomizedDisplayLibInternal.h"\r
Print banner info for front page.\r
\r
@param[in] FormData Form Data to be shown in Page\r
- \r
+\r
**/\r
VOID\r
-PrintBannerInfo ( \r
+PrintBannerInfo (\r
IN FORM_DISPLAY_ENGINE_FORM *FormData\r
)\r
{\r
) {\r
RowIdx = (UINT8) (Line - (UINT8) gScreenDimensions.TopRow);\r
ColumnIdx = (UINT8) (Alignment - (UINT8) gScreenDimensions.LeftColumn);\r
- \r
+\r
ASSERT (RowIdx < BANNER_HEIGHT && ColumnIdx < BANNER_COLUMNS);\r
- \r
+\r
if (gBannerData!= NULL && gBannerData->Banner[RowIdx][ColumnIdx] != 0x0000) {\r
StrFrontPageBanner = LibGetToken (gBannerData->Banner[RowIdx][ColumnIdx], FormData->HiiHandle);\r
} else {\r
continue;\r
}\r
- \r
+\r
switch (Alignment - gScreenDimensions.LeftColumn) {\r
case 0:\r
//\r
//\r
PrintStringAt (gScreenDimensions.LeftColumn + BANNER_LEFT_COLUMN_INDENT, Line, StrFrontPageBanner);\r
break;\r
- \r
+\r
case 1:\r
//\r
// Handle center column\r
StrFrontPageBanner\r
);\r
break;\r
- \r
+\r
case 2:\r
//\r
// Handle right column\r
);\r
break;\r
}\r
- \r
+\r
FreePool (StrFrontPageBanner);\r
}\r
}\r
}\r
\r
/**\r
+ Print framework and form title for a page.\r
\r
- Print framework for a page.\r
- \r
+ @param[in] FormData Form Data to be shown in Page\r
**/\r
VOID\r
PrintFramework (\r
- VOID\r
+ IN FORM_DISPLAY_ENGINE_FORM *FormData\r
)\r
{\r
UINTN Index;\r
CHAR16 Character;\r
CHAR16 *Buffer;\r
UINTN Row;\r
+ CHAR16 *TitleStr;\r
+ UINTN TitleColumn;\r
+\r
+ if (gClassOfVfr != FORMSET_CLASS_PLATFORM_SETUP) {\r
+ //\r
+ // Only Setup page needs Framework\r
+ //\r
+ ClearLines (\r
+ gScreenDimensions.LeftColumn,\r
+ gScreenDimensions.RightColumn,\r
+ gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight,\r
+ gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 1,\r
+ KEYHELP_TEXT | KEYHELP_BACKGROUND\r
+ );\r
+ return;\r
+ }\r
\r
Buffer = AllocateZeroPool (0x10000);\r
ASSERT (Buffer != NULL);\r
Buffer[Index] = Character;\r
}\r
\r
- ClearLines (\r
- gScreenDimensions.LeftColumn,\r
- gScreenDimensions.RightColumn,\r
- gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight,\r
- gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 1,\r
- KEYHELP_TEXT | KEYHELP_BACKGROUND\r
- );\r
-\r
- if ((gClassOfVfr & FORMSET_CLASS_PLATFORM_SETUP) == FORMSET_CLASS_PLATFORM_SETUP) {\r
- ClearLines (\r
- gScreenDimensions.LeftColumn,\r
- gScreenDimensions.RightColumn,\r
- gScreenDimensions.TopRow,\r
- gScreenDimensions.TopRow + NONE_FRONT_PAGE_HEADER_HEIGHT - 1,\r
- TITLE_TEXT | TITLE_BACKGROUND\r
- );\r
- //\r
- // Print Top border line\r
- // +------------------------------------------------------------------------------+\r
- // ? ?\r
- // +------------------------------------------------------------------------------+\r
- //\r
- Character = BOXDRAW_DOWN_RIGHT;\r
-\r
- PrintCharAt ((UINTN) -1, (UINTN) -1, Character);\r
- PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);\r
-\r
- Character = BOXDRAW_DOWN_LEFT;\r
- PrintCharAt ((UINTN) -1, (UINTN) -1, Character);\r
-\r
- Character = BOXDRAW_VERTICAL;\r
- for (Row = gScreenDimensions.TopRow + 1; Row <= gScreenDimensions.TopRow + NONE_FRONT_PAGE_HEADER_HEIGHT - 2; Row++) {\r
- PrintCharAt (gScreenDimensions.LeftColumn, Row, Character);\r
- PrintCharAt (gScreenDimensions.RightColumn - 1, Row, Character);\r
- }\r
-\r
- Character = BOXDRAW_UP_RIGHT;\r
- PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.TopRow + NONE_FRONT_PAGE_HEADER_HEIGHT - 1, Character);\r
- PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);\r
-\r
- Character = BOXDRAW_UP_LEFT;\r
- PrintCharAt ((UINTN) -1, (UINTN) -1, Character);\r
-\r
- //\r
- // Print Bottom border line\r
- // +------------------------------------------------------------------------------+\r
- // ? ?\r
- // +------------------------------------------------------------------------------+\r
- //\r
- Character = BOXDRAW_DOWN_RIGHT;\r
- PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight, Character);\r
-\r
- PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);\r
-\r
- Character = BOXDRAW_DOWN_LEFT;\r
- PrintCharAt ((UINTN) -1, (UINTN) -1, Character);\r
- Character = BOXDRAW_VERTICAL;\r
- for (Row = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight + 1;\r
- Row <= gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 2;\r
- Row++\r
- ) {\r
- PrintCharAt (gScreenDimensions.LeftColumn, Row, Character);\r
- PrintCharAt (gScreenDimensions.RightColumn - 1, Row, Character);\r
- }\r
+ //\r
+ // Print Top border line\r
+ // +------------------------------------------------------------------------------+\r
+ // ? ?\r
+ // +------------------------------------------------------------------------------+\r
+ //\r
+ gST->ConOut->SetAttribute (gST->ConOut, TITLE_TEXT | TITLE_BACKGROUND);\r
+ Character = BOXDRAW_DOWN_RIGHT;\r
\r
- Character = BOXDRAW_UP_RIGHT;\r
- PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 1, Character);\r
+ PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.TopRow, Character);\r
+ PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);\r
\r
- PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);\r
+ Character = BOXDRAW_DOWN_LEFT;\r
+ PrintCharAt ((UINTN) -1, (UINTN) -1, Character);\r
\r
- Character = BOXDRAW_UP_LEFT;\r
- PrintCharAt ((UINTN) -1, (UINTN) -1, Character);\r
+ Character = BOXDRAW_VERTICAL;\r
+ for (Row = gScreenDimensions.TopRow + 1; Row <= gScreenDimensions.TopRow + NONE_FRONT_PAGE_HEADER_HEIGHT - 2; Row++) {\r
+ PrintCharAt (gScreenDimensions.LeftColumn, Row, Character);\r
+ PrintCharAt (gScreenDimensions.RightColumn - 1, Row, Character);\r
}\r
- \r
- FreePool (Buffer);\r
-}\r
\r
-/**\r
- Print the form title.\r
+ //\r
+ // Print Form Title\r
+ //\r
+ TitleStr = LibGetToken (FormData->FormTitle, FormData->HiiHandle);\r
+ ASSERT (TitleStr != NULL);\r
+ TitleColumn = (gScreenDimensions.RightColumn + gScreenDimensions.LeftColumn - LibGetStringWidth (TitleStr) / 2) / 2;\r
+ PrintStringAtWithWidth (gScreenDimensions.LeftColumn + 1, gScreenDimensions.TopRow + 1, gLibEmptyString, TitleColumn - gScreenDimensions.LeftColumn - 1);\r
+ PrintStringAtWithWidth (\r
+ TitleColumn,\r
+ gScreenDimensions.TopRow + 1,\r
+ TitleStr,\r
+ gScreenDimensions.RightColumn - 1 - TitleColumn\r
+ );\r
+ FreePool (TitleStr);\r
\r
- @param[in] FormData Form Data to be shown in Page\r
+ Character = BOXDRAW_UP_RIGHT;\r
+ PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.TopRow + NONE_FRONT_PAGE_HEADER_HEIGHT - 1, Character);\r
+ PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);\r
\r
-**/\r
-VOID\r
-PrintFormTitle (\r
- IN FORM_DISPLAY_ENGINE_FORM *FormData\r
- )\r
-{\r
- CHAR16 *TitleStr;\r
+ Character = BOXDRAW_UP_LEFT;\r
+ PrintCharAt ((UINTN) -1, (UINTN) -1, Character);\r
\r
- if ((gClassOfVfr & FORMSET_CLASS_PLATFORM_SETUP) != FORMSET_CLASS_PLATFORM_SETUP) { \r
- //\r
- // Only Setup Page need Title.\r
- //\r
- return;\r
+ //\r
+ // Print Bottom border line\r
+ // +------------------------------------------------------------------------------+\r
+ // ? ?\r
+ // +------------------------------------------------------------------------------+\r
+ //\r
+ Character = BOXDRAW_DOWN_RIGHT;\r
+ PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight, Character);\r
+\r
+ PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);\r
+\r
+ Character = BOXDRAW_DOWN_LEFT;\r
+ PrintCharAt ((UINTN) -1, (UINTN) -1, Character);\r
+ Character = BOXDRAW_VERTICAL;\r
+ for (Row = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight + 1;\r
+ Row <= gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 2;\r
+ Row++\r
+ ) {\r
+ PrintCharAt (gScreenDimensions.LeftColumn, Row, Character);\r
+ PrintCharAt (gScreenDimensions.RightColumn - 1, Row, Character);\r
}\r
- \r
- TitleStr = LibGetToken (FormData->FormTitle, FormData->HiiHandle);\r
- ASSERT (TitleStr != NULL);\r
- \r
- gST->ConOut->SetAttribute (gST->ConOut, TITLE_TEXT | TITLE_BACKGROUND);\r
\r
- ClearLines (\r
- gScreenDimensions.LeftColumn + 1,\r
- gScreenDimensions.RightColumn - 1,\r
- gScreenDimensions.TopRow + 1,\r
- gScreenDimensions.TopRow + 1,\r
- TITLE_TEXT | TITLE_BACKGROUND\r
- );\r
+ Character = BOXDRAW_UP_RIGHT;\r
+ PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 1, Character);\r
\r
- PrintStringAt (\r
- (gScreenDimensions.RightColumn + gScreenDimensions.LeftColumn - LibGetStringWidth (TitleStr) / 2) / 2,\r
- gScreenDimensions.TopRow + 1,\r
- TitleStr\r
- );\r
+ PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);\r
\r
- FreePool (TitleStr);\r
+ Character = BOXDRAW_UP_LEFT;\r
+ PrintCharAt ((UINTN) -1, (UINTN) -1, Character);\r
+\r
+ FreePool (Buffer);\r
}\r
\r
/**\r
IN EFI_IFR_OP_HEADER *OpCodeData\r
)\r
{\r
+ EFI_GUID * ClassGuid;\r
+ UINT8 ClassGuidNum;\r
+\r
+ ClassGuid = NULL;\r
+ ClassGuidNum = 0;\r
+\r
switch (OpCodeData->OpCode) {\r
- case EFI_IFR_GUID_OP: \r
+ case EFI_IFR_FORM_SET_OP:\r
+ //\r
+ // process the statement outside of form,if it is formset op, get its formsetguid or classguid and compared with gFrontPageFormSetGuid\r
+ //\r
+ if (CompareMem (PcdGetPtr (PcdFrontPageFormSetGuid), &((EFI_IFR_FORM_SET *) OpCodeData)->Guid, sizeof (EFI_GUID)) == 0){\r
+ gClassOfVfr = FORMSET_CLASS_FRONT_PAGE;\r
+ } else{\r
+ ClassGuidNum = (UINT8)(((EFI_IFR_FORM_SET *)OpCodeData)->Flags & 0x3);\r
+ ClassGuid = (EFI_GUID *)(VOID *)((UINT8 *)OpCodeData + sizeof (EFI_IFR_FORM_SET));\r
+ while (ClassGuidNum-- > 0){\r
+ if (CompareGuid((EFI_GUID*)PcdGetPtr (PcdFrontPageFormSetGuid),ClassGuid)){\r
+ gClassOfVfr = FORMSET_CLASS_FRONT_PAGE;\r
+ break;\r
+ }\r
+ ClassGuid ++;\r
+ }\r
+ }\r
+ break;\r
+\r
+ case EFI_IFR_GUID_OP:\r
if (CompareGuid (&gEfiIfrTianoGuid, (EFI_GUID *)((CHAR8*) OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {\r
//\r
// Tiano specific GUIDed opcodes\r
//\r
// Only in front page form set, we care about the banner data.\r
//\r
- if ((gClassOfVfr & FORMSET_CLASS_FRONT_PAGE) == FORMSET_CLASS_FRONT_PAGE) {\r
+ if (gClassOfVfr == FORMSET_CLASS_FRONT_PAGE) {\r
//\r
// Initialize Driver private data\r
//\r
gBannerData = AllocateZeroPool (sizeof (BANNER_DATA));\r
ASSERT (gBannerData != NULL);\r
}\r
- \r
+\r
CopyMem (\r
&gBannerData->Banner[((EFI_IFR_GUID_BANNER *) OpCodeData)->LineNumber][\r
((EFI_IFR_GUID_BANNER *) OpCodeData)->Alignment],\r
\r
/**\r
Process some op codes which is out side of current form.\r
- \r
+\r
@param FormData Pointer to the form data.\r
\r
@return EFI_SUCCESS Pass the statement success.\r
)\r
{\r
LIST_ENTRY *Link;\r
+ LIST_ENTRY *NestLink;\r
FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
+ FORM_DISPLAY_ENGINE_STATEMENT *NestStatement;\r
\r
Link = GetFirstNode (&FormData->StatementListOSF);\r
while (!IsNull (&FormData->StatementListOSF, Link)) {\r
Link = GetNextNode (&FormData->StatementListHead, Link);\r
\r
ProcessUserOpcode(Statement->OpCode);\r
+\r
+ NestLink = GetFirstNode (&Statement->NestStatementList);\r
+ while (!IsNull (&Statement->NestStatementList, NestLink)) {\r
+ NestStatement = FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK (NestLink);\r
+ NestLink = GetNextNode (&Statement->NestStatementList, NestLink);\r
+\r
+ ProcessUserOpcode(NestStatement->OpCode);\r
+ }\r
+\r
}\r
}\r
\r
@return EFI_INVALID_PARAMETER The input screen info is not acceptable.\r
\r
**/\r
-EFI_STATUS \r
+EFI_STATUS\r
ScreenDiemensionInfoValidate (\r
IN FORM_DISPLAY_ENGINE_FORM *FormData\r
)\r
UINTN Index;\r
\r
//\r
- // Calculate total number of Register HotKeys. \r
+ // Calculate total number of Register HotKeys.\r
//\r
Index = 0;\r
if (!IsListEmpty (&FormData->HotKeyListHead)){\r
Show all registered HotKey help strings on bottom Rows.\r
\r
@param FormData The curent input form data info.\r
+ @param SetState Set HotKey or Clear HotKey\r
\r
**/\r
VOID\r
PrintHotKeyHelpString (\r
- IN FORM_DISPLAY_ENGINE_FORM *FormData\r
+ IN FORM_DISPLAY_ENGINE_FORM *FormData,\r
+ IN BOOLEAN SetState\r
)\r
{\r
UINTN CurrentCol;\r
UINTN CurrentRow;\r
UINTN BottomRowOfHotKeyHelp;\r
+ UINTN ColumnIndexWidth;\r
UINTN ColumnWidth;\r
+ UINTN ColumnIndex;\r
UINTN Index;\r
EFI_SCREEN_DESCRIPTOR LocalScreen;\r
LIST_ENTRY *Link;\r
BROWSER_HOT_KEY *HotKey;\r
-\r
- if (IsListEmpty (&FormData->HotKeyListHead)) {\r
- return;\r
- }\r
+ CHAR16 BakChar;\r
+ CHAR16 *ColumnStr;\r
\r
CopyMem (&LocalScreen, &gScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));\r
ColumnWidth = (LocalScreen.RightColumn - LocalScreen.LeftColumn) / 3;\r
BottomRowOfHotKeyHelp = LocalScreen.BottomRow - STATUS_BAR_HEIGHT - 3;\r
+ ColumnStr = gLibEmptyString;\r
\r
//\r
- // Calculate total number of Register HotKeys. \r
+ // Calculate total number of Register HotKeys.\r
//\r
Index = 0;\r
Link = GetFirstNode (&FormData->HotKeyListHead);\r
while (!IsNull (&FormData->HotKeyListHead, Link)) {\r
HotKey = BROWSER_HOT_KEY_FROM_LINK (Link);\r
//\r
- // Help string can't exceed ColumnWidth. One Row will show three Help information. \r
- //\r
- if (StrLen (HotKey->HelpString) > ColumnWidth) {\r
- HotKey->HelpString[ColumnWidth] = L'\0';\r
- }\r
- //\r
// Calculate help information Column and Row.\r
//\r
- if ((Index % 3) != 2) {\r
- CurrentCol = LocalScreen.LeftColumn + (2 - Index % 3) * ColumnWidth;\r
+ ColumnIndex = Index % 3;\r
+ if (ColumnIndex == 0) {\r
+ CurrentCol = LocalScreen.LeftColumn + 2 * ColumnWidth;\r
+ ColumnIndexWidth = ColumnWidth - 1;\r
+ } else if (ColumnIndex == 1) {\r
+ CurrentCol = LocalScreen.LeftColumn + ColumnWidth;\r
+ ColumnIndexWidth = ColumnWidth;\r
} else {\r
- CurrentCol = LocalScreen.LeftColumn + 2;\r
+ CurrentCol = LocalScreen.LeftColumn + 2;\r
+ ColumnIndexWidth = ColumnWidth - 2;\r
}\r
CurrentRow = BottomRowOfHotKeyHelp - Index / 3;\r
+\r
+ //\r
+ // Help string can't exceed ColumnWidth. One Row will show three Help information.\r
+ //\r
+ BakChar = L'\0';\r
+ if (StrLen (HotKey->HelpString) > ColumnIndexWidth) {\r
+ BakChar = HotKey->HelpString[ColumnIndexWidth];\r
+ HotKey->HelpString[ColumnIndexWidth] = L'\0';\r
+ }\r
+\r
//\r
// Print HotKey help string on bottom Row.\r
//\r
- PrintStringAt (CurrentCol, CurrentRow, HotKey->HelpString);\r
+ if (SetState) {\r
+ ColumnStr = HotKey->HelpString;\r
+ }\r
+ PrintStringAtWithWidth (CurrentCol, CurrentRow, ColumnStr, ColumnIndexWidth);\r
\r
+ if (BakChar != L'\0') {\r
+ HotKey->HelpString[ColumnIndexWidth] = BakChar;\r
+ }\r
//\r
// Get Next Hot Key.\r
//\r
Link = GetNextNode (&FormData->HotKeyListHead, Link);\r
Index ++;\r
}\r
- \r
+\r
+ if (SetState) {\r
+ //\r
+ // Clear KeyHelp\r
+ //\r
+ CurrentRow = BottomRowOfHotKeyHelp - Index / 3;\r
+ ColumnIndex = Index % 3;\r
+ if (ColumnIndex == 0) {\r
+ CurrentCol = LocalScreen.LeftColumn + 2 * ColumnWidth;\r
+ ColumnIndexWidth = ColumnWidth - 1;\r
+ ColumnIndex ++;\r
+ PrintStringAtWithWidth (CurrentCol, CurrentRow, gLibEmptyString, ColumnIndexWidth);\r
+ }\r
+ if (ColumnIndex == 1) {\r
+ CurrentCol = LocalScreen.LeftColumn + ColumnWidth;\r
+ ColumnIndexWidth = ColumnWidth;\r
+ PrintStringAtWithWidth (CurrentCol, CurrentRow, gLibEmptyString, ColumnIndexWidth);\r
+ }\r
+ }\r
+\r
return;\r
}\r
\r
/**\r
Get step info from numeric opcode.\r
- \r
+\r
@param[in] OpCode The input numeric op code.\r
\r
@return step info for this opcode.\r
UINT64 Step;\r
\r
NumericOp = (EFI_IFR_NUMERIC *) OpCode;\r
- \r
+\r
switch (NumericOp->Flags & EFI_IFR_NUMERIC_SIZE) {\r
case EFI_IFR_NUMERIC_SIZE_1:\r
Step = NumericOp->data.u8.Step;\r
break;\r
- \r
+\r
case EFI_IFR_NUMERIC_SIZE_2:\r
Step = NumericOp->data.u16.Step;\r
break;\r
- \r
+\r
case EFI_IFR_NUMERIC_SIZE_4:\r
Step = NumericOp->data.u32.Step;\r
break;\r
- \r
+\r
case EFI_IFR_NUMERIC_SIZE_8:\r
Step = NumericOp->data.u64.Step;\r
break;\r
- \r
+\r
default:\r
Step = 0;\r
break;\r
\r
gNvUpdateMessage = LibGetToken (STRING_TOKEN (NV_UPDATE_MESSAGE), mCDLStringPackHandle);\r
gInputErrorMessage = LibGetToken (STRING_TOKEN (INPUT_ERROR_MESSAGE), mCDLStringPackHandle);\r
- \r
+\r
//\r
// SpaceBuffer;\r
//\r
\r
FreePool (gNvUpdateMessage);\r
FreePool (gInputErrorMessage);\r
- \r
+\r
FreePool (mSpaceBuffer);\r
}\r
\r
if (Status != EFI_NOT_READY) {\r
continue;\r
}\r
- \r
+\r
gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &Index);\r
}\r
return Status;\r
**/\r
UINTN\r
PrintInternal (\r
- IN UINTN Width, \r
+ IN UINTN Width,\r
IN UINTN Column,\r
IN UINTN Row,\r
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Out,\r
UINTN Index;\r
UINTN PreviousIndex;\r
UINTN Count;\r
+ UINTN TotalCount;\r
UINTN PrintWidth;\r
UINTN CharWidth;\r
\r
Index = 0;\r
PreviousIndex = 0;\r
Count = 0;\r
+ TotalCount = 0;\r
PrintWidth = 0;\r
CharWidth = 1;\r
\r
if (Buffer[Index] == 0) {\r
break;\r
}\r
- //\r
- // Null-terminate the temporary string\r
- //\r
- BackupBuffer[Index] = 0;\r
\r
//\r
// Print this out, we are about to switch widths\r
//\r
Out->OutputString (Out, &BackupBuffer[PreviousIndex]);\r
- Count += StrLen (&BackupBuffer[PreviousIndex]);\r
+ Count = StrLen (&BackupBuffer[PreviousIndex]);\r
PrintWidth += Count * CharWidth;\r
+ TotalCount += Count;\r
\r
//\r
// Preserve the current index + 1, since this is where we will start printing from next\r
// We hit the end of the string - print it\r
//\r
Out->OutputString (Out, &BackupBuffer[PreviousIndex]);\r
- Count += StrLen (&BackupBuffer[PreviousIndex]);\r
+ Count = StrLen (&BackupBuffer[PreviousIndex]);\r
PrintWidth += Count * CharWidth;\r
+ TotalCount += Count;\r
if (PrintWidth < Width) {\r
Out->Mode->Attribute = Out->Mode->Attribute & 0x7f;\r
Out->SetAttribute (Out, Out->Mode->Attribute);\r
\r
FreePool (Buffer);\r
FreePool (BackupBuffer);\r
- return Count;\r
+ return TotalCount;\r
}\r
\r
/**\r