summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
f6ea51e)
fix for SimpleTextInEx callbacks.
remove an ASSERT.
fix for -noconsolein parameter.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11544
6f19259b-4bc3-4df7-8a09-
765794883524
//\r
// check if that is the last column\r
//\r
//\r
// check if that is the last column\r
//\r
- if ((INTN)ConsoleInfo->ColsPerScreen == ConsoleInfo->OurConOut.Mode->CursorColumn - 1) {\r
+ if ((INTN)ConsoleInfo->ColsPerScreen == ConsoleInfo->OurConOut.Mode->CursorColumn + 1) {\r
//\r
// output a line similar to the linefeed character.\r
//\r
//\r
// output a line similar to the linefeed character.\r
//\r
//\r
// Update LineStart Variable\r
//\r
//\r
// Update LineStart Variable\r
//\r
+ LineStart = Walker + 1;\r
\r
//\r
// increment row count and zero the column\r
\r
//\r
// increment row count and zero the column\r
IN CHAR16 *WString\r
)\r
{\r
IN CHAR16 *WString\r
)\r
{\r
+ EFI_INPUT_KEY Key;\r
+ UINTN EventIndex;\r
CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo;\r
ConsoleInfo = CONSOLE_LOGGER_PRIVATE_DATA_FROM_THIS(This);\r
if (ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleOut) {\r
return (EFI_UNSUPPORTED);\r
}\r
ASSERT(ShellInfoObject.ConsoleInfo == ConsoleInfo);\r
CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo;\r
ConsoleInfo = CONSOLE_LOGGER_PRIVATE_DATA_FROM_THIS(This);\r
if (ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleOut) {\r
return (EFI_UNSUPPORTED);\r
}\r
ASSERT(ShellInfoObject.ConsoleInfo == ConsoleInfo);\r
+ if (ShellInfoObject.HaltOutput) {\r
+ //\r
+ // just get some key\r
+ //\r
+ gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &EventIndex);\r
+ gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+ ShellInfoObject.HaltOutput = FALSE;\r
+ }\r
if (!ShellInfoObject.ConsoleInfo->Enabled) {\r
return (EFI_DEVICE_ERROR);\r
} else if (ShellInfoObject.PageBreakEnabled) {\r
if (!ShellInfoObject.ConsoleInfo->Enabled) {\r
return (EFI_DEVICE_ERROR);\r
} else if (ShellInfoObject.PageBreakEnabled) {\r
File style interface for NUL file (Read).\r
\r
@param[in] This Ignored.\r
File style interface for NUL file (Read).\r
\r
@param[in] This Ignored.\r
- @param[in,out] BufferSize Ignored.\r
+ @param[in,out] BufferSize Poiner to 0 upon return.\r
@param[out] Buffer Ignored.\r
\r
@retval EFI_SUCCESS Always.\r
@param[out] Buffer Ignored.\r
\r
@retval EFI_SUCCESS Always.\r
OUT VOID *Buffer\r
)\r
{\r
OUT VOID *Buffer\r
)\r
{\r
return (EFI_SUCCESS);\r
}\r
\r
return (EFI_SUCCESS);\r
}\r
\r
};\r
\r
STATIC CONST CHAR16 mScriptExtension[] = L".NSH";\r
};\r
\r
STATIC CONST CHAR16 mScriptExtension[] = L".NSH";\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
- CHAR16 *TempString;\r
- UINTN Size;\r
-// EFI_INPUT_KEY Key;\r
-\r
-// gST->ConOut->OutputString(gST->ConOut, L"ReadKeyStroke Calling\r\n");\r
-//\r
-// Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
-//\r
-// gST->ConOut->OutputString(gST->ConOut, L"ReadKeyStroke Done\r\n");\r
-// gBS->Stall (1000000);\r
+ EFI_STATUS Status;\r
+ CHAR16 *TempString;\r
+ UINTN Size;\r
+ EFI_HANDLE ConInHandle;\r
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL *OldConIn;\r
\r
if (PcdGet8(PcdShellSupportLevel) > 3) {\r
return (EFI_UNSUPPORTED);\r
\r
if (PcdGet8(PcdShellSupportLevel) > 3) {\r
return (EFI_UNSUPPORTED);\r
Status = InternalEfiShellStartCtrlSMonitor();\r
}\r
\r
Status = InternalEfiShellStartCtrlSMonitor();\r
}\r
\r
+ if (!EFI_ERROR(Status) && ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleIn) {\r
+ //\r
+ // close off the gST->ConIn\r
+ //\r
+ OldConIn = gST->ConIn;\r
+ ConInHandle = gST->ConsoleInHandle;\r
+ gST->ConIn = CreateSimpleTextInOnFile((SHELL_FILE_HANDLE)&FileInterfaceNulFile, &gST->ConsoleInHandle);\r
+ } else {\r
+ OldConIn = NULL;\r
+ ConInHandle = NULL;\r
+ }\r
+\r
if (!EFI_ERROR(Status) && PcdGet8(PcdShellSupportLevel) >= 1) {\r
//\r
// process the startup script or launch the called app.\r
if (!EFI_ERROR(Status) && PcdGet8(PcdShellSupportLevel) >= 1) {\r
//\r
// process the startup script or launch the called app.\r
Status = DoShellPrompt();\r
} while (!ShellCommandGetExit());\r
}\r
Status = DoShellPrompt();\r
} while (!ShellCommandGetExit());\r
}\r
+ if (OldConIn != NULL && ConInHandle != NULL) {\r
+ CloseSimpleTextInOnFile (gST->ConIn);\r
+ gST->ConIn = OldConIn;\r
+ gST->ConsoleInHandle = ConInHandle;\r
+ }\r
/**\r
This function will populate the 2 device path protocol parameters based on the\r
global gImageHandle. The DevPath will point to the device path for the handle that has\r
/**\r
This function will populate the 2 device path protocol parameters based on the\r
global gImageHandle. The DevPath will point to the device path for the handle that has\r
if (!EFI_ERROR (Status)) {\r
*DevPath = DuplicateDevicePath (ImageDevicePath);\r
*FilePath = DuplicateDevicePath (LoadedImage->FilePath);\r
if (!EFI_ERROR (Status)) {\r
*DevPath = DuplicateDevicePath (ImageDevicePath);\r
*FilePath = DuplicateDevicePath (LoadedImage->FilePath);\r
+ gBS->CloseProtocol(\r
+ LoadedImage->DeviceHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ gImageHandle,\r
+ NULL);\r
}\r
gBS->CloseProtocol(\r
gImageHandle,\r
}\r
gBS->CloseProtocol(\r
gImageHandle,\r
{L"-delay", TypeValue},\r
{NULL, TypeMax}\r
};\r
{L"-delay", TypeValue},\r
{NULL, TypeMax}\r
};\r
/**\r
Process all Uefi Shell 2.0 command line options.\r
\r
/**\r
Process all Uefi Shell 2.0 command line options.\r
\r
#include "ShellEnvVar.h"\r
#include "ConsoleLogger.h"\r
#include "ShellManParser.h"\r
#include "ShellEnvVar.h"\r
#include "ConsoleLogger.h"\r
#include "ShellManParser.h"\r
+#include "ConsoleWrappers.h"\r
\r
typedef struct {\r
LIST_ENTRY Link; ///< Standard linked list handler.\r
\r
typedef struct {\r
LIST_ENTRY Link; ///< Standard linked list handler.\r
EFI_HANDLE CtrlSNotifyHandle2; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
EFI_HANDLE CtrlSNotifyHandle3; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
EFI_HANDLE CtrlSNotifyHandle4; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
EFI_HANDLE CtrlSNotifyHandle2; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
EFI_HANDLE CtrlSNotifyHandle3; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
EFI_HANDLE CtrlSNotifyHandle4; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.\r
+ BOOLEAN HaltOutput; ///< TRUE to start a CTRL-S halt.\r
} SHELL_INFO;\r
\r
extern SHELL_INFO ShellInfoObject;\r
} SHELL_INFO;\r
\r
extern SHELL_INFO ShellInfoObject;\r
IN EFI_KEY_DATA *KeyData\r
)\r
{\r
IN EFI_KEY_DATA *KeyData\r
)\r
{\r
- EFI_INPUT_KEY Key;\r
- UINTN EventIndex;\r
// ShellPrintEx(-1,-1,L" <Notify> ");\r
if ((KeyData->Key.UnicodeChar == L'c' || KeyData->Key.UnicodeChar == 3) &&\r
(KeyData->KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID|EFI_LEFT_CONTROL_PRESSED) || KeyData->KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID|EFI_RIGHT_CONTROL_PRESSED))\r
// ShellPrintEx(-1,-1,L" <Notify> ");\r
if ((KeyData->Key.UnicodeChar == L'c' || KeyData->Key.UnicodeChar == 3) &&\r
(KeyData->KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID|EFI_LEFT_CONTROL_PRESSED) || KeyData->KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID|EFI_RIGHT_CONTROL_PRESSED))\r
} else if ((KeyData->Key.UnicodeChar == L's') &&\r
(KeyData->KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID|EFI_LEFT_CONTROL_PRESSED) || KeyData->KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID|EFI_RIGHT_CONTROL_PRESSED))\r
){ \r
} else if ((KeyData->Key.UnicodeChar == L's') &&\r
(KeyData->KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID|EFI_LEFT_CONTROL_PRESSED) || KeyData->KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID|EFI_RIGHT_CONTROL_PRESSED))\r
){ \r
- //\r
- // just get some key\r
- //\r
- gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &EventIndex);\r
- gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+ ShellInfoObject.HaltOutput = TRUE;\r
}\r
return (EFI_SUCCESS);\r
}\r
}\r
return (EFI_SUCCESS);\r
}\r
} else {\r
Status = ShellPromptForResponse(ShellPromptResponseTypeQuitContinue, NULL, (VOID**)&Resp);\r
}\r
} else {\r
Status = ShellPromptForResponse(ShellPromptResponseTypeQuitContinue, NULL, (VOID**)&Resp);\r
}\r
- ASSERT_EFI_ERROR(Status);\r
- if (Resp == NULL || *Resp == ShellPromptResponseQuit) {\r
+ if (EFI_ERROR(Status) || Resp == NULL || *Resp == ShellPromptResponseQuit) {\r
ShellCommandRegisterExit(TRUE);\r
ShellStatus = SHELL_ABORTED;\r
}\r
ShellCommandRegisterExit(TRUE);\r
ShellStatus = SHELL_ABORTED;\r
}\r