ReactOS 0.4.16-dev-197-g92996da
settings.c File Reference
#include "consrv.h"
#include "history.h"
#include "../concfg/font.h"
#include <debug.h>
Include dependency graph for settings.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

NTSTATUS NTAPI ConDrvChangeScreenBufferAttributes (IN PCONSOLE Console, IN PTEXTMODE_SCREEN_BUFFER Buffer, IN USHORT NewScreenAttrib, IN USHORT NewPopupAttrib)
 
VOID ConSrvApplyUserSettings (IN PCONSRV_CONSOLE Console, IN PCONSOLE_STATE_INFO ConsoleInfo)
 

Variables

const COLORREF s_Colors [16]
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 16 of file settings.c.

Function Documentation

◆ ConDrvChangeScreenBufferAttributes()

NTSTATUS NTAPI ConDrvChangeScreenBufferAttributes ( IN PCONSOLE  Console,
IN PTEXTMODE_SCREEN_BUFFER  Buffer,
IN USHORT  NewScreenAttrib,
IN USHORT  NewPopupAttrib 
)

Definition at line 497 of file text.c.

501{
502 USHORT X, Y;
504
505 COORD TopLeft = {0};
506 ULONG NumCodesToWrite;
507 USHORT OldScreenAttrib, OldPopupAttrib;
508
509 if (Console == NULL || Buffer == NULL)
510 {
512 }
513
514 /* Validity check */
515 ASSERT(Console == Buffer->Header.Console);
516
517 /* Sanitize the new attributes */
518 NewScreenAttrib &= ~COMMON_LVB_SBCSDBCS;
519 NewPopupAttrib &= ~COMMON_LVB_SBCSDBCS;
520
521 NumCodesToWrite = Buffer->ScreenBufferSize.X * Buffer->ScreenBufferSize.Y;
522 OldScreenAttrib = Buffer->ScreenDefaultAttrib;
523 OldPopupAttrib = Buffer->PopupDefaultAttrib;
524
525 for (Y = 0; Y < Buffer->ScreenBufferSize.Y; ++Y)
526 {
528 for (X = 0; X < Buffer->ScreenBufferSize.X; ++X)
529 {
530 /*
531 * Change the current colors only if they are the old ones.
532 */
533
534 /* Foreground color */
535 if ((Ptr->Attributes & 0x0F) == (OldScreenAttrib & 0x0F))
536 Ptr->Attributes = (Ptr->Attributes & 0xFFF0) | (NewScreenAttrib & 0x0F);
537 if ((Ptr->Attributes & 0x0F) == (OldPopupAttrib & 0x0F))
538 Ptr->Attributes = (Ptr->Attributes & 0xFFF0) | (NewPopupAttrib & 0x0F);
539
540 /* Background color */
541 if ((Ptr->Attributes & 0xF0) == (OldScreenAttrib & 0xF0))
542 Ptr->Attributes = (Ptr->Attributes & 0xFF0F) | (NewScreenAttrib & 0xF0);
543 if ((Ptr->Attributes & 0xF0) == (OldPopupAttrib & 0xF0))
544 Ptr->Attributes = (Ptr->Attributes & 0xFF0F) | (NewPopupAttrib & 0xF0);
545
546 ++Ptr;
547 }
548 }
549
550 /* Save foreground and background attributes for both screen and popup */
551 Buffer->ScreenDefaultAttrib = NewScreenAttrib;
552 Buffer->PopupDefaultAttrib = NewPopupAttrib;
553
554 /* Refresh the display if needed */
555 if ((PCONSOLE_SCREEN_BUFFER)Buffer == Console->ActiveBuffer)
556 {
558 ConioComputeUpdateRect(Buffer, &UpdateRect, &TopLeft, NumCodesToWrite);
560 }
561
562 return STATUS_SUCCESS;
563}
CConsole Console
Definition: bufpool.h:45
#define NULL
Definition: types.h:112
#define Y(I)
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
Definition: fsrtlfuncs.h:898
#define X(b, s)
#define ASSERT(a)
Definition: mode.c:44
unsigned short USHORT
Definition: pedump.c:61
#define STATUS_SUCCESS
Definition: shellext.h:65
Definition: bl.h:1338
#define TermDrawRegion(Console, Region)
Definition: term.h:22
static int UpdateRect(TreeListData *pData, unsigned uItem, unsigned uSub)
Definition: treelist.c:1529
uint32_t ULONG
Definition: typedefs.h:59
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
static VOID ConioComputeUpdateRect(IN PTEXTMODE_SCREEN_BUFFER Buff, IN OUT PSMALL_RECT UpdateRect, IN PCOORD Start, IN UINT Length)
Definition: text.c:165
PCHAR_INFO ConioCoordToPointer(PTEXTMODE_SCREEN_BUFFER Buff, ULONG X, ULONG Y)
Definition: text.c:143

Referenced by ConSrvApplyUserSettings().

◆ ConSrvApplyUserSettings()

VOID ConSrvApplyUserSettings ( IN PCONSRV_CONSOLE  Console,
IN PCONSOLE_STATE_INFO  ConsoleInfo 
)

Console->InputBufferSize = 0;

Definition at line 36 of file settings.c.

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}
#define BufSize
Definition: FsRtlTunnel.c:28
#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:2079
unsigned int BOOL
Definition: ntddk_ex.h:94
#define min(a, b)
Definition: monoChain.cc:55
#define TEXTMODE_BUFFER
Definition: pccons.c:21
CONSOLE_CURSOR_INFO CursorInfo
Definition: conio.h:75
COORD OldScreenBufferSize
Definition: conio.h:65
COORD ScreenBufferSize
Definition: conio.h:62
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 RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
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

Referenced by GuiApplyUserSettings().

Variable Documentation

◆ s_Colors

const COLORREF s_Colors[16]
extern

Definition at line 109 of file conwnd.c.