| /** @file | |
| Member functions of EFI_SHELL_PARAMETERS_PROTOCOL and functions for creation, | |
| manipulation, and initialization of EFI_SHELL_PARAMETERS_PROTOCOL. | |
| Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef _SHELL_PARAMETERS_PROTOCOL_PROVIDER_HEADER_ | |
| #define _SHELL_PARAMETERS_PROTOCOL_PROVIDER_HEADER_ | |
| #include "Shell.h" | |
| typedef enum { | |
| Internal_Command, | |
| Script_File_Name, | |
| Efi_Application, | |
| File_Sys_Change, | |
| Unknown_Invalid | |
| } SHELL_OPERATION_TYPES; | |
| /** | |
| creates a new EFI_SHELL_PARAMETERS_PROTOCOL instance and populates it and then | |
| installs it on our handle and if there is an existing version of the protocol | |
| that one is cached for removal later. | |
| @param[in, out] NewShellParameters on a successful return, a pointer to pointer | |
| to the newly installed interface. | |
| @param[in, out] RootShellInstance on a successful return, pointer to boolean. | |
| TRUE if this is the root shell instance. | |
| @retval EFI_SUCCESS the operation completed successfully. | |
| @return other the operation failed. | |
| @sa ReinstallProtocolInterface | |
| @sa InstallProtocolInterface | |
| @sa ParseCommandLineToArgs | |
| **/ | |
| EFI_STATUS | |
| CreatePopulateInstallShellParametersProtocol ( | |
| IN OUT EFI_SHELL_PARAMETERS_PROTOCOL **NewShellParameters, | |
| IN OUT BOOLEAN *RootShellInstance | |
| ); | |
| /** | |
| frees all memory used by creation and installation of shell parameters protocol | |
| and if there was an old version installed it will restore that one. | |
| @param NewShellParameters the interface of EFI_SHELL_PARAMETERS_PROTOCOL that is | |
| being cleaned up. | |
| @retval EFI_SUCCESS the cleanup was successful | |
| @return other the cleanup failed | |
| @sa ReinstallProtocolInterface | |
| @sa UninstallProtocolInterface | |
| **/ | |
| EFI_STATUS | |
| CleanUpShellParametersProtocol ( | |
| IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *NewShellParameters | |
| ); | |
| /** | |
| Function will replace the current Argc and Argv in the ShellParameters protocol | |
| structure by parsing NewCommandLine. The current values are returned to the | |
| user. | |
| @param[in, out] ShellParameters pointer to parameter structure to modify | |
| @param[in] NewCommandLine the new command line to parse and use | |
| @param[in] Type the type of operation. | |
| @param[out] OldArgv pointer to old list of parameters | |
| @param[out] OldArgc pointer to old number of items in Argv list | |
| @retval EFI_SUCCESS operation was successful, Argv and Argc are valid | |
| @return EFI_INVALID_PARAMETER some parameters are invalid | |
| @retval EFI_OUT_OF_RESOURCES a memory allocation failed. | |
| **/ | |
| EFI_STATUS | |
| UpdateArgcArgv ( | |
| IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters, | |
| IN CONST CHAR16 *NewCommandLine, | |
| IN SHELL_OPERATION_TYPES Type, | |
| OUT CHAR16 ***OldArgv, | |
| OUT UINTN *OldArgc | |
| ); | |
| /** | |
| Function will replace the current Argc and Argv in the ShellParameters protocol | |
| structure with Argv and Argc. The current values are de-allocated and the | |
| OldArgv must not be deallocated by the caller. | |
| @param[in, out] ShellParameters pointer to parameter structure to modify | |
| @param[in] OldArgv pointer to old list of parameters | |
| @param[in] OldArgc pointer to old number of items in Argv list | |
| **/ | |
| VOID | |
| RestoreArgcArgv ( | |
| IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters, | |
| IN CHAR16 ***OldArgv, | |
| IN UINTN *OldArgc | |
| ); | |
| typedef struct { | |
| EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn; | |
| EFI_HANDLE ConInHandle; | |
| EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut; | |
| EFI_HANDLE ConOutHandle; | |
| EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ErrOut; | |
| EFI_HANDLE ErrOutHandle; | |
| } SYSTEM_TABLE_INFO; | |
| /** | |
| Function will replace the current StdIn and StdOut in the ShellParameters protocol | |
| structure by parsing NewCommandLine. The current values are returned to the | |
| user. | |
| This will also update the system table. | |
| @param[in, out] ShellParameters Pointer to parameter structure to modify. | |
| @param[in] NewCommandLine The new command line to parse and use. | |
| @param[out] OldStdIn Pointer to old StdIn. | |
| @param[out] OldStdOut Pointer to old StdOut. | |
| @param[out] OldStdErr Pointer to old StdErr. | |
| @param[out] SystemTableInfo Pointer to old system table information. | |
| @retval EFI_SUCCESS Operation was successful, Argv and Argc are valid. | |
| @retval EFI_OUT_OF_RESOURCES A memory allocation failed. | |
| **/ | |
| EFI_STATUS | |
| UpdateStdInStdOutStdErr ( | |
| IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters, | |
| IN CHAR16 *NewCommandLine, | |
| OUT SHELL_FILE_HANDLE *OldStdIn, | |
| OUT SHELL_FILE_HANDLE *OldStdOut, | |
| OUT SHELL_FILE_HANDLE *OldStdErr, | |
| OUT SYSTEM_TABLE_INFO *SystemTableInfo | |
| ); | |
| /** | |
| Function will replace the current StdIn and StdOut in the ShellParameters protocol | |
| structure with StdIn and StdOut. The current values are de-allocated. | |
| @param[in, out] ShellParameters Pointer to parameter structure to modify. | |
| @param[in] OldStdIn Pointer to old StdIn. | |
| @param[in] OldStdOut Pointer to old StdOut. | |
| @param[in] OldStdErr Pointer to old StdErr. | |
| @param[in] SystemTableInfo Pointer to old system table information. | |
| **/ | |
| EFI_STATUS | |
| RestoreStdInStdOutStdErr ( | |
| IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters, | |
| IN SHELL_FILE_HANDLE *OldStdIn, | |
| IN SHELL_FILE_HANDLE *OldStdOut, | |
| IN SHELL_FILE_HANDLE *OldStdErr, | |
| IN SYSTEM_TABLE_INFO *SystemTableInfo | |
| ); | |
| /** | |
| function to populate Argc and Argv. | |
| This function parses the CommandLine and divides it into standard C style Argc/Argv | |
| parameters for inclusion in EFI_SHELL_PARAMETERS_PROTOCOL. this supports space | |
| delimited and quote surrounded parameter definition. | |
| @param[in] CommandLine String of command line to parse | |
| @param[in] StripQuotation if TRUE then strip the quotation marks surrounding | |
| the parameters. | |
| @param[in, out] Argv pointer to array of strings; one for each parameter | |
| @param[in, out] Argc pointer to number of strings in Argv array | |
| @return EFI_SUCCESS the operation was successful | |
| @return EFI_INVALID_PARAMETER some parameters are invalid | |
| @return EFI_OUT_OF_RESOURCES a memory allocation failed. | |
| **/ | |
| EFI_STATUS | |
| ParseCommandLineToArgs ( | |
| IN CONST CHAR16 *CommandLine, | |
| IN BOOLEAN StripQuotation, | |
| IN OUT CHAR16 ***Argv, | |
| IN OUT UINTN *Argc | |
| ); | |
| /** | |
| return the next parameter from a command line string; | |
| This function moves the next parameter from Walker into TempParameter and moves | |
| Walker up past that parameter for recursive calling. When the final parameter | |
| is moved *Walker will be set to NULL; | |
| Temp Parameter must be large enough to hold the parameter before calling this | |
| function. | |
| @param[in, out] Walker pointer to string of command line. Adjusted to | |
| remaining command line on return | |
| @param[in, out] TempParameter pointer to string of command line item extracted. | |
| @param[in] Length Length of (*TempParameter) in bytes | |
| @param[in] StripQuotation if TRUE then strip the quotation marks surrounding | |
| the parameters. | |
| @return EFI_INVALID_PARAMETER A required parameter was NULL or pointed to a NULL or empty string. | |
| @return EFI_NOT_FOUND A closing " could not be found on the specified string | |
| **/ | |
| EFI_STATUS | |
| GetNextParameter ( | |
| IN OUT CHAR16 **Walker, | |
| IN OUT CHAR16 **TempParameter, | |
| IN CONST UINTN Length, | |
| IN BOOLEAN StripQuotation | |
| ); | |
| #endif //_SHELL_PARAMETERS_PROTOCOL_PROVIDER_HEADER_ |