- funciton -> function - paramter -> parameter - supresses -> suppresses - Seperator -> Separator - permenant -> permanent Reviewed-by: Jaben Carsey <jaben.carsey@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Gary Lin <glin@suse.com>
		
			
				
	
	
		
			100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Provides application point extension for "C" style main function
 | |
| 
 | |
|   Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 | |
|   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.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include <Base.h>
 | |
| 
 | |
| #include <Protocol/SimpleFileSystem.h>
 | |
| #include <Protocol/LoadedImage.h>
 | |
| #include <Protocol/EfiShellInterface.h>
 | |
| #include <Protocol/ShellParameters.h>
 | |
| 
 | |
| #include <Library/ShellCEntryLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| 
 | |
| /**
 | |
|   UEFI entry point for an application that will in turn call the
 | |
|   ShellAppMain function which has parameters similar to a standard C
 | |
|   main function.
 | |
| 
 | |
|   An application that uses UefiShellCEntryLib must have a ShellAppMain
 | |
|   function as prototyped in Include/Library/ShellCEntryLib.h.
 | |
| 
 | |
|   Note that the Shell uses POSITIVE integers for error values, while UEFI
 | |
|   uses NEGATIVE values.  If the application is to be used within a script,
 | |
|   it needs to return one of the SHELL_STATUS values defined in Protocol/Shell.h.
 | |
| 
 | |
|   @param  ImageHandle  The image handle of the UEFI Application.
 | |
|   @param  SystemTable  A pointer to the EFI System Table.
 | |
| 
 | |
|   @retval  EFI_SUCCESS               The application exited normally.
 | |
|   @retval  Other                     An error occurred.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ShellCEntryLib (
 | |
|   IN EFI_HANDLE        ImageHandle,
 | |
|   IN EFI_SYSTEM_TABLE  *SystemTable
 | |
|   )
 | |
| {
 | |
|   INTN                           ReturnFromMain;
 | |
|   EFI_SHELL_PARAMETERS_PROTOCOL *EfiShellParametersProtocol;
 | |
|   EFI_SHELL_INTERFACE           *EfiShellInterface;
 | |
|   EFI_STATUS                    Status;
 | |
| 
 | |
|   ReturnFromMain = -1;
 | |
|   EfiShellParametersProtocol = NULL;
 | |
|   EfiShellInterface = NULL;
 | |
| 
 | |
|   Status = SystemTable->BootServices->OpenProtocol(ImageHandle,
 | |
|                              &gEfiShellParametersProtocolGuid,
 | |
|                              (VOID **)&EfiShellParametersProtocol,
 | |
|                              ImageHandle,
 | |
|                              NULL,
 | |
|                              EFI_OPEN_PROTOCOL_GET_PROTOCOL
 | |
|                             );
 | |
|   if (!EFI_ERROR(Status)) {
 | |
|     //
 | |
|     // use shell 2.0 interface
 | |
|     //
 | |
|     ReturnFromMain = ShellAppMain (
 | |
|                        EfiShellParametersProtocol->Argc,
 | |
|                        EfiShellParametersProtocol->Argv
 | |
|                       );
 | |
|   } else {
 | |
|     //
 | |
|     // try to get shell 1.0 interface instead.
 | |
|     //
 | |
|     Status = SystemTable->BootServices->OpenProtocol(ImageHandle,
 | |
|                                &gEfiShellInterfaceGuid,
 | |
|                                (VOID **)&EfiShellInterface,
 | |
|                                ImageHandle,
 | |
|                                NULL,
 | |
|                                EFI_OPEN_PROTOCOL_GET_PROTOCOL
 | |
|                               );
 | |
|     if (!EFI_ERROR(Status)) {
 | |
|       //
 | |
|       // use shell 1.0 interface
 | |
|       //
 | |
|       ReturnFromMain = ShellAppMain (
 | |
|                          EfiShellInterface->Argc,
 | |
|                          EfiShellInterface->Argv
 | |
|                         );
 | |
|     } else {
 | |
|       ASSERT(FALSE);
 | |
|     }
 | |
|   }
 | |
|   return ReturnFromMain;
 | |
| }
 |