ReactOS 0.4.16-dev-2491-g3dc6630
ueficon.c
Go to the documentation of this file.
1/*
2 * PROJECT: FreeLoader UEFI Support
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Console output
5 * COPYRIGHT: Copyright 2022 Justin Miller <justinmiller100@gmail.com>
6 */
7
8#include <uefildr.h>
9#include "../vidfb.h"
10
11/* GLOBALS ********************************************************************/
12
14
15static unsigned CurrentCursorX = 0;
16static unsigned CurrentCursorY = 0;
18
21static char ExtendedScanCode = 0;
22
23/* FUNCTIONS ******************************************************************/
24
25VOID
27{
29 BOOLEAN NeedScroll;
30
32
33 NeedScroll = (CurrentCursorY >= Height);
34 if (NeedScroll)
35 {
38 }
39 if (c == '\r')
40 {
42 }
43 else if (c == '\n')
44 {
46 if (!NeedScroll)
48 }
49 else if (c == '\t')
50 {
51 CurrentCursorX = (CurrentCursorX + 8) & ~7;
52 }
53 else
54 {
57 }
58 if (CurrentCursorX >= Width)
59 {
62 }
63}
64
65static
68{
69 switch (KeyIn)
70 {
71 case SCAN_UP:
72 return KEY_UP;
73 case SCAN_DOWN:
74 return KEY_DOWN;
75 case SCAN_RIGHT:
76 return KEY_RIGHT;
77 case SCAN_LEFT:
78 return KEY_LEFT;
79 case SCAN_HOME:
80 return KEY_HOME;
81 case SCAN_END:
82 return KEY_END;
83
84 // case SCAN_INSERT:
85 // break;
86
87 case SCAN_DELETE:
88 return KEY_DELETE;
89
90 // case SCAN_PAGE_UP:
91 // case SCAN_PAGE_DOWN:
92 // break;
93
94 case SCAN_F1:
95 return KEY_F1;
96 case SCAN_F2:
97 return KEY_F2;
98 case SCAN_F3:
99 return KEY_F3;
100 case SCAN_F4:
101 return KEY_F4;
102 case SCAN_F5:
103 return KEY_F5;
104 case SCAN_F6:
105 return KEY_F6;
106 case SCAN_F7:
107 return KEY_F7;
108 case SCAN_F8:
109 return KEY_F8;
110 case SCAN_F9:
111 return KEY_F9;
112 case SCAN_F10:
113 return KEY_F10;
114 case SCAN_ESC:
115 return KEY_ESC;
116 }
117 return 0;
118}
119
122{
125}
126
127int
129{
132 UCHAR KeyOutput = 0;
133
134 /* If an extended key press was detected the last time we were called
135 * then return the scan code of that key. */
136 if (ExtendedKey)
137 {
139 return ExtendedScanCode;
140 }
141
143 if (EFI_ERROR(Status))
144 return 0;
145
146 if (Key.UnicodeChar != 0)
147 {
148 KeyOutput = Key.UnicodeChar;
149 }
150 else
151 {
154 KeyOutput = KEY_EXTENDED;
155 }
156 return KeyOutput;
157}
#define SCAN_F3
Definition: SimpleTextIn.h:71
#define SCAN_LEFT
Definition: SimpleTextIn.h:62
#define SCAN_HOME
Definition: SimpleTextIn.h:63
#define SCAN_F4
Definition: SimpleTextIn.h:72
#define SCAN_F6
Definition: SimpleTextIn.h:74
#define SCAN_RIGHT
Definition: SimpleTextIn.h:61
#define SCAN_F9
Definition: SimpleTextIn.h:77
#define SCAN_UP
Definition: SimpleTextIn.h:59
#define SCAN_F8
Definition: SimpleTextIn.h:76
#define SCAN_F5
Definition: SimpleTextIn.h:73
#define SCAN_F10
Definition: SimpleTextIn.h:78
#define SCAN_ESC
Definition: SimpleTextIn.h:79
#define SCAN_DELETE
Definition: SimpleTextIn.h:66
#define SCAN_DOWN
Definition: SimpleTextIn.h:60
#define SCAN_F1
Definition: SimpleTextIn.h:69
#define SCAN_END
Definition: SimpleTextIn.h:64
#define SCAN_F2
Definition: SimpleTextIn.h:70
#define SCAN_F7
Definition: SimpleTextIn.h:75
#define EFI_ERROR(A)
Definition: UefiBaseType.h:165
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:31
#define EFI_SUCCESS
Definition: UefiBaseType.h:120
unsigned char BOOLEAN
Definition: actypes.h:127
#define COLOR_GRAY
Definition: ui.h:335
#define ATTR(cFore, cBack)
Definition: ui.h:323
#define COLOR_BLACK
Definition: ui.h:328
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
Status
Definition: gdiplustypes.h:25
const GLubyte * c
Definition: glext.h:8905
#define KEY_RIGHT
Definition: keycodes.h:48
#define KEY_DELETE
Definition: keycodes.h:41
#define KEY_DOWN
Definition: keycodes.h:46
#define KEY_F1
Definition: keycodes.h:51
#define KEY_F5
Definition: keycodes.h:55
#define KEY_F3
Definition: keycodes.h:53
#define KEY_F9
Definition: keycodes.h:59
#define KEY_EXTENDED
Definition: keycodes.h:38
#define KEY_F8
Definition: keycodes.h:58
#define KEY_F7
Definition: keycodes.h:57
#define KEY_ESC
Definition: keycodes.h:49
#define KEY_END
Definition: keycodes.h:64
#define KEY_F4
Definition: keycodes.h:54
#define KEY_F6
Definition: keycodes.h:56
#define KEY_F10
Definition: keycodes.h:60
#define KEY_F2
Definition: keycodes.h:52
#define KEY_LEFT
Definition: keycodes.h:47
#define KEY_HOME
Definition: keycodes.h:44
#define KEY_UP
Definition: keycodes.h:45
#define Unused(x)
Definition: atlwin.h:28
int UefiConsGetCh(void)
Definition: ueficon.c:128
EFI_CHECK_EVENT CheckEvent
Definition: UefiSpec.h:1824
EFI_BOOT_SERVICES * BootServices
Definition: UefiSpec.h:1959
EFI_SIMPLE_TEXT_INPUT_PROTOCOL * ConIn
Definition: UefiSpec.h:1932
EFI_INPUT_READ_KEY ReadKeyStroke
Definition: SimpleTextIn.h:125
uint32_t ULONG
Definition: typedefs.h:59
BOOLEAN UefiConsKbHit(VOID)
Definition: ueficon.c:121
static unsigned CurrentCursorX
Definition: ueficon.c:15
static UCHAR ConvertToBiosExtValue(UCHAR KeyIn)
Definition: ueficon.c:67
EFI_SYSTEM_TABLE * GlobalSystemTable
Definition: uefildr.c:16
static unsigned CurrentCursorY
Definition: ueficon.c:16
static BOOLEAN ExtendedKey
Definition: ueficon.c:20
UCHAR MachDefaultTextColor
Definition: ueficon.c:13
VOID UefiConsPutChar(int c)
Definition: ueficon.c:26
static char ExtendedScanCode
Definition: ueficon.c:21
static UCHAR CurrentAttr
Definition: ueficon.c:17
VOID UefiVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth)
Definition: uefivid.c:221
VOID UefiVideoPutChar(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: uefivid.c:215
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
VOID FbConsScrollUp(_In_ UCHAR Attr)
Definition: vidfb.c:513
unsigned char UCHAR
Definition: xmlstorage.h:181