/** @file
  EFI Shell Interface protocol from EDK shell (no spec).

  Shell Interface - additional information (over image_info) provided
  to an application started by the shell.

  ConIo provides a file-style interface to the console.

  The shell interface's and data (including ConIo) are only valid during
  the applications Entry Point.  Once the application returns from it's
  entry point the data is freed by the invoking shell.

  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _SHELLINTERFACE_H_
#define _SHELLINTERFACE_H_

#include <Protocol/SimpleFileSystem.h>

#define SHELL_INTERFACE_PROTOCOL_GUID \
  { \
    0x47c7b223, 0xc42a, 0x11d2, {0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} \
  }

///
/// Bit definitions for EFI_SHELL_ARG_INFO
///
typedef enum {
  ARG_NO_ATTRIB         = 0x0,
  ARG_IS_QUOTED         = BIT0,
  ARG_PARTIALLY_QUOTED  = BIT1,
  ARG_FIRST_HALF_QUOTED = BIT2,
  ARG_FIRST_CHAR_IS_ESC = BIT3
} EFI_SHELL_ARG_INFO_TYPES;

///
/// Attributes for an argument.
///
typedef struct _EFI_SHELL_ARG_INFO {
  UINT32    Attributes;
} EFI_SHELL_ARG_INFO;

///
/// This protocol provides access to additional information about a shell application.
///
typedef struct {
  ///
  /// Handle back to original image handle & image information.
  ///
  EFI_HANDLE                   ImageHandle;
  EFI_LOADED_IMAGE_PROTOCOL    *Info;

  ///
  /// Parsed arg list converted more C-like format.
  ///
  CHAR16                       **Argv;
  UINTN                        Argc;

  ///
  /// Storage for file redirection args after parsing.
  ///
  CHAR16                       **RedirArgv;
  UINTN                        RedirArgc;

  ///
  /// A file style handle for console io.
  ///
  EFI_FILE_PROTOCOL            *StdIn;
  EFI_FILE_PROTOCOL            *StdOut;
  EFI_FILE_PROTOCOL            *StdErr;

  ///
  /// List of attributes for each argument.
  ///
  EFI_SHELL_ARG_INFO           *ArgInfo;

  ///
  /// Whether we are echoing.
  ///
  BOOLEAN                      EchoOn;
} EFI_SHELL_INTERFACE;

extern EFI_GUID  gEfiShellInterfaceGuid;

#endif
