public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH] ShellPkg: Enhance 'cls' command to change the background and foreground colors
@ 2016-09-23 16:03 Tapan Shah
  2016-09-26 20:10 ` Carsey, Jaben
  0 siblings, 1 reply; 2+ messages in thread
From: Tapan Shah @ 2016-09-23 16:03 UTC (permalink / raw)
  To: edk2-devel; +Cc: jaben.carsey, Tapan Shah

As per ECR 1416 change in UEFI Shell Specification 2.2,
enhancing 'cls' command to change the background color as well as
foreground color. Also add support to display current settings
using 'cls -sfo' command.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Tapan Shah <tapandshah@hpe.com>
---
 ShellPkg/Library/UefiShellLevel3CommandsLib/Cls.c  | 178 ++++++++++++++++-----
 .../UefiShellLevel3CommandsLib.uni                 |  58 +++++--
 2 files changed, 179 insertions(+), 57 deletions(-)

diff --git a/ShellPkg/Library/UefiShellLevel3CommandsLib/Cls.c b/ShellPkg/Library/UefiShellLevel3CommandsLib/Cls.c
index 61b9ef8..08ae96c 100644
--- a/ShellPkg/Library/UefiShellLevel3CommandsLib/Cls.c
+++ b/ShellPkg/Library/UefiShellLevel3CommandsLib/Cls.c
@@ -1,6 +1,7 @@
 /** @file
   Main file for attrib shell level 2 function.
 
+  (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
   (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
   Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved. <BR>
   This program and the accompanying materials
@@ -15,6 +16,11 @@
 
 #include "UefiShellLevel3CommandsLib.h"
 
+STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
+  {L"-sfo", TypeFlag},
+  {NULL,    TypeMax}
+  };
+
 /**
   Function for 'cls' command.
 
@@ -31,10 +37,11 @@ ShellCommandRunCls (
   EFI_STATUS    Status;
   LIST_ENTRY    *Package;
   UINTN         Background;
-  UINTN         ForeColor;
+  UINTN         Foreground;
   CHAR16        *ProblemParam;
   SHELL_STATUS  ShellStatus;
-  CONST CHAR16  *Param1;
+  CONST CHAR16  *BackColorStr;
+  CONST CHAR16  *ForeColorStr;
 
   //
   // Initialize variables
@@ -42,6 +49,7 @@ ShellCommandRunCls (
   ShellStatus   = SHELL_SUCCESS;
   ProblemParam  = NULL;
   Background    = 0;
+  Foreground    = 0;
 
   //
   // initialize the shell lib (we must be in non-auto-init...)
@@ -52,7 +60,7 @@ ShellCommandRunCls (
   //
   // parse the command line
   //
-  Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);
+  Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
   if (EFI_ERROR(Status)) {
     if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel3HiiHandle, L"cls", ProblemParam);  
@@ -67,55 +75,143 @@ ShellCommandRunCls (
     //
     if (ShellCommandLineGetFlag(Package, L"-?")) {
       ASSERT(FALSE);
+    } else if (ShellCommandLineGetFlag (Package, L"-sfo")) {
+      if (ShellCommandLineGetCount (Package) > 1) {
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle, L"cls");  
+        ShellStatus = SHELL_INVALID_PARAMETER;
+      } else {
+        Background = (gST->ConOut->Mode->Attribute >> 4) & 0x7;
+        Foreground = gST->ConOut->Mode->Attribute & 0x0F;
+        ShellPrintHiiEx (
+          -1,
+          -1,
+          NULL,
+          STRING_TOKEN (STR_CLS_OUTPUT_SFO),
+          gShellLevel3HiiHandle,
+          gST->ConOut->Mode->Attribute,
+          Foreground,
+          Background
+          );  
+      }
     } else {
       //
       // If there are 0 value parameters, clear sceen
       //
-      Param1 = ShellCommandLineGetRawValue(Package, 1);
-      if (Param1 == NULL) {
+      BackColorStr = ShellCommandLineGetRawValue (Package, 1);
+      ForeColorStr = ShellCommandLineGetRawValue (Package, 2);
+
+      if (BackColorStr == NULL && ForeColorStr == NULL) {
         //
         // clear screen
         //
         gST->ConOut->ClearScreen (gST->ConOut);
-      } else if (ShellCommandLineGetCount(Package) > 2) {
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle, L"cls");  
+      } else if (ShellCommandLineGetCount (Package) > 3) {
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle, L"cls");  
         ShellStatus = SHELL_INVALID_PARAMETER;
       } else {
-        if (ShellStrToUintn(Param1) > 7 || StrLen(Param1) > 1 || !ShellIsDecimalDigitCharacter(*Param1)) {
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellLevel3HiiHandle, L"cls", Param1);  
-          ShellStatus = SHELL_INVALID_PARAMETER;
-        } else {
-          switch (ShellStrToUintn(Param1)) {
-            case 0:
-              Background = EFI_BACKGROUND_BLACK;
-              break;
-            case 1:
-              Background = EFI_BACKGROUND_BLUE;
-              break;
-            case 2:
-              Background = EFI_BACKGROUND_GREEN;
-              break;
-            case 3:
-              Background = EFI_BACKGROUND_CYAN;
-              break;
-            case 4:
-              Background = EFI_BACKGROUND_RED;
-              break;
-            case 5:
-              Background = EFI_BACKGROUND_MAGENTA;
-              break;
-            case 6:
-              Background = EFI_BACKGROUND_BROWN;
-              break;
-            case 7:
-              Background = EFI_BACKGROUND_LIGHTGRAY;
-              break;
+        if (BackColorStr != NULL) {
+          if ((ShellStrToUintn (BackColorStr) > 7) || (StrLen (BackColorStr) > 1) || (!ShellIsDecimalDigitCharacter (*BackColorStr))) {
+            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellLevel3HiiHandle, L"cls", BackColorStr);  
+            ShellStatus = SHELL_INVALID_PARAMETER;
+          } else {
+            switch (ShellStrToUintn (BackColorStr)) {
+              case 0:
+                Background = EFI_BACKGROUND_BLACK;
+                break;
+              case 1:
+                Background = EFI_BACKGROUND_BLUE;
+                break;
+              case 2:
+                Background = EFI_BACKGROUND_GREEN;
+                break;
+              case 3:
+                Background = EFI_BACKGROUND_CYAN;
+                break;
+              case 4:
+                Background = EFI_BACKGROUND_RED;
+                break;
+              case 5:
+                Background = EFI_BACKGROUND_MAGENTA;
+                break;
+              case 6:
+                Background = EFI_BACKGROUND_BROWN;
+                break;
+              case 7:
+                Background = EFI_BACKGROUND_LIGHTGRAY;
+                break;
+            }
+
+            if (ForeColorStr != NULL) {
+              if ((ShellStrToUintn (ForeColorStr) > 15) || (StrLen (ForeColorStr) > 2) || (!ShellIsDecimalDigitCharacter (*ForeColorStr))) {
+                ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellLevel3HiiHandle, L"cls", ForeColorStr);  
+                ShellStatus = SHELL_INVALID_PARAMETER;
+              } else {
+                switch (ShellStrToUintn (ForeColorStr)) {
+                  case 0:
+                    Foreground = EFI_BLACK;
+                    break;
+                  case 1:
+                    Foreground = EFI_BLUE;
+                    break;
+                  case 2:
+                    Foreground = EFI_GREEN;
+                    break;
+                  case 3:
+                    Foreground = EFI_CYAN;
+                    break;
+                  case 4:
+                    Foreground = EFI_RED;
+                    break;
+                  case 5:
+                    Foreground = EFI_MAGENTA;
+                    break;
+                  case 6:
+                    Foreground = EFI_BROWN;
+                    break;
+                  case 7:
+                    Foreground = EFI_LIGHTGRAY;
+                    break;
+                  case 8:
+                    Foreground = EFI_DARKGRAY;
+                    break;
+                  case 9:
+                    Foreground = EFI_LIGHTBLUE;
+                    break;
+                  case 10:
+                    Foreground = EFI_LIGHTGREEN;
+                    break;
+                  case 11:
+                    Foreground = EFI_LIGHTCYAN;
+                    break;
+                  case 12:
+                    Foreground = EFI_LIGHTRED;
+                    break;
+                  case 13:
+                    Foreground = EFI_LIGHTMAGENTA;
+                    break;
+                  case 14:
+                    Foreground = EFI_YELLOW;
+                    break;
+                  case 15:
+                    Foreground = EFI_WHITE;
+                    break;
+                }
+              }
+            } else {
+              //
+              // Since foreground color is not modified, so retain 
+              // existing foreground color without any change to it.
+              //
+              Foreground = gST->ConOut->Mode->Attribute & 0x0F;
+            }
+
+            if (ShellStatus == SHELL_SUCCESS) {
+              Status = gST->ConOut->SetAttribute (gST->ConOut, (Foreground | Background) & 0x7F);
+              ASSERT_EFI_ERROR (Status);
+              Status = gST->ConOut->ClearScreen (gST->ConOut);
+              ASSERT_EFI_ERROR (Status);
+            }
           }
-          ForeColor = (~ShellStrToUintn(Param1)) & 0xF;
-          Status = gST->ConOut->SetAttribute (gST->ConOut, (ForeColor | Background) & 0x7F );
-          ASSERT_EFI_ERROR(Status);
-          Status = gST->ConOut->ClearScreen (gST->ConOut);
-          ASSERT_EFI_ERROR(Status);
         }
       }
     }
diff --git a/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.uni b/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.uni
index fc9c5d4..bbcb752 100644
--- a/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.uni
+++ b/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.uni
@@ -1,5 +1,6 @@
 // /**
 //
+// (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
 // (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
 // Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved. <BR>
 // This program and the accompanying materials
@@ -82,6 +83,7 @@
 #string STR_ALIAS_OUTPUT          #language en-US "%1c %10s:%s\r\n"
 
 #string STR_GET_MTC_OUTPUT        #language en-US "%016Lx\r\n"
+#string STR_CLS_OUTPUT_SFO        #language en-US "ConOutAttribInfo,"%d","%d","%d"\r\n"
 
 #string STR_GET_HELP_HELP         #language en-US ""
 ".TH help 0 "Displays help information from the UEFI Shell."\r\n"
@@ -201,38 +203,62 @@
 #string STR_GET_HELP_CLS          #language en-US ""
 ".TH cls 0 "clear screen"\r\n"
 ".SH NAME\r\n"
-"Clears standard output and optionally changes background color.\r\n"
+"Clears the console output and optionally changes the background and foreground color.\r\n"
 ".SH SYNOPSIS\r\n"
 " \r\n"
-"CLS [color]\r\n"
+"CLS [background] [foreground] | [-sfo]\r\n"
 ".SH OPTIONS\r\n"
 " \r\n"
-"  color - Sets a new background color:\r\n"
-"            0 - Black\r\n"
-"            1 - Blue\r\n"
-"            2 - Green\r\n"
-"            3 - Cyan\r\n"
-"            4 - Red\r\n"
-"            5 - Magenta\r\n"
-"            6 - Yellow\r\n"
-"            7 - Light gray\r\n"
+"  background - Sets a new background color:\r\n"
+"               0 - Black\r\n"
+"               1 - Blue\r\n"
+"               2 - Green\r\n"
+"               3 - Cyan\r\n"
+"               4 - Red\r\n"
+"               5 - Magenta\r\n"
+"               6 - Yellow\r\n"
+"               7 - Light gray\r\n"
+"  foreground - Sets a new foreground color:\r\n"
+"               0  - Black\r\n"
+"               1  - Blue\r\n"
+"               2  - Green\r\n"
+"               3  - Cyan\r\n"
+"               4  - Red\r\n"
+"               5  - Magenta\r\n"
+"               6  - Yellow\r\n"
+"               7  - Light gray\r\n"
+"               8  - Dark gray\r\n"
+"               9  - Light blue\r\n"
+"               10 - Light green\r\n"
+"               11 - Light cyan\r\n"
+"               12 - Light red\r\n"
+"               13 - Light magenta\r\n"
+"               14 - Yellow\r\n"
+"               15 - White\r\n"
+"  -sfo       - Displays current console color settings in Standard Format\r\n"
+"               Output.\r\n"
 ".SH DESCRIPTION\r\n"
 " \r\n"
 "NOTES:\r\n"
 "  1. This command clears the standard output device with an optional\r\n"
-"     background color attribute. If a color is not specified, then the\r\n"
-"     background color does not change.\r\n"
+"     background and foreground color attribute.\r\n"
+"  2. If background color is not specified, or if background and foreground\r\n"
+"     colors are not specified, then the colors do not change.\r\n"
+"  3. When -sfo flag is used, console output is not cleared and instead it\r\n"
+"     displays current console foreground and background attribute settings.\r\n"
 ".SH EXAMPLES\r\n"
 " \r\n"
 "EXAMPLES:\r\n"
-"  * To clear standard output without changing the background color:\r\n"
+"  * To clear standard output without changing the background or foreground\r\n"
+"    color:\r\n"
 "    fs0:\> cls\r\n"
 " \r\n"
 "  * To clear standard output and change the background color to cyan:\r\n"
 "    fs0:\> cls 3\r\n"
 " \r\n"
-"  * To clear standard output and change the background to the default color:\r\n"
-"    fs0:\> cls 0\r\n"
+"  * To clear standard output and change the background to black and foreground\r\n"
+"    to white:\r\n"
+"    fs0:\> cls 0 15\r\n"
 ".SH RETURNVALUES\r\n"
 " \r\n"
 "RETURN VALUES:\r\n"
-- 
1.9.5.msysgit.0



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] ShellPkg: Enhance 'cls' command to change the background and foreground colors
  2016-09-23 16:03 [PATCH] ShellPkg: Enhance 'cls' command to change the background and foreground colors Tapan Shah
@ 2016-09-26 20:10 ` Carsey, Jaben
  0 siblings, 0 replies; 2+ messages in thread
From: Carsey, Jaben @ 2016-09-26 20:10 UTC (permalink / raw)
  To: Tapan Shah, edk2-devel@lists.01.org; +Cc: Carsey, Jaben

Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
And pushing now.

> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of
> Tapan Shah
> Sent: Friday, September 23, 2016 9:03 AM
> To: edk2-devel@lists.01.org
> Cc: Carsey, Jaben <jaben.carsey@intel.com>
> Subject: [edk2] [PATCH] ShellPkg: Enhance 'cls' command to change the
> background and foreground colors
> Importance: High
> 
> As per ECR 1416 change in UEFI Shell Specification 2.2,
> enhancing 'cls' command to change the background color as well as
> foreground color. Also add support to display current settings
> using 'cls -sfo' command.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Tapan Shah <tapandshah@hpe.com>
> ---
>  ShellPkg/Library/UefiShellLevel3CommandsLib/Cls.c  | 178
> ++++++++++++++++-----
>  .../UefiShellLevel3CommandsLib.uni                 |  58 +++++--
>  2 files changed, 179 insertions(+), 57 deletions(-)
> 
> diff --git a/ShellPkg/Library/UefiShellLevel3CommandsLib/Cls.c
> b/ShellPkg/Library/UefiShellLevel3CommandsLib/Cls.c
> index 61b9ef8..08ae96c 100644
> --- a/ShellPkg/Library/UefiShellLevel3CommandsLib/Cls.c
> +++ b/ShellPkg/Library/UefiShellLevel3CommandsLib/Cls.c
> @@ -1,6 +1,7 @@
>  /** @file
>    Main file for attrib shell level 2 function.
> 
> +  (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
>    (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
>    Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved. <BR>
>    This program and the accompanying materials
> @@ -15,6 +16,11 @@
> 
>  #include "UefiShellLevel3CommandsLib.h"
> 
> +STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
> +  {L"-sfo", TypeFlag},
> +  {NULL,    TypeMax}
> +  };
> +
>  /**
>    Function for 'cls' command.
> 
> @@ -31,10 +37,11 @@ ShellCommandRunCls (
>    EFI_STATUS    Status;
>    LIST_ENTRY    *Package;
>    UINTN         Background;
> -  UINTN         ForeColor;
> +  UINTN         Foreground;
>    CHAR16        *ProblemParam;
>    SHELL_STATUS  ShellStatus;
> -  CONST CHAR16  *Param1;
> +  CONST CHAR16  *BackColorStr;
> +  CONST CHAR16  *ForeColorStr;
> 
>    //
>    // Initialize variables
> @@ -42,6 +49,7 @@ ShellCommandRunCls (
>    ShellStatus   = SHELL_SUCCESS;
>    ProblemParam  = NULL;
>    Background    = 0;
> +  Foreground    = 0;
> 
>    //
>    // initialize the shell lib (we must be in non-auto-init...)
> @@ -52,7 +60,7 @@ ShellCommandRunCls (
>    //
>    // parse the command line
>    //
> -  Status = ShellCommandLineParse (EmptyParamList, &Package,
> &ProblemParam, TRUE);
> +  Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam,
> TRUE);
>    if (EFI_ERROR(Status)) {
>      if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
>        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM),
> gShellLevel3HiiHandle, L"cls", ProblemParam);
> @@ -67,55 +75,143 @@ ShellCommandRunCls (
>      //
>      if (ShellCommandLineGetFlag(Package, L"-?")) {
>        ASSERT(FALSE);
> +    } else if (ShellCommandLineGetFlag (Package, L"-sfo")) {
> +      if (ShellCommandLineGetCount (Package) > 1) {
> +        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY),
> gShellLevel3HiiHandle, L"cls");
> +        ShellStatus = SHELL_INVALID_PARAMETER;
> +      } else {
> +        Background = (gST->ConOut->Mode->Attribute >> 4) & 0x7;
> +        Foreground = gST->ConOut->Mode->Attribute & 0x0F;
> +        ShellPrintHiiEx (
> +          -1,
> +          -1,
> +          NULL,
> +          STRING_TOKEN (STR_CLS_OUTPUT_SFO),
> +          gShellLevel3HiiHandle,
> +          gST->ConOut->Mode->Attribute,
> +          Foreground,
> +          Background
> +          );
> +      }
>      } else {
>        //
>        // If there are 0 value parameters, clear sceen
>        //
> -      Param1 = ShellCommandLineGetRawValue(Package, 1);
> -      if (Param1 == NULL) {
> +      BackColorStr = ShellCommandLineGetRawValue (Package, 1);
> +      ForeColorStr = ShellCommandLineGetRawValue (Package, 2);
> +
> +      if (BackColorStr == NULL && ForeColorStr == NULL) {
>          //
>          // clear screen
>          //
>          gST->ConOut->ClearScreen (gST->ConOut);
> -      } else if (ShellCommandLineGetCount(Package) > 2) {
> -        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY),
> gShellLevel3HiiHandle, L"cls");
> +      } else if (ShellCommandLineGetCount (Package) > 3) {
> +        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY),
> gShellLevel3HiiHandle, L"cls");
>          ShellStatus = SHELL_INVALID_PARAMETER;
>        } else {
> -        if (ShellStrToUintn(Param1) > 7 || StrLen(Param1) > 1 ||
> !ShellIsDecimalDigitCharacter(*Param1)) {
> -          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV),
> gShellLevel3HiiHandle, L"cls", Param1);
> -          ShellStatus = SHELL_INVALID_PARAMETER;
> -        } else {
> -          switch (ShellStrToUintn(Param1)) {
> -            case 0:
> -              Background = EFI_BACKGROUND_BLACK;
> -              break;
> -            case 1:
> -              Background = EFI_BACKGROUND_BLUE;
> -              break;
> -            case 2:
> -              Background = EFI_BACKGROUND_GREEN;
> -              break;
> -            case 3:
> -              Background = EFI_BACKGROUND_CYAN;
> -              break;
> -            case 4:
> -              Background = EFI_BACKGROUND_RED;
> -              break;
> -            case 5:
> -              Background = EFI_BACKGROUND_MAGENTA;
> -              break;
> -            case 6:
> -              Background = EFI_BACKGROUND_BROWN;
> -              break;
> -            case 7:
> -              Background = EFI_BACKGROUND_LIGHTGRAY;
> -              break;
> +        if (BackColorStr != NULL) {
> +          if ((ShellStrToUintn (BackColorStr) > 7) || (StrLen (BackColorStr) > 1) ||
> (!ShellIsDecimalDigitCharacter (*BackColorStr))) {
> +            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_GEN_PARAM_INV), gShellLevel3HiiHandle, L"cls", BackColorStr);
> +            ShellStatus = SHELL_INVALID_PARAMETER;
> +          } else {
> +            switch (ShellStrToUintn (BackColorStr)) {
> +              case 0:
> +                Background = EFI_BACKGROUND_BLACK;
> +                break;
> +              case 1:
> +                Background = EFI_BACKGROUND_BLUE;
> +                break;
> +              case 2:
> +                Background = EFI_BACKGROUND_GREEN;
> +                break;
> +              case 3:
> +                Background = EFI_BACKGROUND_CYAN;
> +                break;
> +              case 4:
> +                Background = EFI_BACKGROUND_RED;
> +                break;
> +              case 5:
> +                Background = EFI_BACKGROUND_MAGENTA;
> +                break;
> +              case 6:
> +                Background = EFI_BACKGROUND_BROWN;
> +                break;
> +              case 7:
> +                Background = EFI_BACKGROUND_LIGHTGRAY;
> +                break;
> +            }
> +
> +            if (ForeColorStr != NULL) {
> +              if ((ShellStrToUintn (ForeColorStr) > 15) || (StrLen (ForeColorStr) > 2)
> || (!ShellIsDecimalDigitCharacter (*ForeColorStr))) {
> +                ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_GEN_PARAM_INV), gShellLevel3HiiHandle, L"cls", ForeColorStr);
> +                ShellStatus = SHELL_INVALID_PARAMETER;
> +              } else {
> +                switch (ShellStrToUintn (ForeColorStr)) {
> +                  case 0:
> +                    Foreground = EFI_BLACK;
> +                    break;
> +                  case 1:
> +                    Foreground = EFI_BLUE;
> +                    break;
> +                  case 2:
> +                    Foreground = EFI_GREEN;
> +                    break;
> +                  case 3:
> +                    Foreground = EFI_CYAN;
> +                    break;
> +                  case 4:
> +                    Foreground = EFI_RED;
> +                    break;
> +                  case 5:
> +                    Foreground = EFI_MAGENTA;
> +                    break;
> +                  case 6:
> +                    Foreground = EFI_BROWN;
> +                    break;
> +                  case 7:
> +                    Foreground = EFI_LIGHTGRAY;
> +                    break;
> +                  case 8:
> +                    Foreground = EFI_DARKGRAY;
> +                    break;
> +                  case 9:
> +                    Foreground = EFI_LIGHTBLUE;
> +                    break;
> +                  case 10:
> +                    Foreground = EFI_LIGHTGREEN;
> +                    break;
> +                  case 11:
> +                    Foreground = EFI_LIGHTCYAN;
> +                    break;
> +                  case 12:
> +                    Foreground = EFI_LIGHTRED;
> +                    break;
> +                  case 13:
> +                    Foreground = EFI_LIGHTMAGENTA;
> +                    break;
> +                  case 14:
> +                    Foreground = EFI_YELLOW;
> +                    break;
> +                  case 15:
> +                    Foreground = EFI_WHITE;
> +                    break;
> +                }
> +              }
> +            } else {
> +              //
> +              // Since foreground color is not modified, so retain
> +              // existing foreground color without any change to it.
> +              //
> +              Foreground = gST->ConOut->Mode->Attribute & 0x0F;
> +            }
> +
> +            if (ShellStatus == SHELL_SUCCESS) {
> +              Status = gST->ConOut->SetAttribute (gST->ConOut, (Foreground |
> Background) & 0x7F);
> +              ASSERT_EFI_ERROR (Status);
> +              Status = gST->ConOut->ClearScreen (gST->ConOut);
> +              ASSERT_EFI_ERROR (Status);
> +            }
>            }
> -          ForeColor = (~ShellStrToUintn(Param1)) & 0xF;
> -          Status = gST->ConOut->SetAttribute (gST->ConOut, (ForeColor |
> Background) & 0x7F );
> -          ASSERT_EFI_ERROR(Status);
> -          Status = gST->ConOut->ClearScreen (gST->ConOut);
> -          ASSERT_EFI_ERROR(Status);
>          }
>        }
>      }
> diff --git
> a/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3Commands
> Lib.uni
> b/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3Commands
> Lib.uni
> index fc9c5d4..bbcb752 100644
> ---
> a/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3Commands
> Lib.uni
> +++
> b/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3Commands
> Lib.uni
> @@ -1,5 +1,6 @@
>  // /**
>  //
> +// (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
>  // (C) Copyright 2013-2015 Hewlett-Packard Development Company,
> L.P.<BR>
>  // Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved. <BR>
>  // This program and the accompanying materials
> @@ -82,6 +83,7 @@
>  #string STR_ALIAS_OUTPUT          #language en-US "%1c %10s:%s\r\n"
> 
>  #string STR_GET_MTC_OUTPUT        #language en-US "%016Lx\r\n"
> +#string STR_CLS_OUTPUT_SFO        #language en-US
> "ConOutAttribInfo,"%d","%d","%d"\r\n"
> 
>  #string STR_GET_HELP_HELP         #language en-US ""
>  ".TH help 0 "Displays help information from the UEFI Shell."\r\n"
> @@ -201,38 +203,62 @@
>  #string STR_GET_HELP_CLS          #language en-US ""
>  ".TH cls 0 "clear screen"\r\n"
>  ".SH NAME\r\n"
> -"Clears standard output and optionally changes background color.\r\n"
> +"Clears the console output and optionally changes the background and
> foreground color.\r\n"
>  ".SH SYNOPSIS\r\n"
>  " \r\n"
> -"CLS [color]\r\n"
> +"CLS [background] [foreground] | [-sfo]\r\n"
>  ".SH OPTIONS\r\n"
>  " \r\n"
> -"  color - Sets a new background color:\r\n"
> -"            0 - Black\r\n"
> -"            1 - Blue\r\n"
> -"            2 - Green\r\n"
> -"            3 - Cyan\r\n"
> -"            4 - Red\r\n"
> -"            5 - Magenta\r\n"
> -"            6 - Yellow\r\n"
> -"            7 - Light gray\r\n"
> +"  background - Sets a new background color:\r\n"
> +"               0 - Black\r\n"
> +"               1 - Blue\r\n"
> +"               2 - Green\r\n"
> +"               3 - Cyan\r\n"
> +"               4 - Red\r\n"
> +"               5 - Magenta\r\n"
> +"               6 - Yellow\r\n"
> +"               7 - Light gray\r\n"
> +"  foreground - Sets a new foreground color:\r\n"
> +"               0  - Black\r\n"
> +"               1  - Blue\r\n"
> +"               2  - Green\r\n"
> +"               3  - Cyan\r\n"
> +"               4  - Red\r\n"
> +"               5  - Magenta\r\n"
> +"               6  - Yellow\r\n"
> +"               7  - Light gray\r\n"
> +"               8  - Dark gray\r\n"
> +"               9  - Light blue\r\n"
> +"               10 - Light green\r\n"
> +"               11 - Light cyan\r\n"
> +"               12 - Light red\r\n"
> +"               13 - Light magenta\r\n"
> +"               14 - Yellow\r\n"
> +"               15 - White\r\n"
> +"  -sfo       - Displays current console color settings in Standard Format\r\n"
> +"               Output.\r\n"
>  ".SH DESCRIPTION\r\n"
>  " \r\n"
>  "NOTES:\r\n"
>  "  1. This command clears the standard output device with an optional\r\n"
> -"     background color attribute. If a color is not specified, then the\r\n"
> -"     background color does not change.\r\n"
> +"     background and foreground color attribute.\r\n"
> +"  2. If background color is not specified, or if background and
> foreground\r\n"
> +"     colors are not specified, then the colors do not change.\r\n"
> +"  3. When -sfo flag is used, console output is not cleared and instead it\r\n"
> +"     displays current console foreground and background attribute
> settings.\r\n"
>  ".SH EXAMPLES\r\n"
>  " \r\n"
>  "EXAMPLES:\r\n"
> -"  * To clear standard output without changing the background color:\r\n"
> +"  * To clear standard output without changing the background or
> foreground\r\n"
> +"    color:\r\n"
>  "    fs0:\> cls\r\n"
>  " \r\n"
>  "  * To clear standard output and change the background color to cyan:\r\n"
>  "    fs0:\> cls 3\r\n"
>  " \r\n"
> -"  * To clear standard output and change the background to the default
> color:\r\n"
> -"    fs0:\> cls 0\r\n"
> +"  * To clear standard output and change the background to black and
> foreground\r\n"
> +"    to white:\r\n"
> +"    fs0:\> cls 0 15\r\n"
>  ".SH RETURNVALUES\r\n"
>  " \r\n"
>  "RETURN VALUES:\r\n"
> --
> 1.9.5.msysgit.0
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-09-26 20:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-23 16:03 [PATCH] ShellPkg: Enhance 'cls' command to change the background and foreground colors Tapan Shah
2016-09-26 20:10 ` Carsey, Jaben

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox