]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Fixes for shell application launch, argument handling, and version output:
authorChris Phillips <chrisp@hp.com>
Fri, 18 Oct 2013 15:49:23 +0000 (15:49 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 18 Oct 2013 15:49:23 +0000 (15:49 +0000)
- Fixes shell application launch version output to match ‘ver’ command, as specified by the UEFI Shell spec.
- Adds PcdShellSupplier for <shell-supplier-specific-data> line of version output.  Defaulted to “EDK II”.
- Display only 1 startup.nsh countdown line per second instead of 10 per second.
- Fix issue where command line is just 1 or more “ “ characters and displayed garbage.
- Fix for @echo –off and @echo –on to not restore echo state

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chris Phillips <chrisp@hp.com>
reviewed-by: Jaben Carsey <Jaben.Carsey@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14784 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Application/Shell/Shell.c
ShellPkg/Application/Shell/Shell.inf
ShellPkg/Application/Shell/Shell.uni
ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf
ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.uni
ShellPkg/Library/UefiShellLevel3CommandsLib/Ver.c
ShellPkg/ShellPkg.dec

index 3019c7d4101eca1225462b990f9568cf437754de..e5a648833d4d635fa6a3126708811ed03b2340ae 100644 (file)
@@ -297,11 +297,28 @@ UefiMain (
         0,\r
         gST->ConOut->Mode->CursorRow,\r
         NULL,\r
-        STRING_TOKEN (STR_VER_OUTPUT_MAIN),\r
+        STRING_TOKEN (STR_VER_OUTPUT_MAIN_SHELL),\r
         ShellInfoObject.HiiHandle,\r
         SupportLevel[PcdGet8(PcdShellSupportLevel)],\r
         gEfiShellProtocol->MajorVersion,\r
-        gEfiShellProtocol->MinorVersion,\r
+        gEfiShellProtocol->MinorVersion\r
+       );\r
+\r
+      ShellPrintHiiEx (\r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN (STR_VER_OUTPUT_MAIN_SUPPLIER),\r
+        ShellInfoObject.HiiHandle,\r
+        (CHAR16 *) PcdGetPtr (PcdShellSupplier)\r
+       );\r
+\r
+      ShellPrintHiiEx (\r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN (STR_VER_OUTPUT_MAIN_UEFI),\r
+        ShellInfoObject.HiiHandle,\r
         (gST->Hdr.Revision&0xffff0000)>>16,\r
         (gST->Hdr.Revision&0x0000ffff),\r
         gST->FirmwareVendor,\r
@@ -840,12 +857,12 @@ DoStartupScript(
   //\r
   // print out our warning and see if they press a key\r
   //\r
-  for ( Status = EFI_UNSUPPORTED, Delay = ShellInfoObject.ShellInitSettings.Delay * 10\r
+  for ( Status = EFI_UNSUPPORTED, Delay = ShellInfoObject.ShellInitSettings.Delay\r
       ; Delay != 0 && EFI_ERROR(Status)\r
       ; Delay--\r
      ){\r
-    ShellPrintHiiEx(0, gST->ConOut->Mode->CursorRow, NULL, STRING_TOKEN (STR_SHELL_STARTUP_QUESTION), ShellInfoObject.HiiHandle, Delay/10);\r
-    gBS->Stall (100000);\r
+    ShellPrintHiiEx(0, gST->ConOut->Mode->CursorRow, NULL, STRING_TOKEN (STR_SHELL_STARTUP_QUESTION), ShellInfoObject.HiiHandle, Delay);\r
+    gBS->Stall (1000000);\r
     if (!ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleIn) {\r
       Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
     }\r
@@ -1396,13 +1413,32 @@ RunCommand(
   if (CleanOriginal == NULL) {\r
     return (EFI_OUT_OF_RESOURCES);\r
   }\r
-  while (CleanOriginal[StrLen(CleanOriginal)-1] == L' ') {\r
-    CleanOriginal[StrLen(CleanOriginal)-1] = CHAR_NULL;\r
-  }\r
+\r
+  //\r
+  // Remove any spaces at the beginning of the string.\r
+  //\r
   while (CleanOriginal[0] == L' ') {\r
     CopyMem(CleanOriginal, CleanOriginal+1, StrSize(CleanOriginal) - sizeof(CleanOriginal[0]));\r
   }\r
 \r
+  //\r
+  // Handle case that passed in command line is just 1 or more " " characters.\r
+  //\r
+  if (StrLen (CleanOriginal) == 0) {\r
+    if (CleanOriginal != NULL) {\r
+      FreePool(CleanOriginal);\r
+      CleanOriginal = NULL;\r
+    }\r
+    return (EFI_SUCCESS);\r
+  }\r
+\r
+  //\r
+  // Remove any spaces at the end of the string.\r
+  //\r
+  while (CleanOriginal[StrLen(CleanOriginal)-1] == L' ') {\r
+    CleanOriginal[StrLen(CleanOriginal)-1] = CHAR_NULL;\r
+  }\r
+\r
   CommandName = NULL;\r
   if (StrStr(CleanOriginal, L" ") == NULL){\r
     StrnCatGrow(&CommandName, NULL, CleanOriginal, 0);\r
@@ -1892,9 +1928,15 @@ RunScriptFileHandle (
             Status = RunCommand(CommandLine3+1);\r
 \r
             //\r
-            // Now restore the pre-'@' echo state.\r
+            // If command was "@echo -off" or "@echo -on" then don't restore echo state\r
             //\r
-            ShellCommandSetEchoState(PreCommandEchoState);\r
+            if (StrCmp (L"@echo -off", CommandLine3) != 0 &&\r
+                StrCmp (L"@echo -on", CommandLine3) != 0) {\r
+              //\r
+              // Now restore the pre-'@' echo state.\r
+              //\r
+              ShellCommandSetEchoState(PreCommandEchoState);\r
+            }\r
           } else {\r
             if (ShellCommandGetEchoState()) {\r
               CurDir = ShellInfoObject.NewEfiShellProtocol->GetEnv(L"cwd");\r
index c3af617430d54633351744cf49bfd91ae576e3a1..801180ea0d7694903647a0cfbc5f7a17521a722e 100644 (file)
@@ -1,6 +1,7 @@
 ##  @file\r
 #  This is the shell application\r
 #\r
+#  Copyright (c) 2013, Hewlett-Packard Development Company, L.P.\r
 #  Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>\r
 #\r
 #  This program and the accompanying materials\r
   gEfiShellPkgTokenSpaceGuid.PcdShellMapNameLength        # ALWAYS_CONSUMED\r
   gEfiShellPkgTokenSpaceGuid.PcdShellPrintBufferSize      # ALWAYS_CONSUMED\r
   gEfiShellPkgTokenSpaceGuid.PcdShellForceConsole         # ALWAYS_CONSUMED\r
+  gEfiShellPkgTokenSpaceGuid.PcdShellSupplier             # ALWAYS_CONSUMED\r
 \r
index b9ddcaed6176af001a74d2f4604dd6964c624a83..dae54e8c255e38691ff35c00552c1546889f562b 100644 (file)
Binary files a/ShellPkg/Application/Shell/Shell.uni and b/ShellPkg/Application/Shell/Shell.uni differ
index 936476d0d5e8182da1ddfb119f7ae17292e598c6..7316750fd84d6328d57f6045cc85804de8a01f22 100644 (file)
@@ -2,6 +2,7 @@
 # Provides shell level 3 functions\r
 # Note that the interactive versions of the time, date, and timezone functions are handled in the level 2 library.\r
 #\r
+# Copyright (c) 2013, Hewlett-Packard Development Company, L.P.\r
 # Copyright (c) 2009-2011, Intel Corporation. All rights reserved. <BR>\r
 #\r
 #  This program and the accompanying materials\r
@@ -66,4 +67,5 @@
 [Pcd.common]\r
   gEfiShellPkgTokenSpaceGuid.PcdShellSupportLevel\r
   gEfiShellPkgTokenSpaceGuid.PcdShellFileOperationSize\r
+  gEfiShellPkgTokenSpaceGuid.PcdShellSupplier\r
 \r
index 8c3e79dda7e4099aba46e3fa7be32aea24df8e29..1a52329917d0d6b3d9aa84b418ffcba922a52b8a 100644 (file)
Binary files a/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.uni and b/ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.uni differ
index e00f4c90f5042e866d2b6e8cd0c7bb5a3ec76ae9..765a6a3abac5734e75c89815745fefb43b679992 100644 (file)
@@ -1,6 +1,7 @@
 /** @file\r
   Main file for Ver shell level 3 function.\r
 \r
+  Copyright (c) 2013, Hewlett-Packard Development Company, L.P.\r
   Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -108,8 +109,9 @@ ShellCommandRunVer (
             -1,\r
             -1,\r
             NULL,\r
-            STRING_TOKEN (STR_VER_EXTRA_STRING),\r
-            gShellLevel3HiiHandle\r
+            STRING_TOKEN (STR_VER_OUTPUT_SUPPLIER),\r
+            gShellLevel3HiiHandle,\r
+            (CHAR16 *) PcdGetPtr (PcdShellSupplier)\r
            );\r
 \r
 \r
index 3a2bef6370787f1860db00586f7aeda18eb9b5c0..3d0f5c296de1445dd12e24c25720aae1d1ede905 100644 (file)
@@ -2,6 +2,7 @@
 #\r
 # This Package provides all definitions for EFI and UEFI Shell\r
 #\r
+# Copyright (c) 2013, Hewlett-Packard Development Company, L.P.\r
 # Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available under\r
@@ -47,7 +48,7 @@
 \r
 [Guids]\r
   gEfiShellEnvironment2ExtGuid    = {0xd2c18636, 0x40e5, 0x4eb5, {0xa3, 0x1b, 0x36, 0x69, 0x5f, 0xd4, 0x2c, 0x87}}\r
-  gEfiShellPkgTokenSpaceGuid       = {0x171e9188, 0x31d3, 0x40f5, {0xb1, 0x0c, 0x53, 0x9b, 0x2d, 0xb9, 0x40, 0xcd}}\r
+  gEfiShellPkgTokenSpaceGuid      = {0x171e9188, 0x31d3, 0x40f5, {0xb1, 0x0c, 0x53, 0x9b, 0x2d, 0xb9, 0x40, 0xcd}}\r
   gShellVariableGuid              = {0x158def5a, 0xf656, 0x419c, {0xb0, 0x27, 0x7a, 0x31, 0x92, 0xc0, 0x79, 0xd2}}\r
   gShellMapGuid                   = {0x51271e13, 0x7de3, 0x43af, {0x8b, 0xc2, 0x71, 0xad, 0x3b, 0x82, 0x43, 0x25}}\r
   gShellAliasGuid                 = {0x0053d9d6, 0x2659, 0x4599, {0xa2, 0x6b, 0xef, 0x45, 0x36, 0xe6, 0x31, 0xa9}}\r
 \r
   ## this flag determins the default number of screens kept for history log.\r
   #  the spec defines 3 as the minimum\r
-  gEfiShellPkgTokenSpaceGuid.PcdShellScreenLogCount|3|UINT8|0x00000008
\ No newline at end of file
+  gEfiShellPkgTokenSpaceGuid.PcdShellScreenLogCount|3|UINT8|0x00000008\r
+\r
+  ## Unicode string of the shell supplier\r
+  gEfiShellPkgTokenSpaceGuid.PcdShellSupplier|L"EDK II"|VOID*|0x00000010\r