SHEL6
authorhfang <hfang@0aefa8ac-fc23-0410-b7a3-bf826d37e4c2>
Mon, 7 Aug 2006 09:14:38 +0000 (09:14 +0000)
committerhfang <hfang@0aefa8ac-fc23-0410-b7a3-bf826d37e4c2>
Mon, 7 Aug 2006 09:14:38 +0000 (09:14 +0000)
git-svn-id: https://efi-shell.tianocore.org/svn/efi-shell/trunk/Shell@19 0aefa8ac-fc23-0410-b7a3-bf826d37e4c2

54 files changed:
DeviceTree/devicetree.c
EDK_Snapshot.txt
EfiCompress/CompressMain.c
EfiDecompress/Decompress.c
IpConfig/IpConfig.c
Library/Init.c
Library/ShellEnvInt.c
Library/ShellEnvInt.h
LoadPciRom/LoadPciRom.c
ShellFull.inf
SmbiosView/QueryTable.c
SmbiosView/smbiosview.c
TelnetMgmt/TelnetMgmt.c
attrib/attrib.c
cls/cls.c
comp/comp.c
cp/cp.c
date/date.c
dblk/dblk.c
devices/devices.c
dmem/mem.c
dmpstore/DmpstoreStrings.uni
dmpstore/dmpstore.c
drivers/drivers.c
drvcfg/drvcfg.c
drvdiag/drvdiag.c
err/err.c
guid/guid.c
load/load.c
ls/ls.c
mem/mm.c
memmap/memmap.c
mkdir/mkdir.c
mm/mm.c
mm/mmStrings.uni
mode/mode.c
mount/mount.c
mv/mv.c
openinfo/openinfo.c
pci/pci.c
reset/reset.c
rm/rm.c
sermode/sermode.c
shellenv/Connect.c
shellenv/conio.c
shellenv/shelle.h
stall/stall.c
time/time.c
touch/touch.c
type/type.c
tzone/tzone.c
unload/unload.c
ver/ver.c
vol/vol.c

index 4a8d0ac..b752899 100644 (file)
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -138,6 +138,11 @@ Returns:
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiDevicetreeGuid);
   if (EFI_ERROR (Status)) {
     return Status;
index 7adf41c..7c73d86 100644 (file)
@@ -1,5 +1,5 @@
 Notes:
-  This EFI Shell release package has been tested on the 2006-06-12's EDK which snapshot
-is Edk-Dev-Snapshot-20060612, User can get this version EDK from the following URL:
-  http://edk.tianocore.org/files/documents/16/247/Edk-Dev-Snapshot-20060612.zip
+  This EFI Shell release package has been tested on the 2006-08-07's EDK which snapshot
+is Edk-Dev-Snapshot-200600807, User can get this version EDK from the following URL:
+  http://edk.tianocore.org/files/documents/16/265/Edk-Dev-Snapshot-20060807.zip
   We don't guarantee this package can work correctly on the other EDK snapshot.
\ No newline at end of file
index 307a958..7251be5 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -123,6 +123,11 @@ Returns:
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index 95280cb..cfec1b9 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -130,6 +130,12 @@ Returns:
   // as an nshell app and run
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index 0d980a4..0c3e4c3 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -384,6 +384,12 @@ Returns:
   // as an nshell app and run
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index 8438985..c50ab84 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -344,7 +344,11 @@ LibInitializeShellApplication (
   // Disable the page break output mode in default
   //
   DisablePageBreak ();
-
+  
+  //
+  // Disable the tab key pause output mode in default
+  DisableOutputTabPause ();
+  
   //
   // Done with init
   //
index efeb48f..b99d973 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -122,6 +122,67 @@ Returns:
   return SE2->GetPageBreak ();
 }
 
+VOID
+EnableOutputTabPause (
+  VOID
+  )
+/*++
+
+Routine Description:
+
+  Enable tab key which can pause output
+
+Arguments:
+
+Returns:
+
+--*/
+{
+  SE2->SetKeyFilter (SE2->GetKeyFilter () | EFI_OUTPUT_PAUSE);
+}
+
+VOID
+DisableOutputTabPause (
+  VOID
+  )
+/*++
+
+Routine Description:
+
+  disable tab key which can pause output
+
+  Disable pause key
+
+Arguments:
+
+Returns:
+  
+--*/
+{
+  SE2->SetKeyFilter (SE2->GetKeyFilter () & ~EFI_OUTPUT_PAUSE);
+}
+
+BOOLEAN
+GetOutputTabPause (
+  VOID
+  )
+/*++
+
+Routine Description:
+
+  Get the status of tab pause
+  
+Arguments:
+
+Returns:
+  TRUE    - the status of the tab key is enabled
+  FALSE - the status of the tab key is disabled
+  
+--*/
+{
+  return (BOOLEAN) ((SE2->GetKeyFilter () & EFI_OUTPUT_PAUSE) != 0);
+}
+
 VOID
 SetKeyFilter (
   IN UINT32      KeyFilter
index 6bb2c76..4182dff 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -54,6 +54,21 @@ DisablePageBreak (
   VOID
   );
 
+VOID
+EnableOutputTabPause (
+  VOID
+  );
+
+VOID
+DisableOutputTabPause (
+  VOID
+  );
+
+BOOLEAN
+GetOutputTabPause (
+  VOID
+  );
+
 VOID
 SetKeyFilter (
   IN UINT32      KeyFilter
index bd91573..f8854b7 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -139,6 +139,11 @@ Returns:
   // as an nshell app and run
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiLoadPciRomGuid);
 
index fb39026..c12e4a1 100644 (file)
@@ -1,14 +1,14 @@
 #/*++
 #
-# Copyright (c)  2006 Intel Corporation. All rights reserved
-# This software and associated documentation (if any) is furnished
-# under a license and may only be used or copied in accordance
-# with the terms of the license. Except as permitted by such
-# license, no part of this software or documentation may be
-# reproduced, stored in a retrieval system, or transmitted in any
-# form or by any means without the express written consent of
-# Intel Corporation.
-#
+# Copyright (c) 2006, Intel Corporation                                                         
+# All rights reserved. This program and the accompanying materials                          
+# 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         
+# http://opensource.org/licenses/bsd-license.php                                            
+#                                                                                           
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             
+# 
 #  Module Name:
 #
 #    ShellFull.inf
index 1c97be5..1030648 100644 (file)
@@ -275,6 +275,54 @@ TABLE_ITEM  ProcessorUpgradeTable[] = {
     0x09,
     L"Slot 2"
   },
+  {
+    0x0A,
+    L"370-pin socket"
+  },
+  {
+    0x0B,
+    L"Slot A"
+  },
+  {
+    0x0C,
+    L"Slot M"
+  },
+  {
+    0x0D,
+    L"Socket 423"
+  },
+  {
+    0x0E,
+    L"Socket A"
+  },
+  {
+    0x0F,
+    L"Socket 478"
+  },
+  {
+    0x10,
+    L"Socket 754"
+  },
+  {
+    0x11,
+    L"Socket 940"
+  },
+  {
+    0x12,
+    L"Socket 939"
+  },
+  {
+    0x13,
+    L"Socket mPGA604"
+  },
+  {
+    0x14,
+    L"Socket LGA771"
+  },
+  {
+    0x15,
+    L"Socket LGA775"
+  }
 };
 
 TABLE_ITEM  McErrorDetectMethodTable[] = {
@@ -1800,6 +1848,10 @@ TABLE_ITEM  MemoryDeviceFormFactorTable[] = {
   {
     0x0E,
     L"  SRIMM"
+  },
+  {
+    0x0F,
+    L"  FB-DIMM"
   }
 };
 
@@ -1872,6 +1924,18 @@ TABLE_ITEM  MemoryDeviceTypeTable[] = {
     0x11,
     L"  RDRAM"
   },
+  {
+    0x12,
+    L"  DDR"
+  },
+  {
+    0x13,
+    L"  DDR2"
+  },
+  {
+    0x14,
+    L"  DDR2 FB-DIMM"
+  }
 };
 
 TABLE_ITEM  MemoryDeviceTypeDetailTable[] = {
index 1a15902..a9cbda1 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -137,6 +137,11 @@ Returns:
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiSmbiosViewGuid);
 
index ea32c22..9d779df 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -112,6 +112,11 @@ Returns:
   //
   Status = EFI_SUCCESS;
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiTelnetMgmtGuid);
 
index a0792a3..3599d6d 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -182,6 +182,11 @@ Returns:
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   Status = LibFilterNullArgs ();
   if (EFI_ERROR (Status)) {
     return Status;
index a956e9b..572cc82 100644 (file)
--- a/cls/cls.c
+++ b/cls/cls.c
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -102,6 +102,11 @@ Returns:
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiClsGuid);
   if (EFI_ERROR (Status)) {
     return Status;
index 1858b58..ea339d2 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -138,6 +138,11 @@ Returns:
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
diff --git a/cp/cp.c b/cp/cp.c
index cf16711..25ac3cf 100644 (file)
--- a/cp/cp.c
+++ b/cp/cp.c
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -117,6 +117,11 @@ Returns:
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index 4e97606..7200850 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -136,6 +136,12 @@ Notes:
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index 6991ac7..3019627 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -111,6 +111,11 @@ Notes:
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index d7767f0..8c2c6a3 100644 (file)
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -133,6 +133,11 @@ Returns:
   Language = NULL;
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiDevicesGuid);
 
index 6093215..58fe982 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -60,6 +60,12 @@ Arguments:
   //  for the system
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index 1e148b3..a6fc163 100644 (file)
Binary files a/dmpstore/DmpstoreStrings.uni and b/dmpstore/DmpstoreStrings.uni differ
index a039546..8764f40 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -32,8 +32,9 @@ extern UINT8  STRING_ARRAY_NAME[];
 // This is the generated header file which includes whatever needs to be exported (strings + IFR)
 //
 #include STRING_DEFINES_FILE
+
 //
-//
+// DEBUG_NAME_SIZE > MAX_VARIABLE_SIZE
 //
 #define DEBUG_NAME_SIZE 1050
 
@@ -57,9 +58,45 @@ InitializeDumpStore (
   IN EFI_SYSTEM_TABLE   *SystemTable
   );
 
+EFI_STATUS
+LoadVariableStore (
+  IN CHAR16   *VarName,
+  IN CHAR16   *FileName
+  );
+
 EFI_STATUS
 DumpVariableStore (
-  CHAR16 *VarName
+  IN CHAR16           *VarName,
+  IN BOOLEAN          Delete,
+  IN EFI_FILE_HANDLE  FileHandle  
+  );
+
+EFI_STATUS
+CreateOutputFile (
+  IN CHAR16           *FileName, 
+  OUT EFI_FILE_HANDLE *FileHandle
+  );
+
+EFI_STATUS
+GetFileVariable (
+  IN EFI_FILE_HANDLE FileHandle,
+  IN OUT UINTN       *VariableNameSize,
+  IN CHAR16          *VariableName,
+  IN EFI_GUID        *VendorGuid,
+  OUT UINT32         *Attributes,
+  IN OUT UINTN       *DataSize,
+  OUT VOID           *Data
+  );
+
+EFI_STATUS
+SetFileVariable (
+  IN EFI_FILE_HANDLE FileHandle,
+  IN UINTN           VariableNameSize,
+  IN CHAR16          *VariableName,
+  IN EFI_GUID        *VendorGuid,
+  IN UINT32          Attributes,
+  IN UINTN           DataSize,
+  IN VOID            *Data  
   );
 
 //
@@ -80,6 +117,24 @@ SHELL_VAR_CHECK_ITEM    DmpstoreCheckList[] = {
     0,
     FlagTypeSingle
   },
+  {
+    L"-d",
+    0x04,
+    0x18,
+    FlagTypeSingle
+  },
+  {
+    L"-s",
+    0x08,
+    0x14,
+    FlagTypeNeedVar
+  },  
+  {
+    L"-l",
+    0x10,
+    0x0c,
+    FlagTypeNeedVar
+  },  
   {
     NULL,
     0,
@@ -116,10 +171,12 @@ Returns:
 {
   CHAR16                  *VarName;
   EFI_STATUS              Status;
-
+  BOOLEAN                 Delete;
+  EFI_FILE_HANDLE         FileHandle;
   SHELL_VAR_CHECK_CODE    RetCode;
   CHAR16                  *Useful;
   SHELL_VAR_CHECK_PACKAGE ChkPck;
+  SHELL_ARG_LIST          *Item;
 
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   //
@@ -128,6 +185,11 @@ Returns:
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+   
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
@@ -137,8 +199,10 @@ Returns:
     return Status;
   }
 
-  VarName = NULL;
-  Status  = EFI_SUCCESS;
+  VarName    = NULL;
+  Status     = EFI_SUCCESS;
+  Delete     = FALSE;
+  FileHandle = NULL;
 
   LibFilterNullArgs ();
   //
@@ -148,6 +212,10 @@ Returns:
   RetCode = LibCheckVariables (SI, DmpstoreCheckList, &ChkPck, &Useful);
   if (VarCheckOk != RetCode) {
     switch (RetCode) {
+    case VarCheckConflict:
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_FLAG_CONFLICT), HiiHandle, L"dmpstore", Useful);
+      break;
+          
     case VarCheckDuplicate:
       PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_DUP_FLAG), HiiHandle, L"dmpstore", Useful);
       break;
@@ -156,6 +224,10 @@ Returns:
       PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_UNKNOWN_FLAG), HiiHandle, L"dmpstore", Useful);
       break;
 
+    case VarCheckLackValue:
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_LACK_ARG), HiiHandle, L"dmpstore", Useful);
+      break;
+      
     default:
       break;
     }
@@ -192,31 +264,167 @@ Returns:
   if (NULL != ChkPck.VarList) {
     VarName = ChkPck.VarList->VarStr;
   }
-  //
-  // Dump all variables in store
-  //
-  if (VarName == NULL) {
-    Status = DumpVariableStore (NULL);
+  
+  Item = LibCheckVarGetFlag (&ChkPck, L"-l");
+  if (Item != NULL) {
+    //
+    // Load and set variables from previous saved file
+    //
+    Status = LoadVariableStore (VarName, Item->VarStr);
     goto Done;
   }
+
+  Item = LibCheckVarGetFlag (&ChkPck, L"-s");
+  if (Item != NULL) {
+    //
+    // Create output file for saving variables
+    //
+    Status = CreateOutputFile (Item->VarStr, &FileHandle);
+    if (EFI_ERROR (Status)) {
+      goto Done;
+    }
+  }
+
+  if (LibCheckVarGetFlag (&ChkPck, L"-d") != NULL) {
+    Delete = TRUE;
+  }
+      
   //
-  // Dump one variable in store
+  // Dump variables in store
   //
-  if (VarName != NULL) {
-    Status = DumpVariableStore (VarName);
-  }
+  Status = DumpVariableStore (VarName, Delete, FileHandle);
+
   //
   // Done
   //
 Done:
   LibCheckVarFreeVarList (&ChkPck);
   LibUnInitializeStrings ();
+  if (FileHandle != NULL) {
+    LibCloseFile (FileHandle);
+  };
+  return Status;
+}
+
+EFI_STATUS
+LoadVariableStore (
+  IN CHAR16   *VarName,
+  IN CHAR16   *FileName
+  )
+{
+  EFI_STATUS         Status;
+  EFI_FILE_HANDLE    FileHandle;  
+  EFI_GUID           Guid;
+  UINT32             Attributes;
+  CHAR16             Name[DEBUG_NAME_SIZE / 2];
+  UINTN              NameSize;
+  CHAR16             Data[DEBUG_NAME_SIZE / 2];
+  UINTN              DataSize;
+  BOOLEAN            Found;
+  EFI_FILE_INFO      *FileInfo;
+
+  Found      = FALSE;
+  FileHandle = NULL;
+  FileInfo   = NULL;
+      
+  //
+  // Open the previous saved output file
+  //  
+  Status = LibOpenFileByName (
+             FileName,
+             &FileHandle,
+             EFI_FILE_MODE_READ,
+             0
+             );
+  if (EFI_ERROR (Status)) {
+    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_CANNOT_OPEN_FILE), HiiHandle, L"dmpstore", FileName);
+    goto Done;
+  }
+  
+  //
+  // If the file is directory, abort
+  //
+  FileInfo = LibGetFileInfo (FileHandle);
+  if (FileInfo == NULL) {
+    Status = EFI_ABORTED;
+    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_CANNOT_OPEN_FILE), HiiHandle, L"dmpstore", FileName);
+    goto Done;
+  } else if (FileInfo->Attribute & EFI_FILE_DIRECTORY) {
+    Status = EFI_ABORTED;
+    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_CANNOT_OPEN_FILE), HiiHandle, L"dmpstore", FileName);
+    goto Done;
+  }
+  
+  PrintToken (STRING_TOKEN (STR_DMPSTORE_LOAD), HiiHandle);
+  do {
+    //
+    // Break the execution?
+    //
+    if (GetExecutionBreak ()) {
+      break;
+    }
+    
+    NameSize = DEBUG_NAME_SIZE;
+    DataSize = DEBUG_NAME_SIZE;
+    Status = GetFileVariable (FileHandle, &NameSize, Name, &Guid, &Attributes, &DataSize, Data);
+    if (Status == EFI_NOT_FOUND) {
+      Status = EFI_SUCCESS;
+      break;
+    }
+    if (EFI_ERROR (Status)) {
+      PrintToken (STRING_TOKEN (STR_DMPSTORE_LOAD_ERR2), HiiHandle);
+      goto Done;
+    }
+    if (VarName != NULL) {
+      if (!MetaiMatch (Name, VarName)) {
+        continue;
+      }
+    }
+    
+    Found = TRUE;
+    //
+    // Dump variable name
+    //        
+    PrintToken (
+      STRING_TOKEN (STR_DMPSTORE_VAR),
+      HiiHandle,
+      AttrType[Attributes & 7],
+      &Guid,
+      Name,
+      DataSize
+      );    
+    Status = RT->SetVariable (Name, &Guid, Attributes, DataSize, Data);
+    if (EFI_ERROR (Status)) {
+      PrintToken (STRING_TOKEN (STR_DMPSTORE_LOAD_ERR), HiiHandle);
+      goto Done;
+    }
+  } while (!EFI_ERROR (Status));
+
+  if (!Found) {
+    if (VarName != NULL) {
+      PrintToken (STRING_TOKEN (STR_DMPSTORE_VAR_NOT_FOUND), HiiHandle, VarName);
+    } else {
+      PrintToken (STRING_TOKEN (STR_DMPSTORE_VAR_EMPTY), HiiHandle);
+    }
+  }
+
+Done:
+  if (FileInfo != NULL) {
+    FreePool (FileInfo); 
+  }  
+  if (FileHandle != NULL) {
+    LibCloseFile (FileHandle);
+  };
   return Status;
 }
 
 EFI_STATUS
 DumpVariableStore (
-  CHAR16 *VarName
+  IN CHAR16           *VarName,
+  IN BOOLEAN          Delete,
+  IN EFI_FILE_HANDLE  FileHandle
   )
 {
   EFI_STATUS  Status;
@@ -228,32 +436,52 @@ DumpVariableStore (
   UINTN       DataSize;
   BOOLEAN     Found;
 
-  Found = FALSE;
+  Found  = FALSE;
+  Status = EFI_SUCCESS;
 
   if (VarName != NULL) {
-    PrintToken (STRING_TOKEN (STR_DMPSTORE_DUMP_ONE_VAR), HiiHandle, VarName);
+    if (Delete) {
+      PrintToken (STRING_TOKEN (STR_DMPSTORE_DELETE_ONE_VAR), HiiHandle, VarName);
+    } else if (FileHandle != NULL) {
+      PrintToken (STRING_TOKEN (STR_DMPSTORE_SAVE_ONE_VAR), HiiHandle, VarName);
+    } else {
+      PrintToken (STRING_TOKEN (STR_DMPSTORE_DUMP_ONE_VAR), HiiHandle, VarName);
+    }
   } else {
-    PrintToken (STRING_TOKEN (STR_DMPSTORE_DUMP), HiiHandle);
+    if (Delete) {
+      PrintToken (STRING_TOKEN (STR_DMPSTORE_DELETE), HiiHandle);
+    } else if (FileHandle != NULL) {
+      PrintToken (STRING_TOKEN (STR_DMPSTORE_SAVE), HiiHandle);
+    } else {
+      PrintToken (STRING_TOKEN (STR_DMPSTORE_DUMP), HiiHandle);
+    }    
   }
 
   Name[0] = 0x0000;
   do {
+    //
+    // Break the execution?
+    //
+    if (GetExecutionBreak ()) {
+      goto Done;
+    }
+    
     NameSize  = DEBUG_NAME_SIZE;
     Status    = RT->GetNextVariableName (&NameSize, Name, &Guid);
-    if (VarName != NULL) {
-      if (!MetaiMatch (Name, VarName)) {
-        continue;
-      }
-    }
-
     if (!EFI_ERROR (Status)) {
+      if (VarName != NULL) {
+        if (!MetaiMatch (Name, VarName)) {
+          continue;
+        }
+      }      
+
       Found     = TRUE;
       DataSize  = DEBUG_NAME_SIZE;
       Status    = RT->GetVariable (Name, &Guid, &Attributes, &DataSize, Data);
       if (!EFI_ERROR (Status)) {
         //
-        // dump variables
-        //
+        // Dump variable name
+        //        
         PrintToken (
           STRING_TOKEN (STR_DMPSTORE_VAR),
           HiiHandle,
@@ -262,15 +490,41 @@ DumpVariableStore (
           Name,
           DataSize
           );
-
-        if (PrivateDumpHex (2, 0, DataSize, Data)) {
-          goto Done;
+        if (Delete) {
+          //
+          // Delete variables
+          //
+          DataSize = 0;
+          Status   = RT->SetVariable (Name, &Guid, Attributes, DataSize, Data);
+          if (EFI_ERROR (Status)) {
+            PrintToken (STRING_TOKEN (STR_DMPSTORE_DELETE_ERR), HiiHandle);
+            goto Done;
+          } else {
+            Name[0] = 0x0000;
+          }
+        } else if (FileHandle != NULL) {
+          //
+          // Save variables to output file
+          //
+          Status = SetFileVariable (FileHandle, NameSize, Name, &Guid, Attributes, DataSize, Data);
+          if (EFI_ERROR (Status)) {
+            PrintToken (STRING_TOKEN (STR_DMPSTORE_SAVE_ERR), HiiHandle);
+            goto Done;
+          }
+        } else {
+          //
+          // Dump variable data
+          //
+          PrivateDumpHex (2, 0, DataSize, Data);
         }
       }
+    } else if (Status == EFI_NOT_FOUND) {
+      Status = EFI_SUCCESS;
+      break;
     }
   } while (!EFI_ERROR (Status));
 
-  if (Found == FALSE) {
+  if (!Found) {
     if (VarName != NULL) {
       PrintToken (STRING_TOKEN (STR_DMPSTORE_VAR_NOT_FOUND), HiiHandle, VarName);
     } else {
@@ -279,9 +533,180 @@ DumpVariableStore (
   }
 
 Done:
+  return Status;
+}
+
+EFI_STATUS
+CreateOutputFile (
+  IN CHAR16           *FileName, 
+  OUT EFI_FILE_HANDLE *FileHandle
+  )
+{
+  EFI_STATUS     Status;
+  EFI_FILE_INFO  *FileInfo;
+
+  FileInfo = NULL;
+  
+  //
+  // Delete the output file first if it exist
+  //  
+  Status = LibOpenFileByName (
+             FileName,
+             FileHandle,
+             EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
+             0
+             );
+  if (!EFI_ERROR (Status)) {
+    //
+    // If the existing file is directory, abort
+    //
+    FileInfo = LibGetFileInfo (*FileHandle);
+    if (FileInfo == NULL) {
+      Status = EFI_ABORTED;
+      goto Done;
+    } else if (FileInfo->Attribute & EFI_FILE_DIRECTORY) {
+      Status = EFI_ABORTED;
+      goto Done;
+    }    
+    LibDeleteFile (*FileHandle);
+  } else if (Status != EFI_NOT_FOUND) {
+    goto Done;
+  }
+
+  //
+  // Create the output file
+  //
+  Status = LibOpenFileByName (
+             FileName,
+             FileHandle,
+             EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE,
+             0
+             );
+  
+Done: 
+  if (FileInfo != NULL) {
+    FreePool (FileInfo); 
+  }
+  if (EFI_ERROR (Status)) {
+    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_CANNOT_OPEN_FILE), HiiHandle, L"dmpstore", FileName);
+  }
+  return Status;
+}
+
+EFI_STATUS
+GetFileVariable (
+  IN EFI_FILE_HANDLE FileHandle,
+  IN OUT UINTN       *VariableNameSize,
+  IN CHAR16          *VariableName,
+  IN EFI_GUID        *VendorGuid,
+  OUT UINT32         *Attributes,
+  IN OUT UINTN       *DataSize,
+  OUT VOID           *Data
+  )
+{
+  EFI_STATUS  Status;
+  UINTN       BufferSize;
+  UINTN       NameSize;
+  UINTN       Size;
+  
+  NameSize   = 0;
+  BufferSize = sizeof (UINT32);
+  Status     = LibReadFile (FileHandle, &BufferSize, &NameSize);
+  if (!EFI_ERROR (Status) && (BufferSize == 0)) {
+    return EFI_NOT_FOUND; // End of file
+  }
+  if (EFI_ERROR (Status) || (BufferSize != sizeof (UINT32)) || 
+      (NameSize > *VariableNameSize)) {
+    return EFI_ABORTED;
+  }
+  
+  BufferSize = NameSize;
+  Status     = LibReadFile (FileHandle, &BufferSize, VariableName);
+  if (EFI_ERROR (Status) || (BufferSize != NameSize)) {
+    return EFI_ABORTED;
+  }
+
+  BufferSize = sizeof (EFI_GUID);
+  Status     = LibReadFile (FileHandle, &BufferSize, VendorGuid);
+  if (EFI_ERROR (Status) || (BufferSize != sizeof (EFI_GUID))) {
+    return EFI_ABORTED;
+  }
+
+  BufferSize = sizeof (UINT32);
+  Status     = LibReadFile (FileHandle, &BufferSize, Attributes);
+  if (EFI_ERROR (Status) || (BufferSize != sizeof (UINT32))) {
+    return EFI_ABORTED;
+  }
+
+  Size       = 0;
+  BufferSize = sizeof (UINT32);
+  Status     = LibReadFile (FileHandle, &BufferSize, &Size);
+  if (EFI_ERROR (Status) || (BufferSize != sizeof (UINT32)) || 
+      (Size > *DataSize)) {
+    return EFI_ABORTED;
+  }
+  
+  BufferSize = Size;
+  Status     = LibReadFile (FileHandle, &BufferSize, Data);
+  if (EFI_ERROR (Status) || (BufferSize != Size)) {
+    return EFI_ABORTED;
+  }
+  
+  *VariableNameSize = NameSize;
+  *DataSize = Size;
   return EFI_SUCCESS;
 }
 
+EFI_STATUS
+SetFileVariable (
+  IN EFI_FILE_HANDLE FileHandle,
+  IN UINTN           VariableNameSize,
+  IN CHAR16          *VariableName,
+  IN EFI_GUID        *VendorGuid,
+  IN UINT32          Attributes,
+  IN UINTN           DataSize,
+  IN VOID            *Data  
+  )
+{
+  EFI_STATUS  Status;
+  UINTN       BufferSize;
+
+  BufferSize = sizeof (UINT32);
+  Status = LibWriteFile (FileHandle, &BufferSize, &VariableNameSize);
+  if (EFI_ERROR (Status)) {
+    return Status;
+  }
+  
+  BufferSize = VariableNameSize;
+  Status = LibWriteFile (FileHandle, &BufferSize, VariableName);
+  if (EFI_ERROR (Status)) {
+    return Status;
+  }
+
+  BufferSize = sizeof (EFI_GUID);
+  Status = LibWriteFile (FileHandle, &BufferSize, VendorGuid);
+  if (EFI_ERROR (Status)) {
+    return Status;
+  }
+
+  BufferSize = sizeof (UINT32);
+  Status = LibWriteFile (FileHandle, &BufferSize, &Attributes);
+  if (EFI_ERROR (Status)) {
+    return Status;
+  }
+
+  BufferSize = sizeof (UINT32);
+  Status = LibWriteFile (FileHandle, &BufferSize, &DataSize);
+  if (EFI_ERROR (Status)) {
+    return Status;
+  }
+
+  BufferSize = DataSize;
+  Status = LibWriteFile (FileHandle, &BufferSize, Data);
+
+  return Status;
+}
+
 EFI_STATUS
 InitializeDumpStoreGetLineHelp (
   OUT CHAR16                **Str
index 43b42b7..9e0dde7 100644 (file)
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -153,6 +153,11 @@ Returns:
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiDriversGuid);
   if (EFI_ERROR (Status)) {
     return Status;
index 0d10d60..a2a8a66 100644 (file)
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -177,6 +177,11 @@ Returns:
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiDrvcfgGuid);
 
   if (EFI_ERROR (Status)) {
index f77e289..c25e5d9 100644 (file)
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -190,6 +190,11 @@ Returns:
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiDrvdiagGuid);
   if (EFI_ERROR (Status)) {
     return Status;
index 58341c4..aafb39f 100644 (file)
--- a/err/err.c
+++ b/err/err.c
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -385,6 +385,12 @@ Returns:
   //  as an nshell app and run
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index bc6088c..7f26e7d 100644 (file)
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -105,6 +105,11 @@ Returns:
 
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiGuidGuid);
   if (EFI_ERROR (Status)) {
index 8d7f763..096d59b 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -128,6 +128,12 @@ Returns:
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
diff --git a/ls/ls.c b/ls/ls.c
index 71eb96b..bfb4f9c 100644 (file)
--- a/ls/ls.c
+++ b/ls/ls.c
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -139,6 +139,11 @@ Returns:
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index 9dbb515..a5ebdc0 100644 (file)
--- a/mem/mm.c
+++ b/mem/mm.c
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -64,6 +64,12 @@ Returns:
   //  for the system
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index dbd3981..f7353ff 100644 (file)
@@ -126,6 +126,11 @@ Returns:
   //
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiMemmapGuid);
   if (EFI_ERROR (Status)) {
index 1b12477..79a08ca 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -119,6 +119,11 @@ Returns:
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   //
   // Register our string package with HII and return the handle to it.
diff --git a/mm/mm.c b/mm/mm.c
index dac267a..fc53bae 100644 (file)
--- a/mm/mm.c
+++ b/mm/mm.c
@@ -229,6 +229,11 @@ Notes:
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiIomodGuid);
 
index bf7fe93..387fef6 100644 (file)
Binary files a/mm/mmStrings.uni and b/mm/mmStrings.uni differ
index 215f360..becf429 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -112,6 +112,11 @@ Returns:
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
 
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status  = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiModeGuid);
 
index d4cc934..fa32b1f 100644 (file)
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -131,6 +131,11 @@ Returns:
 
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiMountGuid);
 
diff --git a/mv/mv.c b/mv/mv.c
index fe65e85..b71de6f 100644 (file)
--- a/mv/mv.c
+++ b/mv/mv.c
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -179,6 +179,11 @@ Returns:
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
 
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index a0ddfdd..9b3356c 100644 (file)
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -151,6 +151,11 @@ Returns:
 
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiOpeninfoGuid);
 
index ee5678b..c0bed9a 100644 (file)
--- a/pci/pci.c
+++ b/pci/pci.c
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -235,6 +235,11 @@ Returns:
   HandleBuf = NULL;
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiPciGuid);
 
index 0dd9bf2..497b693 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -110,6 +110,11 @@ Returns:
 
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   //
   // Register our string package with HII and return the handle to it.
diff --git a/rm/rm.c b/rm/rm.c
index 1a15c18..792a5dc 100644 (file)
--- a/rm/rm.c
+++ b/rm/rm.c
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -107,6 +107,11 @@ Returns:
   // as an nshell app and run
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   //
   // Register our string package with HII and return the handle to it.
index d8ac859..b59e801 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -243,6 +243,11 @@ Returns:
   // Initialize app
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   EFI_SHELL_STR_INIT (HiiHandle, STRING_ARRAY_NAME, EfiSermodeGuid);
 
index a5ffc5a..640b358 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -189,6 +189,11 @@ Returns:
   Status                    = EFI_SUCCESS;
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+   
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   if (!EFI_PROPER_VERSION (1, 10)) {
     PrintToken (
@@ -807,6 +812,7 @@ Returns:
   UINTN       AllHandleCount;
   EFI_HANDLE  *AllHandleBuffer;
   UINTN       Index;
+  UINTN       NewIndex;
   UINTN       HandleCount;
   EFI_HANDLE  *HandleBuffer;
   UINT32      *HandleType;
@@ -826,6 +832,33 @@ Returns:
   }
 
   for (Index = 0; Index < AllHandleCount; Index++) {
+    //
+    // Check whether the handle is still in handle database
+    // as DisconnectController will destroy handles
+    //
+    Status = LibLocateHandle (
+               AllHandles,
+               NULL,
+               NULL,
+               &HandleCount,
+               &HandleBuffer
+               );
+    if (EFI_ERROR (Status)) {
+      return Status;
+    }
+    for (NewIndex = 0; NewIndex < HandleCount; NewIndex++) {
+      if (HandleBuffer[NewIndex] == AllHandleBuffer[Index]) {
+        break;
+      }
+    }
+    FreePool (HandleBuffer);
+    if (NewIndex == HandleCount) {
+      //
+      // The handle has been removed, skip it
+      //
+      continue;
+    }
+        
     //
     // Scan the handle database
     //
@@ -843,11 +876,12 @@ Returns:
     }
 
     Device = TRUE;
-    if (HandleType[Index] & EFI_HANDLE_TYPE_DRIVER_BINDING_HANDLE) {
+    
+    if (HandleType[NewIndex] & EFI_HANDLE_TYPE_DRIVER_BINDING_HANDLE) {
       Device = FALSE;
     }
 
-    if (HandleType[Index] & EFI_HANDLE_TYPE_IMAGE_HANDLE) {
+    if (HandleType[NewIndex] & EFI_HANDLE_TYPE_IMAGE_HANDLE) {
       Device = FALSE;
     }
 
@@ -860,7 +894,10 @@ Returns:
       }
 
       if (!Parent) {
-        if (HandleType[Index] & EFI_HANDLE_TYPE_DEVICE_HANDLE) {
+        if (HandleType[NewIndex] & EFI_HANDLE_TYPE_DEVICE_HANDLE) {
+          //
+          // Found a root controller handle, disconnect it
+          //
           Status = BS->DisconnectController (
                         AllHandleBuffer[Index],
                         NULL,
index 341002f..4514ccf 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -481,6 +481,20 @@ Returns:
   EFI_LIST_ENTRY                *LinePos;
   EFI_LIST_ENTRY                *NewPos;
   BOOLEAN                       InScrolling;
+  EFI_STATUS                    Status;
+  BOOLEAN                       InTabScrolling;
+  EFI_LIST_ENTRY                DirList;
+  SHELL_FILE_ARG                *Arg;
+  EFI_LIST_ENTRY                *TabLinePos;
+  EFI_LIST_ENTRY                *TempPos;
+  CHAR16                        *TabStr;
+  CHAR16                        *TabOutputStr;
+  BOOLEAN                       HasSpaceInTabOutputStr;
+  BOOLEAN                       InQuotationMode;
+  CHAR16                        *TempStr;
+  UINTN                         TabPos;
+  UINTN                         TabUpdatePos;
+  UINTN                         Count;
 
   ConOut            = ST->ConOut;
   ConIn             = ST->ConIn;
@@ -491,9 +505,21 @@ Returns:
   Update            = 0;
   Delete            = 0;
   LinePos           = NewPos = &SEnvLineHistory;
-
   InScrolling       = FALSE;
-
+  InTabScrolling    = FALSE;
+  Status            = EFI_SUCCESS;
+  TabLinePos        = &DirList;
+  TabPos            = 0;
+  TabUpdatePos      = 0;
+  TabStr            = AllocateZeroPool (*BufferSize);
+  if (TabStr == NULL) {
+    return EFI_OUT_OF_RESOURCES;
+  }
+  TabOutputStr      = AllocateZeroPool (*BufferSize);
+  if (TabOutputStr == NULL) {
+    return EFI_OUT_OF_RESOURCES;
+  }
+  
   //
   // If buffer is not large enough to hold a CHAR16, do nothing.
   //
@@ -525,7 +551,10 @@ Returns:
     // Read a key
     //
     WaitForSingleEvent (ConIn->WaitForKey, 0);
-    ConIn->ReadKeyStroke (ConIn, &Key);
+    Status = ConIn->ReadKeyStroke (ConIn, &Key);
+    if (EFI_ERROR (Status)) {
+      continue;
+    }
 
     //
     // Press PageUp or PageDown to scroll the history screen up or down.
@@ -546,6 +575,79 @@ Returns:
       }
     }
 
+    //
+    // Press tab key to scroll the matching file or directory name
+    // Press any other key to quit scrolling
+    //
+    if (Key.UnicodeChar == CHAR_TAB) {
+      if (InTabScrolling) {
+        TabLinePos = TabLinePos->Flink;
+        if (TabLinePos == &DirList) {
+          TabLinePos = TabLinePos->Flink;
+        }
+      } else {
+        TabPos          = 0;
+        TabUpdatePos    = 0;
+        InQuotationMode = FALSE;
+        for (Index = 0; Index < Len; Index++) {
+          if (Str[Index] == L'\"') {
+            InQuotationMode = !InQuotationMode;
+          }
+          if (Str[Index] == L' ' && !InQuotationMode) {
+            TabPos = Index + 1;
+            TabUpdatePos = Index + 1;
+          }
+          if (Str[Index] == L'\\') {
+            TabUpdatePos = Index + 1;
+          }
+        }
+        CopyMem (TabStr, Str + TabPos, (Len - TabPos) * sizeof (CHAR16));
+        Count = 0;
+        for (Index = 0; Index < Len - TabPos; Index++) {
+          while (TabStr[Index] == L'\"') {
+            ++Count;
+            ++Index;
+          }
+          TabStr[Index - Count] = TabStr[Index];
+        }
+        TabStr[Len - TabPos - Count] = L'*';
+        TabStr[Len - TabPos - Count + 1] = 0;
+        InitializeListHead (&DirList);
+        Status  = ShellFileMetaArg (TabStr, &DirList);
+        TempStr = Str;
+        while (*TempStr == L' ') {
+          TempStr++;
+        }
+        //
+        // If "cd" is typed, only directory name will be auto-complete filled
+        //
+        if ((TempStr[0] == L'c' || TempStr[0] == L'C') && 
+            (TempStr[1] == L'd' || TempStr[1] == L'D')
+            ) {
+          TempPos = DirList.Flink;
+          while (TempPos != &DirList) {
+            Arg = CR (TempPos, SHELL_FILE_ARG, Link, SHELL_FILE_ARG_SIGNATURE);
+            TempPos = TempPos->Flink;
+            if (! (Arg && Arg->Info && (Arg->Info->Attribute & EFI_FILE_DIRECTORY))) {
+              SEnvFreeFileArg (Arg);
+            }
+          }
+        }
+        if (EFI_ERROR (Status) || IsListEmpty (&DirList)) {
+          InTabScrolling = FALSE;
+          continue;
+        } else {
+          TabLinePos = DirList.Flink;
+          InTabScrolling = TRUE;
+        }
+      }
+    } else {
+      if (InTabScrolling) {
+        ShellFreeFileList (&DirList);
+        InTabScrolling = FALSE;
+      }
+    }
+
     switch (Key.UnicodeChar) {
     case CHAR_CARRIAGE_RETURN:
       //
@@ -574,7 +676,10 @@ Returns:
         MoveCursorBackward (LineLength, &Column, &Row);
       }
       break;
-
+    
+    case CHAR_TAB:
+      break;
+    
     default:
       if (Key.UnicodeChar >= ' ') {
         //
@@ -708,6 +813,47 @@ Returns:
     if (Done) {
       break;
     }
+    
+    //
+    // If we are in auto-complete mode, we are preparing to print the next file or directory name
+    //
+    if (InTabScrolling) {
+      Arg = CR (TabLinePos, SHELL_FILE_ARG, Link, SHELL_FILE_ARG_SIGNATURE);
+      if (Arg && (Arg->Status != EFI_SUCCESS)) {
+        continue;
+      }
+      Column = StartColumn + TabUpdatePos % LineLength;
+      Row -= (Len - StrPos + Column + OutputLength) / LineLength;
+      HasSpaceInTabOutputStr = FALSE;
+      OutputLength = StrLen (Arg->FileName);
+      //
+      // if the output string contains  blank space, quotation marks L'\"' should be added to the output.
+      //
+      for (TempStr = Arg->FileName; *TempStr != 0; TempStr++) {
+        if (*TempStr == L' ') {
+          HasSpaceInTabOutputStr = TRUE;
+          break;
+        }
+      }
+      if (HasSpaceInTabOutputStr) {
+        TabOutputStr[0] = L'\"';
+        CopyMem (TabOutputStr + 1, Arg->FileName, OutputLength * sizeof (CHAR16));
+        TabOutputStr[OutputLength + 1] = L'\"';
+        TabOutputStr[OutputLength + 2] = 0;
+      } else {
+        CopyMem (TabOutputStr, Arg->FileName, OutputLength * sizeof (CHAR16));
+        TabOutputStr[OutputLength] = 0;
+      }
+      OutputLength = StrLen (TabOutputStr) < MaxStr - 1 ? StrLen (TabOutputStr) : MaxStr - 1;
+      CopyMem (Str + TabUpdatePos, TabOutputStr, OutputLength * sizeof (CHAR16));
+      Str[TabUpdatePos + OutputLength] = 0;
+      StrPos = TabUpdatePos + OutputLength;
+      Update = TabUpdatePos;
+      if (Len > TabUpdatePos + OutputLength) {
+        Delete = Len - TabUpdatePos - OutputLength;
+      }
+    }
+    
     //
     // If we have a new position, we are preparing to print a previous or next
     // command.
@@ -844,6 +990,8 @@ Returns:
 
     FreePool (LineCmd);
   }
+  FreePool (TabStr);
+  FreePool (TabOutputStr);
   //
   // Return the data to the caller
   //
index 487c01c..68ed225 100644 (file)
@@ -1617,6 +1617,11 @@ SEnvDelDupFileArg (
   IN EFI_LIST_ENTRY   *ListHead
   );
 
+VOID
+SEnvFreeFileArg (
+  IN SHELL_FILE_ARG       *Arg
+  );
+
 EFI_STATUS
 EFIAPI
 SEnvFreeFileList (
index b8f600a..ccf7451 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -95,6 +95,11 @@ Returns:
 
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiStallHandle, STRING_ARRAY_NAME, &EfiStallGuid);
   if (EFI_ERROR (Status)) {
index 9657199..6e68de3 100644 (file)
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -106,6 +106,11 @@ Returns:
 
   ZeroMem (&ChkPck, sizeof (SHELL_VAR_CHECK_PACKAGE));
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   //
   // Register our string package with HII and return the handle to it.
index 4d6f9d1..0938d34 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -135,6 +135,12 @@ Returns:
   // as an nshell app and run
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
+  
   //
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
index c57e31d..129f911 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -142,6 +142,11 @@ Returns:
   // as an nshell app and run
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   //
   // Register our string package with HII and return the handle to it.
index 2fd6d4e..04ad339 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -275,6 +275,11 @@ InitializeTZone (
   // as an nshell app and run
   //
   EFI_SHELL_APP_INIT (hImageHandle, pSystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&hHiiHandle, STRING_ARRAY_NAME, &EfiTzoneGuid);
   if (EFI_ERROR (Status)) {
index 0329846..d86f8b4 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -762,6 +762,11 @@ Returns:
   // Initialize
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   Status = LibInitializeStrings (&HiiUnloadHandle, STRING_ARRAY_NAME, &EfiUnloadGuid);
   if (EFI_ERROR (Status)) {
index db46fb4..34aa25d 100644 (file)
--- a/ver/ver.c
+++ b/ver/ver.c
@@ -1,6 +1,6 @@
 /*++
  
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -109,6 +109,11 @@ Returns:
   // as an nshell app and run
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   //
   // Register our string package with HII and return the handle to it.
index 689e4d4..47a4de0 100644 (file)
--- a/vol/vol.c
+++ b/vol/vol.c
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005, Intel Corporation                                                         
+Copyright (c) 2005 - 2006, Intel Corporation                                                         
 All rights reserved. This program and the accompanying materials                          
 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         
@@ -139,6 +139,11 @@ Returns:
   // as an nshell app and run
   //
   EFI_SHELL_APP_INIT (ImageHandle, SystemTable);
+  
+  //
+  // Enable tab key which can pause the output
+  //
+  EnableOutputTabPause();
 
   //
   // Register our string package with HII and return the handle to it.