Syncboot/gnu-efi/lib/console.c
Curle d588e232c4 Major overhaul of this branch.
This branch has been dedicated to purely the UEFI bootloader.
As such, all other code has been removed.

This code can be compiled with Visual Studio, gcc or llvm.
2019-07-17 21:10:29 +01:00

105 lines
2.0 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
{
uefi_call_wrapper(ST->ConOut->OutputString, 2, 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 = uefi_call_wrapper(ConIn->ReadKeyStroke, 2, 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) {
uefi_call_wrapper(ConOut->OutputString, 2, ConOut, L"\b \b");
Len -= 1;
}
continue;
}
if (Key.UnicodeChar >= ' ') {
if (Len < StrLen-1) {
InStr[Len] = Key.UnicodeChar;
InStr[Len+1] = 0;
uefi_call_wrapper(ConOut->OutputString, 2, ConOut, &InStr[Len]);
Len += 1;
}
continue;
}
}
InStr[Len] = 0;
}