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