/** @file\r
- Provides application point extension for "C" style main funciton \r
+ Provides application point extension for "C" style main funciton\r
\r
-Copyright (c) 2009, Intel Corporation\r
-All rights reserved. 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
+ Copyright (c) 2009 - 2013, 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
+ 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
\r
**/\r
\r
#include <Base.h>\r
\r
#include <Protocol/SimpleFileSystem.h>\r
+#include <Protocol/LoadedImage.h>\r
#include <Protocol/EfiShellInterface.h>\r
#include <Protocol/EfiShellParameters.h>\r
\r
+#include <Library/ShellCEntryLib.h>\r
#include <Library/DebugLib.h>\r
\r
-INTN\r
-EFIAPI \r
-ShellAppMain (\r
- IN INTN Argc, \r
- IN CHAR16 **Argv\r
- );\r
-\r
/**\r
- UEFI entry point for an application that will in turn call a C \r
- style ShellAppMain function.\r
+ UEFI entry point for an application that will in turn call the\r
+ ShellAppMain function which has parameters similar to a standard C\r
+ main function.\r
+\r
+ An application that uses UefiShellCEntryLib must have a ShellAppMain\r
+ function as prototyped in Include/Library/ShellCEntryLib.h.\r
+\r
+ Note that the Shell uses POSITIVE integers for error values, while UEFI\r
+ uses NEGATIVE values. If the application is to be used within a script,\r
+ it needs to return one of the SHELL_STATUS values defined in ShellBase.h.\r
+\r
+ @param ImageHandle The image handle of the UEFI Application.\r
+ @param SystemTable A pointer to the EFI System Table.\r
\r
- This application must have a function defined as follows:\r
+ @retval EFI_SUCCESS The application exited normally.\r
+ @retval Other An error occurred.\r
\r
- INTN\r
- EFIAPI\r
- ShellAppMain (\r
- IN INTN Argc, \r
- IN CHAR16 **Argv\r
- );\r
**/\r
EFI_STATUS\r
EFIAPI\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- INT32 ReturnFromMain;\r
+ INTN ReturnFromMain;\r
EFI_SHELL_PARAMETERS_PROTOCOL *EfiShellParametersProtocol;\r
EFI_SHELL_INTERFACE *EfiShellInterface;\r
EFI_STATUS Status;\r
EfiShellParametersProtocol = NULL;\r
EfiShellInterface = NULL;\r
\r
- Status = SystemTable->BootServices->OpenProtocol(ImageHandle, \r
+ Status = SystemTable->BootServices->OpenProtocol(ImageHandle,\r
&gEfiShellParametersProtocolGuid,\r
(VOID **)&EfiShellParametersProtocol,\r
ImageHandle,\r
NULL,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
- );\r
+ );\r
if (!EFI_ERROR(Status)) {\r
//\r
// use shell 2.0 interface\r
//\r
ReturnFromMain = ShellAppMain (\r
- EfiShellInterface->Argc,\r
- EfiShellInterface->Argv\r
- );\r
+ EfiShellParametersProtocol->Argc,\r
+ EfiShellParametersProtocol->Argv\r
+ );\r
} else {\r
//\r
// try to get shell 1.0 interface instead.\r
//\r
- Status = SystemTable->BootServices->OpenProtocol(ImageHandle, \r
+ Status = SystemTable->BootServices->OpenProtocol(ImageHandle,\r
&gEfiShellInterfaceGuid,\r
(VOID **)&EfiShellInterface,\r
ImageHandle,\r
NULL,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
- );\r
+ );\r
if (!EFI_ERROR(Status)) {\r
//\r
// use shell 1.0 interface\r
- // \r
+ //\r
ReturnFromMain = ShellAppMain (\r
- EfiShellParametersProtocol->Argc,\r
- EfiShellParametersProtocol->Argv\r
- );\r
+ EfiShellInterface->Argc,\r
+ EfiShellInterface->Argv\r
+ );\r
} else {\r
ASSERT(FALSE);\r
}\r
}\r
- if (ReturnFromMain == 0) {\r
- return (EFI_SUCCESS);\r
- } else {\r
- return (EFI_UNSUPPORTED);\r
- }\r
+ return ReturnFromMain;\r
}\r