0,0 → 1,104 |
/*++ |
|
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; |
} |