1 /** @file
2   Main file for Pause shell level 3 function.
3 
4   Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved. <BR>
5   This program and the accompanying materials
6   are licensed and made available under the terms and conditions of the BSD License
7   which accompanies this distribution.  The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #include "UefiShellLevel3CommandsLib.h"
16 
17 STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
18   {L"-q", TypeFlag},
19   {NULL, TypeMax}
20   };
21 
22 /**
23   Function for 'pause' command.
24 
25   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
26   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
27 **/
28 SHELL_STATUS
29 EFIAPI
ShellCommandRunPause(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE * SystemTable)30 ShellCommandRunPause (
31   IN EFI_HANDLE        ImageHandle,
32   IN EFI_SYSTEM_TABLE  *SystemTable
33   )
34 {
35   EFI_STATUS          Status;
36   LIST_ENTRY          *Package;
37   CHAR16              *ProblemParam;
38   SHELL_STATUS        ShellStatus;
39   SHELL_PROMPT_RESPONSE            *Resp;
40 
41   ProblemParam        = NULL;
42   ShellStatus         = SHELL_SUCCESS;
43   Resp                = NULL;
44 
45   //
46   // initialize the shell lib (we must be in non-auto-init...)
47   //
48   Status = ShellInitialize();
49   ASSERT_EFI_ERROR(Status);
50 
51   Status = CommandInit();
52   ASSERT_EFI_ERROR(Status);
53 
54   if (!gEfiShellProtocol->BatchIsActive()) {
55     ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_SCRIPT_ONLY), gShellLevel3HiiHandle);
56     return (SHELL_UNSUPPORTED);
57   }
58 
59   //
60   // parse the command line
61   //
62   Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
63   if (EFI_ERROR(Status)) {
64     if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
65       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel3HiiHandle, ProblemParam);
66       FreePool(ProblemParam);
67       ShellStatus = SHELL_INVALID_PARAMETER;
68     } else {
69       ASSERT(FALSE);
70     }
71   } else {
72     //
73     // check for "-?"
74     //
75     if (ShellCommandLineGetFlag(Package, L"-?")) {
76       ASSERT(FALSE);
77     } else if (ShellCommandLineGetRawValue(Package, 1) != NULL) {
78       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle);
79       ShellStatus = SHELL_INVALID_PARAMETER;
80     } else {
81       if (!ShellCommandLineGetFlag(Package, L"-q")) {
82         Status = ShellPromptForResponseHii(ShellPromptResponseTypeQuitContinue, STRING_TOKEN (STR_PAUSE_PROMPT), gShellLevel3HiiHandle, (VOID**)&Resp);
83       } else {
84         Status = ShellPromptForResponse(ShellPromptResponseTypeQuitContinue, NULL, (VOID**)&Resp);
85       }
86 
87       if (EFI_ERROR(Status) || Resp == NULL || *Resp == ShellPromptResponseQuit) {
88         ShellCommandRegisterExit(TRUE, 0);
89         ShellStatus = SHELL_ABORTED;
90       }
91 
92       if (Resp != NULL) {
93         FreePool(Resp);
94       }
95     }
96 
97     //
98     // free the command line package
99     //
100     ShellCommandLineFreeVarList (Package);
101   }
102 
103 
104   return (ShellStatus);
105 }
106 
107