1 1.1 jakllsch /* $NetBSD: console.c,v 1.1.1.1 2014/04/01 16:16:06 jakllsch Exp $ */ 2 1.1 jakllsch 3 1.1 jakllsch /*++ 4 1.1 jakllsch 5 1.1 jakllsch Copyright (c) 1998 Intel Corporation 6 1.1 jakllsch 7 1.1 jakllsch Module Name: 8 1.1 jakllsch 9 1.1 jakllsch console.c 10 1.1 jakllsch 11 1.1 jakllsch Abstract: 12 1.1 jakllsch 13 1.1 jakllsch 14 1.1 jakllsch 15 1.1 jakllsch 16 1.1 jakllsch Revision History 17 1.1 jakllsch 18 1.1 jakllsch --*/ 19 1.1 jakllsch 20 1.1 jakllsch #include "lib.h" 21 1.1 jakllsch 22 1.1 jakllsch 23 1.1 jakllsch 24 1.1 jakllsch VOID 25 1.1 jakllsch Output ( 26 1.1 jakllsch IN CHAR16 *Str 27 1.1 jakllsch ) 28 1.1 jakllsch // Write a string to the console at the current cursor location 29 1.1 jakllsch { 30 1.1 jakllsch uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, Str); 31 1.1 jakllsch } 32 1.1 jakllsch 33 1.1 jakllsch 34 1.1 jakllsch VOID 35 1.1 jakllsch Input ( 36 1.1 jakllsch IN CHAR16 *Prompt OPTIONAL, 37 1.1 jakllsch OUT CHAR16 *InStr, 38 1.1 jakllsch IN UINTN StrLen 39 1.1 jakllsch ) 40 1.1 jakllsch // Input a string at the current cursor location, for StrLen 41 1.1 jakllsch { 42 1.1 jakllsch IInput ( 43 1.1 jakllsch ST->ConOut, 44 1.1 jakllsch ST->ConIn, 45 1.1 jakllsch Prompt, 46 1.1 jakllsch InStr, 47 1.1 jakllsch StrLen 48 1.1 jakllsch ); 49 1.1 jakllsch } 50 1.1 jakllsch 51 1.1 jakllsch VOID 52 1.1 jakllsch IInput ( 53 1.1 jakllsch IN SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut, 54 1.1 jakllsch IN SIMPLE_INPUT_INTERFACE *ConIn, 55 1.1 jakllsch IN CHAR16 *Prompt OPTIONAL, 56 1.1 jakllsch OUT CHAR16 *InStr, 57 1.1 jakllsch IN UINTN StrLen 58 1.1 jakllsch ) 59 1.1 jakllsch // Input a string at the current cursor location, for StrLen 60 1.1 jakllsch { 61 1.1 jakllsch EFI_INPUT_KEY Key; 62 1.1 jakllsch EFI_STATUS Status; 63 1.1 jakllsch UINTN Len; 64 1.1 jakllsch 65 1.1 jakllsch if (Prompt) { 66 1.1 jakllsch ConOut->OutputString (ConOut, Prompt); 67 1.1 jakllsch } 68 1.1 jakllsch 69 1.1 jakllsch Len = 0; 70 1.1 jakllsch for (; ;) { 71 1.1 jakllsch WaitForSingleEvent (ConIn->WaitForKey, 0); 72 1.1 jakllsch 73 1.1 jakllsch Status = uefi_call_wrapper(ConIn->ReadKeyStroke, 2, ConIn, &Key); 74 1.1 jakllsch if (EFI_ERROR(Status)) { 75 1.1 jakllsch DEBUG((D_ERROR, "Input: error return from ReadKey %x\n", Status)); 76 1.1 jakllsch break; 77 1.1 jakllsch } 78 1.1 jakllsch 79 1.1 jakllsch if (Key.UnicodeChar == '\n' || 80 1.1 jakllsch Key.UnicodeChar == '\r') { 81 1.1 jakllsch break; 82 1.1 jakllsch } 83 1.1 jakllsch 84 1.1 jakllsch if (Key.UnicodeChar == '\b') { 85 1.1 jakllsch if (Len) { 86 1.1 jakllsch uefi_call_wrapper(ConOut->OutputString, 2, ConOut, L"\b \b"); 87 1.1 jakllsch Len -= 1; 88 1.1 jakllsch } 89 1.1 jakllsch continue; 90 1.1 jakllsch } 91 1.1 jakllsch 92 1.1 jakllsch if (Key.UnicodeChar >= ' ') { 93 1.1 jakllsch if (Len < StrLen-1) { 94 1.1 jakllsch InStr[Len] = Key.UnicodeChar; 95 1.1 jakllsch 96 1.1 jakllsch InStr[Len+1] = 0; 97 1.1 jakllsch uefi_call_wrapper(ConOut->OutputString, 2, ConOut, &InStr[Len]); 98 1.1 jakllsch 99 1.1 jakllsch Len += 1; 100 1.1 jakllsch } 101 1.1 jakllsch continue; 102 1.1 jakllsch } 103 1.1 jakllsch } 104 1.1 jakllsch 105 1.1 jakllsch InStr[Len] = 0; 106 1.1 jakllsch } 107