]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Application/Shell/Shell.h
ShellPkg/Application: Fix various typos
[mirror_edk2.git] / ShellPkg / Application / Shell / Shell.h
index 51ec4f3a4bd275699d9e0afd55767202cfbccd82..e6eb150f57a525fbf75974c2752ac0f67f3b17db 100644 (file)
@@ -1,14 +1,9 @@
 /** @file\r
   function definitions for internal to shell functions.\r
 \r
-  Copyright (c) 2009 - 2011, 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
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>\r
+  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #define _SHELL_INTERNAL_HEADER_\r
 \r
 #include <Uefi.h>\r
-#include <ShellBase.h>\r
 \r
 #include <Guid/ShellVariableGuid.h>\r
+#include <Guid/ShellAliasGuid.h>\r
 \r
 #include <Protocol/LoadedImage.h>\r
 #include <Protocol/SimpleTextOut.h>\r
-#include <Protocol/EfiShell.h>\r
+#include <Protocol/Shell.h>\r
 #include <Protocol/EfiShellInterface.h>\r
 #include <Protocol/EfiShellEnvironment2.h>\r
-#include <Protocol/EfiShellParameters.h>\r
+#include <Protocol/ShellParameters.h>\r
 #include <Protocol/BlockIo.h>\r
+#include <Protocol/HiiPackageList.h>\r
 \r
 #include <Library/BaseLib.h>\r
 #include <Library/UefiApplicationEntryPoint.h>\r
@@ -44,6 +40,8 @@
 #include <Library/HiiLib.h>\r
 #include <Library/PrintLib.h>\r
 #include <Library/HandleParsingLib.h>\r
+#include <Library/FileHandleLib.h>\r
+#include <Library/UefiHiiServicesLib.h>\r
 \r
 #include "ShellParametersProtocol.h"\r
 #include "ShellProtocol.h"\r
 #include "ConsoleLogger.h"\r
 #include "ShellManParser.h"\r
 #include "ConsoleWrappers.h"\r
+#include "FileHandleWrappers.h"\r
+\r
+extern CONST CHAR16 mNoNestingEnvVarName[];\r
+extern CONST CHAR16 mNoNestingTrue[];\r
+extern CONST CHAR16 mNoNestingFalse[];\r
 \r
 typedef struct {\r
   LIST_ENTRY        Link;           ///< Standard linked list handler.\r
-  SHELL_FILE_HANDLE *SplitStdOut;   ///< ConsoleOut for use in the split.\r
-  SHELL_FILE_HANDLE *SplitStdIn;    ///< ConsoleIn for use in the split.\r
+  SHELL_FILE_HANDLE SplitStdOut;    ///< ConsoleOut for use in the split.\r
+  SHELL_FILE_HANDLE SplitStdIn;     ///< ConsoleIn for use in the split.\r
 } SPLIT_LIST;\r
 \r
 typedef struct {\r
@@ -67,7 +70,9 @@ typedef struct {
   UINT32  NoMap:1;        ///< Was "-nomap"         found on command line.\r
   UINT32  NoVersion:1;    ///< Was "-noversion"     found on command line.\r
   UINT32  Delay:1;        ///< Was "-delay[:n]      found on command line\r
-  UINT32  Reserved:8;     ///< Extra bits\r
+  UINT32  Exit:1;         ///< Was "-_exit"         found on command line\r
+  UINT32  NoNest:1;       ///< Was "-nonest"        found on command line\r
+  UINT32  Reserved:7;     ///< Extra bits\r
 } SHELL_BITS;\r
 \r
 typedef union {\r
@@ -106,26 +111,59 @@ typedef struct {
   EFI_SHELL_PARAMETERS_PROTOCOL *OldShellParameters;  ///< old shell parameters to reinstall upon exiting.\r
   SHELL_PROTOCOL_HANDLE_LIST    OldShellList;         ///< List of other instances to reinstall when closing.\r
   SPLIT_LIST                    SplitList;            ///< List of Splits in FILO stack.\r
-  EFI_HANDLE                    CtrlCNotifyHandle1;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
-  EFI_HANDLE                    CtrlCNotifyHandle2;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
-  EFI_HANDLE                    CtrlCNotifyHandle3;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
-  EFI_HANDLE                    CtrlCNotifyHandle4;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
-  EFI_HANDLE                    CtrlSNotifyHandle1;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
-  EFI_HANDLE                    CtrlSNotifyHandle2;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
-  EFI_HANDLE                    CtrlSNotifyHandle3;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
-  EFI_HANDLE                    CtrlSNotifyHandle4;   ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
+  VOID                          *CtrlCNotifyHandle1;  ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
+  VOID                          *CtrlCNotifyHandle2;  ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
+  VOID                          *CtrlCNotifyHandle3;  ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
+  VOID                          *CtrlCNotifyHandle4;  ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
+  VOID                          *CtrlSNotifyHandle1;  ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
+  VOID                          *CtrlSNotifyHandle2;  ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
+  VOID                          *CtrlSNotifyHandle3;  ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
+  VOID                          *CtrlSNotifyHandle4;  ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
   BOOLEAN                       HaltOutput;           ///< TRUE to start a CTRL-S halt.\r
 } SHELL_INFO;\r
 \r
+#pragma pack(1)\r
+///\r
+/// HII specific Vendor Device Path definition.\r
+///\r
+typedef struct {\r
+  VENDOR_DEVICE_PATH             VendorDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL       End;\r
+} SHELL_MAN_HII_VENDOR_DEVICE_PATH;\r
+#pragma pack()\r
+\r
 extern SHELL_INFO ShellInfoObject;\r
 \r
+/**\r
+  Converts the command line to its post-processed form.  this replaces variables and alias' per UEFI Shell spec.\r
+\r
+  @param[in,out] CmdLine        pointer to the command line to update\r
+\r
+  @retval EFI_SUCCESS           The operation was successful\r
+  @retval EFI_OUT_OF_RESOURCES  A memory allocation failed.\r
+  @return                       some other error occurred\r
+**/\r
+EFI_STATUS\r
+ProcessCommandLineToFinal(\r
+  IN OUT CHAR16 **CmdLine\r
+  );\r
+\r
+/**\r
+  Function to update the shell variable "lasterror".\r
+\r
+  @param[in] ErrorCode      the error code to put into lasterror\r
+**/\r
+EFI_STATUS\r
+SetLastError(\r
+  IN CONST SHELL_STATUS   ErrorCode\r
+  );\r
+\r
 /**\r
   Sets all the alias' that were registered with the ShellCommandLib library.\r
 \r
-  @retval EFI_SUCCESS           all init commands were run sucessfully.\r
+  @retval EFI_SUCCESS           all init commands were run successfully.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 SetBuiltInAlias(\r
   VOID\r
   );\r
@@ -136,16 +174,15 @@ SetBuiltInAlias(
   loaded image protocol installed on it.  the FilePath will point to the device path\r
   for the file that was loaded.\r
 \r
-  @param[in,out] DevPath       on a sucessful return the device path to the loaded image\r
-  @param[in,out] FilePath      on a sucessful return the device path to the file\r
+  @param[in, out] DevPath       on a successful return the device path to the loaded image\r
+  @param[in, out] FilePath      on a successful return the device path to the file\r
 \r
-  @retval EFI_SUCCESS           the 2 device paths were sucessfully returned.\r
+  @retval EFI_SUCCESS           the 2 device paths were successfully returned.\r
   @return other                 a error from gBS->HandleProtocol\r
 \r
   @sa HandleProtocol\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 GetDevicePathsForImageAndFile (\r
   IN OUT EFI_DEVICE_PATH_PROTOCOL **DevPath,\r
   IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath\r
@@ -179,7 +216,6 @@ GetDevicePathsForImageAndFile (
   @retval EFI_SUCCESS           the variable is initialized.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 ProcessCommandLine(\r
   VOID\r
   );\r
@@ -195,7 +231,6 @@ ProcessCommandLine(
   @retval EFI_SUCCESS           The variable is initialized.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 DoStartupScript(\r
   IN EFI_DEVICE_PATH_PROTOCOL *ImagePath,\r
   IN EFI_DEVICE_PATH_PROTOCOL *FilePath\r
@@ -210,7 +245,6 @@ DoStartupScript(
   @retval RETURN_ABORTED\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 DoShellPrompt (\r
   VOID\r
   );\r
@@ -222,7 +256,6 @@ DoShellPrompt (
   @param Buffer   Something to pass to FreePool when the shell is exiting.\r
 **/\r
 VOID*\r
-EFIAPI\r
 AddBufferToFreeList(\r
   VOID *Buffer\r
   );\r
@@ -233,7 +266,6 @@ AddBufferToFreeList(
   @param Buffer[in]     The line buffer to add.\r
 **/\r
 VOID\r
-EFIAPI\r
 AddLineToCommandHistory(\r
   IN CONST CHAR16 *Buffer\r
   );\r
@@ -249,36 +281,38 @@ AddLineToCommandHistory(
   @retval EFI_ABORTED     the command's operation was aborted\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 RunCommand(\r
   IN CONST CHAR16   *CmdLine\r
   );\r
 \r
 /**\r
-  Function determins if the CommandName COULD be a valid command.  It does not determine whether\r
-  this is a valid command.  It only checks for invalid characters.\r
+  Function will process and run a command line.\r
 \r
-  @param[in] CommandName    The name to check\r
+  This will determine if the command line represents an internal shell\r
+  command or dispatch an external application.\r
 \r
-  @retval TRUE              CommandName could be a command name\r
-  @retval FALSE             CommandName could not be a valid command name\r
+  @param[in] CmdLine      The command line to parse.\r
+  @param[out] CommandStatus   The status from the command line.\r
+\r
+  @retval EFI_SUCCESS     The command was completed.\r
+  @retval EFI_ABORTED     The command's operation was aborted.\r
 **/\r
-BOOLEAN\r
-EFIAPI\r
-IsValidCommandName(\r
-  IN CONST CHAR16     *CommandName\r
+EFI_STATUS\r
+RunShellCommand(\r
+  IN CONST CHAR16   *CmdLine,\r
+  OUT EFI_STATUS    *CommandStatus\r
   );\r
 \r
+\r
 /**\r
   Function to process a NSH script file via SHELL_FILE_HANDLE.\r
 \r
   @param[in] Handle             The handle to the already opened file.\r
   @param[in] Name               The name of the script file.\r
 \r
-  @retval EFI_SUCCESS           the script completed sucessfully\r
+  @retval EFI_SUCCESS           the script completed successfully\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 RunScriptFileHandle (\r
   IN SHELL_FILE_HANDLE  Handle,\r
   IN CONST CHAR16       *Name\r
@@ -288,15 +322,69 @@ RunScriptFileHandle (
   Function to process a NSH script file.\r
 \r
   @param[in] ScriptPath         Pointer to the script file name (including file system path).\r
+  @param[in] Handle             the handle of the script file already opened.\r
+  @param[in] CmdLine            the command line to run.\r
+  @param[in] ParamProtocol      the shell parameters protocol pointer\r
 \r
-  @retval EFI_SUCCESS           the script completed sucessfully\r
+  @retval EFI_SUCCESS           the script completed successfully\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 RunScriptFile (\r
-  IN CONST CHAR16 *ScriptPath\r
+  IN CONST CHAR16                   *ScriptPath,\r
+  IN SHELL_FILE_HANDLE              Handle OPTIONAL,\r
+  IN CONST CHAR16                   *CmdLine,\r
+  IN EFI_SHELL_PARAMETERS_PROTOCOL  *ParamProtocol\r
   );\r
 \r
+/**\r
+  Return the pointer to the first occurrence of any character from a list of characters.\r
+\r
+  @param[in] String           the string to parse\r
+  @param[in] CharacterList    the list of character to look for\r
+  @param[in] EscapeCharacter  An escape character to skip\r
+\r
+  @return the location of the first character in the string\r
+  @retval CHAR_NULL no instance of any character in CharacterList was found in String\r
+**/\r
+CONST CHAR16*\r
+FindFirstCharacter(\r
+  IN CONST CHAR16 *String,\r
+  IN CONST CHAR16 *CharacterList,\r
+  IN CONST CHAR16 EscapeCharacter\r
+  );\r
+\r
+/**\r
+  Cleans off leading and trailing spaces and tabs.\r
+\r
+  @param[in] String pointer to the string to trim them off.\r
+**/\r
+EFI_STATUS\r
+TrimSpaces(\r
+  IN CHAR16 **String\r
+  );\r
+\r
+/**\r
+\r
+  Create a new buffer list and stores the old one to OldBufferList\r
+\r
+  @param OldBufferList   The temporary list head used to store the nodes in BufferToFreeList.\r
+**/\r
+VOID\r
+SaveBufferList (\r
+  OUT LIST_ENTRY     *OldBufferList\r
+  );\r
+\r
+/**\r
+  Restore previous nodes into BufferToFreeList .\r
+\r
+  @param OldBufferList   The temporary list head used to store the nodes in BufferToFreeList.\r
+**/\r
+VOID\r
+RestoreBufferList (\r
+  IN OUT LIST_ENTRY     *OldBufferList\r
+  );\r
+\r
+\r
 \r
 #endif //_SHELL_INTERNAL_HEADER_\r
 \r