ShellPkg: Fix calls to SimpleTextOut->SetAttribute to not use reserved bits

As the shell inverts foreground and background it needs to be sure that it properly masks off the reserved bits and this is important since the foreground and background are not the same numbers of bits.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jaben Carsey <Jaben.carsey@intel.com>
Reviewed-by: Tapan Shah <tapandshah@hp.com>
Reviewed-by: Erik Bjorge <erik.c.bjorge@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15681 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Jaben Carsey 2014-07-25 18:46:23 +00:00 committed by jcarsey
parent 6cb9566f26
commit 17e59b3346
6 changed files with 31 additions and 31 deletions

View File

@ -301,8 +301,8 @@ FileBufferRestoreMousePosition (
// //
Orig = MainEditor.ColorAttributes; Orig = MainEditor.ColorAttributes;
New.Data = 0; New.Data = 0;
New.Colors.Foreground = Orig.Colors.Background; New.Colors.Foreground = Orig.Colors.Background & 0xF;
New.Colors.Background = Orig.Colors.Foreground; New.Colors.Background = Orig.Colors.Foreground & 0x7;
// //
// clear the old mouse position // clear the old mouse position
@ -343,7 +343,7 @@ FileBufferRestoreMousePosition (
// //
// set the new mouse position // set the new mouse position
// //
gST->ConOut->SetAttribute (gST->ConOut, New.Data); gST->ConOut->SetAttribute (gST->ConOut, New.Data & 0x7F);
// //
// clear the old mouse position // clear the old mouse position

View File

@ -1,7 +1,7 @@
/** @file /** @file
Implements inputbar interface functions. Implements inputbar interface functions.
Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved. <BR> Copyright (c) 2005 - 2014, Intel Corporation. All rights reserved. <BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -103,7 +103,7 @@ InputBarPrintInput (
typedef struct { typedef struct {
UINT32 Foreground : 4; UINT32 Foreground : 4;
UINT32 Background : 4; UINT32 Background : 3;
} INPUT_BAR_COLOR_ATTRIBUTES; } INPUT_BAR_COLOR_ATTRIBUTES;
typedef union { typedef union {
@ -150,10 +150,10 @@ InputBarRefresh (
CursorRow = gST->ConOut->Mode->CursorRow; CursorRow = gST->ConOut->Mode->CursorRow;
Orig.Data = gST->ConOut->Mode->Attribute; Orig.Data = gST->ConOut->Mode->Attribute;
New.Data = 0; New.Data = 0;
New.Colors.Foreground = Orig.Colors.Background; New.Colors.Foreground = Orig.Colors.Background & 0xF;
New.Colors.Background = Orig.Colors.Foreground; New.Colors.Background = Orig.Colors.Foreground & 0x7;
gST->ConOut->SetAttribute (gST->ConOut, New.Data); gST->ConOut->SetAttribute (gST->ConOut, New.Data & 0x7F);
// //
// clear input bar // clear input bar

View File

@ -1,7 +1,7 @@
/** @file /** @file
Implements statusbar interface functions. Implements statusbar interface functions.
Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved. <BR> Copyright (c) 2005 - 2014, Intel Corporation. All rights reserved. <BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -62,7 +62,7 @@ StatusBarCleanup (
typedef struct { typedef struct {
UINT32 Foreground : 4; UINT32 Foreground : 4;
UINT32 Background : 4; UINT32 Background : 3;
} STATUS_BAR_COLOR_ATTRIBUTES; } STATUS_BAR_COLOR_ATTRIBUTES;
typedef union { typedef union {
@ -112,11 +112,11 @@ StatusBarRefresh (
// //
Orig.Data = gST->ConOut->Mode->Attribute; Orig.Data = gST->ConOut->Mode->Attribute;
New.Data = 0; New.Data = 0;
New.Colors.Foreground = Orig.Colors.Background; New.Colors.Foreground = Orig.Colors.Background & 0xF;
New.Colors.Background = Orig.Colors.Foreground; New.Colors.Background = Orig.Colors.Foreground & 0x7;
gST->ConOut->EnableCursor (gST->ConOut, FALSE); gST->ConOut->EnableCursor (gST->ConOut, FALSE);
gST->ConOut->SetAttribute (gST->ConOut, New.Data); gST->ConOut->SetAttribute (gST->ConOut, New.Data & 0x7F);
// //
// clear status bar // clear status bar

View File

@ -2,7 +2,7 @@
Implements titlebar interface functions. Implements titlebar interface functions.
Copyright (c) 2013, Hewlett-Packard Development Company, L.P. Copyright (c) 2013, Hewlett-Packard Development Company, L.P.
Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved. <BR> Copyright (c) 2005 - 2014, Intel Corporation. All rights reserved. <BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -109,10 +109,10 @@ MainTitleBarRefresh (
// //
Orig.Data = gST->ConOut->Mode->Attribute; Orig.Data = gST->ConOut->Mode->Attribute;
New.Data = 0; New.Data = 0;
New.Colors.Foreground = Orig.Colors.Background; New.Colors.Foreground = Orig.Colors.Background & 0xF;
New.Colors.Background = Orig.Colors.Foreground; New.Colors.Background = Orig.Colors.Foreground & 0x7;
gST->ConOut->SetAttribute (gST->ConOut, New.Data); gST->ConOut->SetAttribute (gST->ConOut, New.Data & 0x7F);
// //
// clear the title line // clear the title line

View File

@ -2,7 +2,7 @@
Defines HBufferImage - the view of the file that is visible at any point, Defines HBufferImage - the view of the file that is visible at any point,
as well as the event handlers for editing the file as well as the event handlers for editing the file
Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved. <BR> Copyright (c) 2005 - 2014, Intel Corporation. All rights reserved. <BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -318,9 +318,9 @@ HBufferImagePrintLine (
} }
if (BeNewColor) { if (BeNewColor) {
gST->ConOut->SetAttribute (gST->ConOut, New.Data); gST->ConOut->SetAttribute (gST->ConOut, New.Data & 0x7F);
} else { } else {
gST->ConOut->SetAttribute (gST->ConOut, Orig.Data); gST->ConOut->SetAttribute (gST->ConOut, Orig.Data & 0x7F);
} }
Pos = 10 + (Index * 3); Pos = 10 + (Index * 3);
@ -337,7 +337,7 @@ HBufferImagePrintLine (
} }
gST->ConOut->SetAttribute (gST->ConOut, Orig.Data); gST->ConOut->SetAttribute (gST->ConOut, Orig.Data & 0x7F);
while (Index < 0x08) { while (Index < 0x08) {
Pos = 10 + (Index * 3); Pos = 10 + (Index * 3);
ShellPrintEx ((INT32)Pos - 1, (INT32)Row - 1, L" "); ShellPrintEx ((INT32)Pos - 1, (INT32)Row - 1, L" ");
@ -355,9 +355,9 @@ HBufferImagePrintLine (
} }
if (BeNewColor) { if (BeNewColor) {
gST->ConOut->SetAttribute (gST->ConOut, New.Data); gST->ConOut->SetAttribute (gST->ConOut, New.Data & 0x7F);
} else { } else {
gST->ConOut->SetAttribute (gST->ConOut, Orig.Data); gST->ConOut->SetAttribute (gST->ConOut, Orig.Data & 0x7F);
} }
Pos = 10 + (Index * 3) + 1; Pos = 10 + (Index * 3) + 1;
@ -370,7 +370,7 @@ HBufferImagePrintLine (
Index++; Index++;
} }
gST->ConOut->SetAttribute (gST->ConOut, Orig.Data); gST->ConOut->SetAttribute (gST->ConOut, Orig.Data & 0x7F);
while (Index < 0x10) { while (Index < 0x10) {
Pos = 10 + (Index * 3) + 1; Pos = 10 + (Index * 3) + 1;
ShellPrintEx ((INT32)Pos - 1, (INT32)Row - 1, L" "); ShellPrintEx ((INT32)Pos - 1, (INT32)Row - 1, L" ");
@ -379,7 +379,7 @@ HBufferImagePrintLine (
// //
// restore the original color // restore the original color
// //
gST->ConOut->SetAttribute (gST->ConOut, Orig.Data); gST->ConOut->SetAttribute (gST->ConOut, Orig.Data & 0x7F);
// //
// PRINT the buffer content // PRINT the buffer content
@ -581,8 +581,8 @@ HBufferImageRestoreMousePosition (
// //
Orig = HMainEditor.ColorAttributes; Orig = HMainEditor.ColorAttributes;
New.Data = 0; New.Data = 0;
New.Colors.Foreground = Orig.Colors.Background; New.Colors.Foreground = Orig.Colors.Background & 0xF;
New.Colors.Background = Orig.Colors.Foreground; New.Colors.Background = Orig.Colors.Foreground & 0x7;
// //
// if in selected area, // if in selected area,
@ -594,7 +594,7 @@ HBufferImageRestoreMousePosition (
)) { )) {
gST->ConOut->SetAttribute (gST->ConOut, Orig.Data); gST->ConOut->SetAttribute (gST->ConOut, Orig.Data);
} else { } else {
gST->ConOut->SetAttribute (gST->ConOut, New.Data); gST->ConOut->SetAttribute (gST->ConOut, New.Data & 0x7F);
} }
// //
// clear the old mouse position // clear the old mouse position
@ -646,7 +646,7 @@ HBufferImageRestoreMousePosition (
HBufferImage.MousePosition.Row, HBufferImage.MousePosition.Row,
HBufferImage.MousePosition.Column HBufferImage.MousePosition.Column
)) { )) {
gST->ConOut->SetAttribute (gST->ConOut, New.Data); gST->ConOut->SetAttribute (gST->ConOut, New.Data & 0x7F);
} else { } else {
gST->ConOut->SetAttribute (gST->ConOut, Orig.Data); gST->ConOut->SetAttribute (gST->ConOut, Orig.Data);
} }

View File

@ -1,7 +1,7 @@
/** @file /** @file
Main file for attrib shell level 2 function. Main file for attrib shell level 2 function.
Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved. <BR> Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved. <BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -111,7 +111,7 @@ ShellCommandRunCls (
break; break;
} }
ForeColor = (~ShellStrToUintn(Param1)) & 0xF; ForeColor = (~ShellStrToUintn(Param1)) & 0xF;
Status = gST->ConOut->SetAttribute (gST->ConOut, ForeColor | Background); Status = gST->ConOut->SetAttribute (gST->ConOut, (ForeColor | Background) & 0x7F );
ASSERT_EFI_ERROR(Status); ASSERT_EFI_ERROR(Status);
Status = gST->ConOut->ClearScreen (gST->ConOut); Status = gST->ConOut->ClearScreen (gST->ConOut);
ASSERT_EFI_ERROR(Status); ASSERT_EFI_ERROR(Status);