ReactOS
0.4.15-dev-2155-g06f57e1
settings.c
Go to the documentation of this file.
1
/*
2
* COPYRIGHT: See COPYING in the top level directory
3
* PROJECT: ReactOS Console Server DLL
4
* FILE: win32ss/user/winsrv/consrv/settings.c
5
* PURPOSE: Console settings management
6
* PROGRAMMERS: Johannes Anderwald
7
* Hermes Belusca-Maito (hermes.belusca@sfr.fr)
8
*/
9
10
/* INCLUDES *******************************************************************/
11
12
#include "
consrv.h
"
13
#include "
history.h
"
14
#include "../concfg/font.h"
15
16
#define NDEBUG
17
#include <debug.h>
18
19
/* GLOBALS ********************************************************************/
20
21
extern
const
COLORREF
s_Colors
[16];
22
23
24
/* FUNCTIONS ******************************************************************/
25
26
NTSTATUS
NTAPI
27
ConDrvChangeScreenBufferAttributes
(
IN
PCONSOLE
Console
,
28
IN
PTEXTMODE_SCREEN_BUFFER
Buffer
,
29
IN
USHORT
NewScreenAttrib,
30
IN
USHORT
NewPopupAttrib);
31
/*
32
* NOTE: This function explicitly references Console->ActiveBuffer.
33
* It is possible that it should go into some frontend...
34
*/
35
VOID
36
ConSrvApplyUserSettings
(
37
IN
PCONSRV_CONSOLE
Console
,
38
IN
PCONSOLE_STATE_INFO
ConsoleInfo
)
39
{
40
PCONSOLE_SCREEN_BUFFER
ActiveBuffer =
Console
->ActiveBuffer;
41
42
/*
43
* Apply terminal-edition settings:
44
* - QuickEdit and Insert modes,
45
* - History settings.
46
*/
47
Console
->QuickEdit = !!
ConsoleInfo
->QuickEdit;
48
Console
->InsertMode = !!
ConsoleInfo
->InsertMode;
50
HistoryReshapeAllBuffers
(
Console
,
51
ConsoleInfo
->HistoryBufferSize,
52
ConsoleInfo
->NumberOfHistoryBuffers,
53
ConsoleInfo
->HistoryNoDup);
54
55
/* Copy the new console palette */
56
// FIXME: Possible buffer overflow if s_colors is bigger than ConsoleInfo->ColorTable.
57
RtlCopyMemory
(
Console
->Colors,
ConsoleInfo
->ColorTable,
sizeof
(
s_Colors
));
58
59
/* Apply cursor size */
60
ActiveBuffer->
CursorInfo
.
bVisible
= (
ConsoleInfo
->CursorSize != 0);
61
ActiveBuffer->
CursorInfo
.
dwSize
=
min
(
max
(
ConsoleInfo
->CursorSize, 0), 100);
62
63
/* Update the code page */
64
if
((
Console
->OutputCodePage !=
ConsoleInfo
->CodePage) &&
65
IsValidCodePage
(
ConsoleInfo
->CodePage))
66
{
67
Console
->InputCodePage =
Console
->OutputCodePage =
ConsoleInfo
->CodePage;
68
// ConDrvSetConsoleCP(Console, ConsoleInfo->CodePage, TRUE); // Output
69
// ConDrvSetConsoleCP(Console, ConsoleInfo->CodePage, FALSE); // Input
70
71
Console
->IsCJK =
IsCJKCodePage
(
Console
->OutputCodePage);
72
}
73
74
// FIXME: Check ConsoleInfo->WindowSize with respect to
75
// TermGetLargestConsoleWindowSize(...).
76
77
if
(
GetType
(ActiveBuffer) ==
TEXTMODE_BUFFER
)
78
{
79
/* Resize its active screen-buffer */
80
PTEXTMODE_SCREEN_BUFFER
Buffer
= (
PTEXTMODE_SCREEN_BUFFER
)ActiveBuffer;
81
COORD
BufSize
=
ConsoleInfo
->ScreenBufferSize;
82
83
if
(
Console
->FixedSize)
84
{
85
/*
86
* The console is in fixed-size mode, so we cannot resize anything
87
* at the moment. However, keep those settings somewhere so that
88
* we can try to set them up when we will be allowed to do so.
89
*/
90
if
(
ConsoleInfo
->WindowSize.X != ActiveBuffer->
OldViewSize
.
X
||
91
ConsoleInfo
->WindowSize.Y != ActiveBuffer->
OldViewSize
.
Y
)
92
{
93
ActiveBuffer->
OldViewSize
=
ConsoleInfo
->WindowSize;
94
}
95
96
/* The buffer size is not allowed to be smaller than the view size */
97
if
(
BufSize
.X >= ActiveBuffer->
OldViewSize
.
X
&&
BufSize
.Y >= ActiveBuffer->
OldViewSize
.
Y
)
98
{
99
if
(
BufSize
.X != ActiveBuffer->
OldScreenBufferSize
.
X
||
100
BufSize
.Y != ActiveBuffer->
OldScreenBufferSize
.
Y
)
101
{
102
/*
103
* The console is in fixed-size mode, so we cannot resize anything
104
* at the moment. However, keep those settings somewhere so that
105
* we can try to set them up when we will be allowed to do so.
106
*/
107
ActiveBuffer->
OldScreenBufferSize
=
BufSize
;
108
}
109
}
110
}
111
else
112
{
113
BOOL
SizeChanged =
FALSE
;
114
115
/* Resize the console */
116
if
(
ConsoleInfo
->WindowSize.X != ActiveBuffer->
ViewSize
.
X
||
117
ConsoleInfo
->WindowSize.Y != ActiveBuffer->
ViewSize
.
Y
)
118
{
119
ActiveBuffer->
ViewSize
=
ConsoleInfo
->WindowSize;
120
SizeChanged =
TRUE
;
121
}
122
123
/* Resize the screen-buffer */
124
if
(
BufSize
.X != ActiveBuffer->
ScreenBufferSize
.
X
||
125
BufSize
.Y != ActiveBuffer->
ScreenBufferSize
.
Y
)
126
{
127
if
(
NT_SUCCESS
(
ConioResizeBuffer
((
PCONSOLE
)
Console
,
Buffer
,
BufSize
)))
128
SizeChanged =
TRUE
;
129
}
130
131
if
(SizeChanged)
TermResizeTerminal
(
Console
);
132
}
133
134
/* Apply foreground and background colors for both screen and popup */
135
ConDrvChangeScreenBufferAttributes
((
PCONSOLE
)
Console
,
136
Buffer
,
137
ConsoleInfo
->ScreenAttributes,
138
ConsoleInfo
->PopupAttributes);
139
}
140
else
// if (GetType(ActiveBuffer) == GRAPHICS_BUFFER)
141
{
142
/*
143
* In any case we do NOT modify the size of the graphics screen-buffer.
144
* We just allow resizing the view only if the new size is smaller
145
* than the older one.
146
*/
147
if
(
Console
->FixedSize)
148
{
149
/*
150
* The console is in fixed-size mode, so we cannot resize anything
151
* at the moment. However, keep those settings somewhere so that
152
* we can try to set them up when we will be allowed to do so.
153
*/
154
if
(
ConsoleInfo
->WindowSize.X <= ActiveBuffer->
ViewSize
.
X
||
155
ConsoleInfo
->WindowSize.Y <= ActiveBuffer->
ViewSize
.
Y
)
156
{
157
ActiveBuffer->
OldViewSize
=
ConsoleInfo
->WindowSize;
158
}
159
}
160
else
161
{
162
/* Resize the view if its size is bigger than the specified size */
163
if
(
ConsoleInfo
->WindowSize.X <= ActiveBuffer->
ViewSize
.
X
||
164
ConsoleInfo
->WindowSize.Y <= ActiveBuffer->
ViewSize
.
Y
)
165
{
166
ActiveBuffer->
ViewSize
=
ConsoleInfo
->WindowSize;
167
// SizeChanged = TRUE;
168
}
169
}
170
}
171
}
172
173
/* EOF */
IN
#define IN
Definition:
typedefs.h:39
max
#define max(a, b)
Definition:
svc.c:63
TRUE
#define TRUE
Definition:
types.h:120
s_Colors
const COLORREF s_Colors[16]
Definition:
conwnd.c:109
NTSTATUS
LONG NTSTATUS
Definition:
precomp.h:26
TermResizeTerminal
#define TermResizeTerminal(Console)
Definition:
term.h:28
_CONSRV_CONSOLE
Definition:
conio_winsrv.h:111
_CONSOLE_SCREEN_BUFFER::ViewSize
COORD ViewSize
Definition:
conio.h:63
TEXTMODE_BUFFER
Definition:
conio.h:25
_CONSOLE
Definition:
conio.h:286
_CONSOLE_SCREEN_BUFFER::OldScreenBufferSize
COORD OldScreenBufferSize
Definition:
conio.h:65
consrv.h
IsCJKCodePage
#define IsCJKCodePage(CodePage)
Definition:
font.h:23
NTAPI
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition:
IoEaTest.cpp:117
FALSE
#define FALSE
Definition:
types.h:117
_CONSOLE_SCREEN_BUFFER::ScreenBufferSize
COORD ScreenBufferSize
Definition:
conio.h:62
BOOL
unsigned int BOOL
Definition:
ntddk_ex.h:94
_TEXTMODE_SCREEN_BUFFER
Definition:
conio.h:124
Buffer
Definition:
bufpool.h:45
BufSize
#define BufSize
Definition:
FsRtlTunnel.c:28
_COORD::X
ULONG X
Definition:
bl.h:1340
_CONSOLE_SCREEN_BUFFER::OldViewSize
COORD OldViewSize
Definition:
conio.h:66
HistoryReshapeAllBuffers
VOID HistoryReshapeAllBuffers(IN PCONSRV_CONSOLE Console, IN ULONG HistoryBufferSize, IN ULONG MaxNumberOfHistoryBuffers, IN BOOLEAN HistoryNoDup)
Definition:
history.c:371
NT_SUCCESS
#define NT_SUCCESS(StatCode)
Definition:
apphelp.c:32
COLORREF
DWORD COLORREF
Definition:
windef.h:300
tagCONSOLE_CURSOR_INFO::bVisible
INT bVisible
Definition:
blue.h:50
ConDrvChangeScreenBufferAttributes
NTSTATUS NTAPI ConDrvChangeScreenBufferAttributes(IN PCONSOLE Console, IN PTEXTMODE_SCREEN_BUFFER Buffer, IN USHORT NewScreenAttrib, IN USHORT NewPopupAttrib)
Definition:
text.c:497
_CONSOLE_SCREEN_BUFFER
Definition:
conio.h:56
_COORD
Definition:
bl.h:1338
GetType
#define GetType(This)
Definition:
conio.h:54
tagCONSOLE_CURSOR_INFO::dwSize
ULONG dwSize
Definition:
blue.h:49
IsValidCodePage
BOOL WINAPI IsValidCodePage(UINT CodePage)
Definition:
nls.c:1479
ConioResizeBuffer
NTSTATUS ConioResizeBuffer(PCONSOLE Console, PTEXTMODE_SCREEN_BUFFER ScreenBuffer, COORD Size)
Definition:
text.c:359
USHORT
unsigned short USHORT
Definition:
pedump.c:61
ConsoleInfo
static CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo
Definition:
video.c:47
ConSrvApplyUserSettings
VOID ConSrvApplyUserSettings(IN PCONSRV_CONSOLE Console, IN PCONSOLE_STATE_INFO ConsoleInfo)
Definition:
settings.c:36
min
#define min(a, b)
Definition:
monoChain.cc:55
Console
CConsole Console
Definition:
RegistryExplorer.cpp:54
RtlCopyMemory
#define RtlCopyMemory(Destination, Source, Length)
Definition:
typedefs.h:263
void
Definition:
nsiface.idl:2306
_CONSOLE_SCREEN_BUFFER::CursorInfo
CONSOLE_CURSOR_INFO CursorInfo
Definition:
conio.h:75
_COORD::Y
ULONG Y
Definition:
bl.h:1341
PTEXTMODE_SCREEN_BUFFER
struct _TEXTMODE_SCREEN_BUFFER * PTEXTMODE_SCREEN_BUFFER
history.h
_CONSOLE_STATE_INFO
Definition:
settings.h:27
win32ss
user
winsrv
consrv
settings.c
Generated on Mon Mar 8 2021 06:02:41 for ReactOS by
1.8.15