105 lines
2 KiB
C
105 lines
2 KiB
C
/*++
|
|
|
|
Copyright (c) 1998 Intel Corporation
|
|
|
|
Module Name:
|
|
|
|
console.c
|
|
|
|
Abstract:
|
|
|
|
|
|
|
|
|
|
Revision History
|
|
|
|
--*/
|
|
|
|
#include "lib.h"
|
|
|
|
|
|
|
|
VOID
|
|
Output (
|
|
IN CHAR16 *Str
|
|
)
|
|
/* Write a string to the console at the current cursor location */
|
|
{
|
|
ST->ConOut->OutputString (ST->ConOut, Str);
|
|
}
|
|
|
|
|
|
VOID
|
|
Input (
|
|
IN CHAR16 *Prompt OPTIONAL,
|
|
OUT CHAR16 *InStr,
|
|
IN UINTN StrLen
|
|
)
|
|
/* Input a string at the current cursor location, for StrLen */
|
|
{
|
|
IInput (
|
|
ST->ConOut,
|
|
ST->ConIn,
|
|
Prompt,
|
|
InStr,
|
|
StrLen
|
|
);
|
|
}
|
|
|
|
VOID
|
|
IInput (
|
|
IN SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut,
|
|
IN SIMPLE_INPUT_INTERFACE *ConIn,
|
|
IN CHAR16 *Prompt OPTIONAL,
|
|
OUT CHAR16 *InStr,
|
|
IN UINTN StrLen
|
|
)
|
|
/* Input a string at the current cursor location, for StrLen */
|
|
{
|
|
EFI_INPUT_KEY Key;
|
|
EFI_STATUS Status;
|
|
UINTN Len;
|
|
|
|
if (Prompt) {
|
|
ConOut->OutputString (ConOut, Prompt);
|
|
}
|
|
|
|
Len = 0;
|
|
for (; ;) {
|
|
WaitForSingleEvent (ConIn->WaitForKey, 0);
|
|
|
|
Status = ConIn->ReadKeyStroke(ConIn, &Key);
|
|
if (EFI_ERROR(Status)) {
|
|
DEBUG((D_ERROR, "Input: error return from ReadKey %x\n", Status));
|
|
break;
|
|
}
|
|
|
|
if (Key.UnicodeChar == '\n' ||
|
|
Key.UnicodeChar == '\r') {
|
|
break;
|
|
}
|
|
|
|
if (Key.UnicodeChar == '\b') {
|
|
if (Len) {
|
|
ConOut->OutputString(ConOut, L"\b \b");
|
|
Len -= 1;
|
|
}
|
|
continue;
|
|
}
|
|
|
|
if (Key.UnicodeChar >= ' ') {
|
|
if (Len < StrLen-1) {
|
|
InStr[Len] = Key.UnicodeChar;
|
|
|
|
InStr[Len+1] = 0;
|
|
ConOut->OutputString(ConOut, &InStr[Len]);
|
|
|
|
Len += 1;
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
|
|
InStr[Len] = 0;
|
|
}
|