ShellPkg: fix ShellPrint-functions to allow for escape character to prevent attribute changes.

This allows for the editors to function easily.

signed-off-by: jcarsey
reviewed-by: kidzyoung

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12187 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jcarsey 2011-08-23 15:34:23 +00:00
parent d159ab9538
commit 5d46f17ba7
1 changed files with 33 additions and 25 deletions

View File

@ -2674,32 +2674,40 @@ InternalShellPrintWorker(
// update the attribute
//
if (ResumeLocation != NULL) {
switch (*(ResumeLocation+1)) {
case (L'N'):
gST->ConOut->SetAttribute(gST->ConOut, OriginalAttribute);
break;
case (L'E'):
gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR(EFI_YELLOW, ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)));
break;
case (L'H'):
gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR(EFI_WHITE, ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)));
break;
case (L'B'):
gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR(EFI_BLUE, ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)));
break;
case (L'V'):
gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR(EFI_GREEN, ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)));
break;
default:
//
// Print a simple '%' symbol
//
Status = InternalPrintTo(L"%");
if (EFI_ERROR(Status)) {
if (*(ResumeLocation-1) == L'^') {
//
// Print a simple '%' symbol
//
Status = InternalPrintTo(L"%");
ResumeLocation = ResumeLocation - 1;
} else {
switch (*(ResumeLocation+1)) {
case (L'N'):
gST->ConOut->SetAttribute(gST->ConOut, OriginalAttribute);
break;
}
ResumeLocation = ResumeLocation - 1;
break;
case (L'E'):
gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR(EFI_YELLOW, ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)));
break;
case (L'H'):
gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR(EFI_WHITE, ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)));
break;
case (L'B'):
gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR(EFI_BLUE, ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)));
break;
case (L'V'):
gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR(EFI_GREEN, ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)));
break;
default:
//
// Print a simple '%' symbol
//
Status = InternalPrintTo(L"%");
if (EFI_ERROR(Status)) {
break;
}
ResumeLocation = ResumeLocation - 1;
break;
}
}
} else {
//