aboutsummaryrefslogtreecommitdiff
path: root/gnu-efi/gnu-efi-3.0/lib/console.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnu-efi/gnu-efi-3.0/lib/console.c')
-rw-r--r--gnu-efi/gnu-efi-3.0/lib/console.c104
1 files changed, 104 insertions, 0 deletions
diff --git a/gnu-efi/gnu-efi-3.0/lib/console.c b/gnu-efi/gnu-efi-3.0/lib/console.c
new file mode 100644
index 0000000..5ca47ef
--- /dev/null
+++ b/gnu-efi/gnu-efi-3.0/lib/console.c
@@ -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
+{
+ 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;
+}