94 lines
2.1 KiB
C
94 lines
2.1 KiB
C
/*++
|
|
|
|
Copyright (c) 1999 Intel Corporation
|
|
|
|
Module Name:
|
|
|
|
pause.c
|
|
|
|
Abstract:
|
|
|
|
Internal Shell batch cmd "pause"
|
|
|
|
|
|
|
|
Revision History
|
|
|
|
--*/
|
|
|
|
#include "shelle.h"
|
|
|
|
|
|
/*
|
|
* Internal prototypes
|
|
*/
|
|
|
|
|
|
/*///////////////////////////////////////////////////////////////////////
|
|
Function Name:
|
|
SEnvCmdPause
|
|
|
|
Description:
|
|
Builtin shell command "pause" for interactive continue/abort
|
|
functionality from scripts.
|
|
*/
|
|
EFI_STATUS
|
|
SEnvCmdPause (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_SYSTEM_TABLE *SystemTable
|
|
)
|
|
{
|
|
CHAR16 **Argv;
|
|
UINTN Argc = 0;
|
|
UINTN Index = 0;
|
|
EFI_STATUS Status = EFI_SUCCESS;
|
|
SIMPLE_INPUT_INTERFACE *TextIn = NULL;
|
|
SIMPLE_TEXT_OUTPUT_INTERFACE *TextOut = NULL;
|
|
EFI_INPUT_KEY Key;
|
|
CHAR16 QStr[2];
|
|
|
|
InitializeShellApplication (ImageHandle, SystemTable);
|
|
Argv = SI->Argv;
|
|
Argc = SI->Argc;
|
|
|
|
if ( !SEnvBatchIsActive() ) {
|
|
Print( L"Error: PAUSE command only supported in script files\n" );
|
|
Status = EFI_UNSUPPORTED;
|
|
goto Done;
|
|
}
|
|
|
|
SEnvBatchGetConsole( &TextIn, &TextOut );
|
|
|
|
Status = TextOut->OutputString( TextOut,
|
|
L"Enter 'q' to quit, any other key to continue: " );
|
|
if ( EFI_ERROR(Status) ) {
|
|
Print( L"PAUSE: error writing prompt\n" );
|
|
goto Done;
|
|
}
|
|
|
|
WaitForSingleEvent (TextIn->WaitForKey, 0);
|
|
Status = TextIn->ReadKeyStroke( TextIn, &Key );
|
|
if ( EFI_ERROR(Status) ) {
|
|
Print( L"PAUSE: error reading keystroke\n" );
|
|
goto Done;
|
|
}
|
|
|
|
/*
|
|
* Check if input character is q or Q, if so set abort flag
|
|
*/
|
|
|
|
if ( Key.UnicodeChar == L'q' || Key.UnicodeChar == L'Q' ) {
|
|
SEnvSetBatchAbort();
|
|
}
|
|
if ( Key.UnicodeChar != (CHAR16)0x0000 ) {
|
|
QStr[0] = Key.UnicodeChar;
|
|
QStr[1] = (CHAR16)0x0000;
|
|
TextOut->OutputString( TextOut, QStr );
|
|
}
|
|
TextOut->OutputString( TextOut, L"\n\r" );
|
|
|
|
Done:
|
|
return Status;
|
|
}
|
|
|