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