ReactOS 0.4.16-dev-122-g325d74c
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
21extern const COLORREF s_Colors[16];
22
23
24/* FUNCTIONS ******************************************************************/
25
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 */
35VOID
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;
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) &&
66 {
67 // ConDrvSetConsoleCP(Console, ConsoleInfo->CodePage, TRUE); // Output
68 // ConDrvSetConsoleCP(Console, ConsoleInfo->CodePage, FALSE); // Input
69 if (TermSetCodePage(Console, ConsoleInfo->CodePage))
70 {
72 Console->InputCodePage = ConsoleInfo->CodePage;
73 }
74 }
75
76 // FIXME: Check ConsoleInfo->WindowSize with respect to
77 // TermGetLargestConsoleWindowSize(...).
78
79 if (GetType(ActiveBuffer) == TEXTMODE_BUFFER)
80 {
81 /* Resize its active screen-buffer */
83 COORD BufSize = ConsoleInfo->ScreenBufferSize;
84
85 if (Console->FixedSize)
86 {
87 /*
88 * The console is in fixed-size mode, so we cannot resize anything
89 * at the moment. However, keep those settings somewhere so that
90 * we can try to set them up when we will be allowed to do so.
91 */
92 if (ConsoleInfo->WindowSize.X != ActiveBuffer->OldViewSize.X ||
93 ConsoleInfo->WindowSize.Y != ActiveBuffer->OldViewSize.Y)
94 {
95 ActiveBuffer->OldViewSize = ConsoleInfo->WindowSize;
96 }
97
98 /* The buffer size is not allowed to be smaller than the view size */
99 if (BufSize.X >= ActiveBuffer->OldViewSize.X && BufSize.Y >= ActiveBuffer->OldViewSize.Y)
100 {
101 if (BufSize.X != ActiveBuffer->OldScreenBufferSize.X ||
102 BufSize.Y != ActiveBuffer->OldScreenBufferSize.Y)
103 {
104 /*
105 * The console is in fixed-size mode, so we cannot resize anything
106 * at the moment. However, keep those settings somewhere so that
107 * we can try to set them up when we will be allowed to do so.
108 */
109 ActiveBuffer->OldScreenBufferSize = BufSize;
110 }
111 }
112 }
113 else
114 {
115 BOOL SizeChanged = FALSE;
116
117 /* Resize the console */
118 if (ConsoleInfo->WindowSize.X != ActiveBuffer->ViewSize.X ||
119 ConsoleInfo->WindowSize.Y != ActiveBuffer->ViewSize.Y)
120 {
121 ActiveBuffer->ViewSize = ConsoleInfo->WindowSize;
122 SizeChanged = TRUE;
123 }
124
125 /* Resize the screen-buffer */
126 if (BufSize.X != ActiveBuffer->ScreenBufferSize.X ||
127 BufSize.Y != ActiveBuffer->ScreenBufferSize.Y)
128 {
130 SizeChanged = TRUE;
131 }
132
133 if (SizeChanged) TermResizeTerminal(Console);
134 }
135
136 /* Apply foreground and background colors for both screen and popup */
138 Buffer,
139 ConsoleInfo->ScreenAttributes,
140 ConsoleInfo->PopupAttributes);
141 }
142 else // if (GetType(ActiveBuffer) == GRAPHICS_BUFFER)
143 {
144 /*
145 * In any case we do NOT modify the size of the graphics screen-buffer.
146 * We just allow resizing the view only if the new size is smaller
147 * than the older one.
148 */
149 if (Console->FixedSize)
150 {
151 /*
152 * The console is in fixed-size mode, so we cannot resize anything
153 * at the moment. However, keep those settings somewhere so that
154 * we can try to set them up when we will be allowed to do so.
155 */
156 if (ConsoleInfo->WindowSize.X <= ActiveBuffer->ViewSize.X ||
157 ConsoleInfo->WindowSize.Y <= ActiveBuffer->ViewSize.Y)
158 {
159 ActiveBuffer->OldViewSize = ConsoleInfo->WindowSize;
160 }
161 }
162 else
163 {
164 /* Resize the view if its size is bigger than the specified size */
165 if (ConsoleInfo->WindowSize.X <= ActiveBuffer->ViewSize.X ||
166 ConsoleInfo->WindowSize.Y <= ActiveBuffer->ViewSize.Y)
167 {
168 ActiveBuffer->ViewSize = ConsoleInfo->WindowSize;
169 // SizeChanged = TRUE;
170 }
171 }
172 }
173}
174
175/* EOF */
#define BufSize
Definition: FsRtlTunnel.c:28
CConsole Console
LONG NTSTATUS
Definition: precomp.h:26
Definition: bufpool.h:45
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
BOOL WINAPI IsValidCodePage(UINT codepage)
Definition: locale.c:2078
unsigned int BOOL
Definition: ntddk_ex.h:94
#define min(a, b)
Definition: monoChain.cc:55
#define TEXTMODE_BUFFER
Definition: pccons.c:21
unsigned short USHORT
Definition: pedump.c:61
CONSOLE_CURSOR_INFO CursorInfo
Definition: conio.h:75
COORD OldScreenBufferSize
Definition: conio.h:65
COORD ScreenBufferSize
Definition: conio.h:62
Definition: bl.h:1338
ULONG Y
Definition: bl.h:1340
ULONG X
Definition: bl.h:1339
static CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo
Definition: video.c:47
#define max(a, b)
Definition: svc.c:63
#define TermResizeTerminal(Console)
Definition: term.h:28
#define TermSetCodePage(Console, CodePage)
Definition: term.h:38
#define NTAPI
Definition: typedefs.h:36
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define IN
Definition: typedefs.h:39
static const COLORREF s_Colors[16]
Definition: settings.c:37
NTSTATUS ConioResizeBuffer(PCONSOLE Console, PTEXTMODE_SCREEN_BUFFER ScreenBuffer, COORD Size)
Definition: text.c:359
VOID HistoryReshapeAllBuffers(IN PCONSRV_CONSOLE Console, IN ULONG HistoryBufferSize, IN ULONG MaxNumberOfHistoryBuffers, IN BOOLEAN HistoryNoDup)
Definition: history.c:371
struct _TEXTMODE_SCREEN_BUFFER * PTEXTMODE_SCREEN_BUFFER
#define CON_SET_OUTPUT_CP(Console, CodePage)
Definition: conio.h:323
#define GetType(This)
Definition: conio.h:54
NTSTATUS NTAPI ConDrvChangeScreenBufferAttributes(IN PCONSOLE Console, IN PTEXTMODE_SCREEN_BUFFER Buffer, IN USHORT NewScreenAttrib, IN USHORT NewPopupAttrib)
Definition: text.c:497
VOID ConSrvApplyUserSettings(IN PCONSRV_CONSOLE Console, IN PCONSOLE_STATE_INFO ConsoleInfo)
Definition: settings.c:36
DWORD COLORREF
Definition: windef.h:300