ReactOS 0.4.16-dev-2104-gb84fa49
console.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Boot Video Driver
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Platform-independent console functionality
5 * COPYRIGHT: Copyright 2010 Gregor Schneider <gregor.schneider@reactos.org>
6 * Copyright 2011 Rafal Harabien <rafalh@reactos.org>
7 * Copyright 2020 Stanislav Motylkov <x86corez@gmail.com>
8 */
9
10#include "precomp.h"
11
12/* GLOBALS ********************************************************************/
13
18
20
21/* PUBLIC FUNCTIONS ***********************************************************/
22
23VOID
26 _In_ BOOLEAN SetMode)
27{
28 /* Clear the current position */
29 VidpCurrentX = 0;
30 VidpCurrentY = 0;
31
32 /* Invoke the hardware-specific routine */
33 ResetDisplay(SetMode);
34}
35
40{
41 ULONG OldColor;
42
43 /* Save the old color and set the new one */
44 OldColor = VidpTextColor;
46 return OldColor;
47}
48
49VOID
52 _In_ ULONG Left,
54 _In_ ULONG Right,
56{
57 /* Assert alignment */
58 ASSERT((Left % BOOTCHAR_WIDTH) == 0);
59 ASSERT((Right % BOOTCHAR_WIDTH) == BOOTCHAR_WIDTH - 1);
60
61 /* Set the scroll region */
64 VidpScrollRegion.Right = Right;
66
67 /* Set the current X and Y */
68 VidpCurrentX = Left;
70}
71
72VOID
76 _In_ ULONG Left,
78 _In_ BOOLEAN Transparent)
79{
80 ULONG BackColor;
81
82 /*
83 * If the caller wanted transparent, then send the special value (16),
84 * else use our default and call the helper routine.
85 */
86 BackColor = Transparent ? BV_COLOR_NONE : BV_COLOR_LIGHT_CYAN;
87
88 /* Loop every character and adjust the position */
89 for (; *String; ++String, Left += BOOTCHAR_WIDTH)
90 {
91 /* Display a character */
93 }
94}
95
96VOID
100{
101 /* Start looping the string */
102 for (; *String; ++String)
103 {
104 /* Treat new-line separately */
105 if (*String == '\n')
106 {
107 /* Modify Y position */
110 {
111 /* Scroll the view and clear the current row */
115 }
116 else
117 {
118 /* Preserve the current row */
120 }
121
122 /* Update current X */
124
125 /* No need to clear this row */
126 ClearRow = FALSE;
127 }
128 else if (*String == '\r')
129 {
130 /* Update current X */
132
133 /* If a new-line does not follow we will clear the current row */
134 if (String[1] != '\n')
135 ClearRow = TRUE;
136 }
137 else
138 {
139 /* Clear the current row if we had a return-carriage without a new-line */
140 if (ClearRow)
141 {
143 ClearRow = FALSE;
144 }
145
146 /* Display this character */
149
150 /* Check if we should scroll */
152 {
153 /* Update Y position and check if we should scroll it */
156 {
157 /* Scroll the view and clear the current row */
161 }
162 else
163 {
164 /* Preserve the current row */
166 }
167
168 /* Update current X */
170 }
171 }
172 }
173}
unsigned char BOOLEAN
VOID PreserveRow(_In_ ULONG CurrentTop, _In_ ULONG TopDelta, _In_ BOOLEAN Restore)
Definition: bootvid.c:159
VOID ResetDisplay(_In_ BOOLEAN SetMode)
Definition: bootvid.c:263
VOID DisplayCharacter(_In_ CHAR Character, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG TextColor, _In_ ULONG BackColor)
Definition: bootvid.c:67
VOID DoScroll(_In_ ULONG Scroll)
Definition: bootvid.c:112
static LPHIST_ENTRY Bottom
Definition: history.c:54
static LPHIST_ENTRY Top
Definition: history.c:53
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
VOID NTAPI VidDisplayStringXY(_In_ PCSTR String, _In_ ULONG Left, _In_ ULONG Top, _In_ BOOLEAN Transparent)
Definition: console.c:74
VOID NTAPI VidDisplayString(_In_ PCSTR String)
Definition: console.c:98
ULONG NTAPI VidSetTextColor(_In_ ULONG Color)
Definition: console.c:38
UCHAR VidpTextColor
Definition: console.c:14
VOID NTAPI VidResetDisplay(_In_ BOOLEAN SetMode)
Definition: console.c:25
ULONG VidpCurrentY
Definition: console.c:16
ULONG VidpCurrentX
Definition: console.c:15
URECT VidpScrollRegion
Definition: console.c:17
VOID NTAPI VidSetScrollRegion(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom)
Definition: console.c:51
static BOOLEAN ClearRow
Definition: console.c:19
#define BOOTCHAR_HEIGHT
Definition: precomp.h:35
#define BOOTCHAR_WIDTH
Definition: precomp.h:36
#define ASSERT(a)
Definition: mode.c:44
#define _In_
Definition: no_sal2.h:158
#define SCREEN_WIDTH
Definition: pc98video.c:24
#define SCREEN_HEIGHT
Definition: pc98video.c:25
#define BV_COLOR_WHITE
Definition: display.h:30
#define BV_COLOR_LIGHT_CYAN
Definition: display.h:29
#define BV_COLOR_LIGHT_BLUE
Definition: display.h:27
#define BV_COLOR_NONE
Definition: display.h:31
Definition: precomp.h:61
ULONG Right
Definition: precomp.h:64
ULONG Top
Definition: precomp.h:63
ULONG Bottom
Definition: precomp.h:65
ULONG Left
Definition: precomp.h:62
#define NTAPI
Definition: typedefs.h:36
const char * PCSTR
Definition: typedefs.h:52
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2439
unsigned char UCHAR
Definition: xmlstorage.h:181