console.c revision 1.1 1 1.1 jakllsch /* $NetBSD: console.c,v 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