https://git.reactos.org/?p=reactos.git;a=commitdiff;h=83c238e4902c064cfbb82…
commit 83c238e4902c064cfbb823d63da153f0651e363f
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sun Apr 12 19:03:30 2020 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Mon Apr 13 16:22:53 2020 +0200
[CONSRV] Convenience fixes.
- Simplify screen-buffers initialization.
- Get rid of this CONSOLE_SCREEN_BUFFER_VTBL virtual table.
- Move ConsoleInput to a proper header.
---
win32ss/user/winsrv/consrv/condrv/conoutput.c | 51 +++++++++++++++------------
win32ss/user/winsrv/consrv/condrv/graphics.c | 26 ++++----------
win32ss/user/winsrv/consrv/condrv/text.c | 27 ++++----------
win32ss/user/winsrv/consrv/coninput.h | 7 ++++
win32ss/user/winsrv/consrv/consrv.h | 6 ----
win32ss/user/winsrv/consrv/include/conio.h | 19 +++-------
6 files changed, 55 insertions(+), 81 deletions(-)
diff --git a/win32ss/user/winsrv/consrv/condrv/conoutput.c
b/win32ss/user/winsrv/consrv/condrv/conoutput.c
index bec9903f814..0870ab6d521 100644
--- a/win32ss/user/winsrv/consrv/condrv/conoutput.c
+++ b/win32ss/user/winsrv/consrv/condrv/conoutput.c
@@ -34,10 +34,11 @@ GRAPHICS_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer);
NTSTATUS
-CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
- IN PCONSOLE Console,
- IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
- IN SIZE_T Size)
+CONSOLE_SCREEN_BUFFER_Initialize(
+ OUT PCONSOLE_SCREEN_BUFFER* Buffer,
+ IN PCONSOLE Console,
+ IN CONSOLE_IO_OBJECT_TYPE Type,
+ IN SIZE_T Size)
{
if (Buffer == NULL || Console == NULL)
return STATUS_INVALID_PARAMETER;
@@ -46,32 +47,37 @@ CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
if (*Buffer == NULL) return STATUS_INSUFFICIENT_RESOURCES;
/* Initialize the header with the default type */
- ConSrvInitObject(&(*Buffer)->Header, SCREEN_BUFFER, Console);
- (*Buffer)->Vtbl = Vtbl;
+ ConSrvInitObject(&(*Buffer)->Header, Type /* SCREEN_BUFFER */, Console);
return STATUS_SUCCESS;
}
VOID
CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer)
{
- if (Buffer->Header.Type == TEXTMODE_BUFFER)
+ switch (Buffer->Header.Type)
{
+ case TEXTMODE_BUFFER:
TEXTMODE_BUFFER_Destroy(Buffer);
- }
- else if (Buffer->Header.Type == GRAPHICS_BUFFER)
- {
+ break;
+
+ case GRAPHICS_BUFFER:
GRAPHICS_BUFFER_Destroy(Buffer);
- }
- else if (Buffer->Header.Type == SCREEN_BUFFER)
+ break;
+
+ case SCREEN_BUFFER:
{
/* Free the palette handle */
- if (Buffer->PaletteHandle != NULL) DeleteObject(Buffer->PaletteHandle);
+ if (Buffer->PaletteHandle != NULL)
+ DeleteObject(Buffer->PaletteHandle);
/* Free the screen buffer memory */
ConsoleFreeHeap(Buffer);
+ break;
+ }
+
+ default:
+ break;
}
- // else
- // do_nothing;
}
// ConDrvCreateConsoleScreenBuffer
@@ -94,18 +100,19 @@ ConDrvCreateScreenBuffer(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
if (ProcessHandle == NULL)
ProcessHandle = NtCurrentProcess();
- if (BufferType == CONSOLE_TEXTMODE_BUFFER)
+ switch (BufferType)
{
+ case CONSOLE_TEXTMODE_BUFFER:
Status = TEXTMODE_BUFFER_Initialize(Buffer, Console, ProcessHandle,
(PTEXTMODE_BUFFER_INFO)ScreenBufferInfo);
- }
- else if (BufferType == CONSOLE_GRAPHICS_BUFFER)
- {
+ break;
+
+ case CONSOLE_GRAPHICS_BUFFER:
Status = GRAPHICS_BUFFER_Initialize(Buffer, Console, ProcessHandle,
(PGRAPHICS_BUFFER_INFO)ScreenBufferInfo);
- }
- else
- {
+ break;
+
+ default:
/* Never ever go there!! */
ASSERT(FALSE);
}
diff --git a/win32ss/user/winsrv/consrv/condrv/graphics.c
b/win32ss/user/winsrv/consrv/condrv/graphics.c
index 694c2f52106..3e65ee36d82 100644
--- a/win32ss/user/winsrv/consrv/condrv/graphics.c
+++ b/win32ss/user/winsrv/consrv/condrv/graphics.c
@@ -18,24 +18,13 @@
/* PRIVATE FUNCTIONS **********************************************************/
-CONSOLE_IO_OBJECT_TYPE
-GRAPHICS_BUFFER_GetType(PCONSOLE_SCREEN_BUFFER This)
-{
- // return This->Header.Type;
- return GRAPHICS_BUFFER;
-}
-
-static CONSOLE_SCREEN_BUFFER_VTBL GraphicsVtbl =
-{
- GRAPHICS_BUFFER_GetType,
-};
-
-
NTSTATUS
-CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
- IN PCONSOLE Console,
- IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
- IN SIZE_T Size);
+CONSOLE_SCREEN_BUFFER_Initialize(
+ OUT PCONSOLE_SCREEN_BUFFER* Buffer,
+ IN PCONSOLE Console,
+ IN CONSOLE_IO_OBJECT_TYPE Type,
+ IN SIZE_T Size);
+
VOID
CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer);
@@ -59,10 +48,9 @@ GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
Status = CONSOLE_SCREEN_BUFFER_Initialize((PCONSOLE_SCREEN_BUFFER*)&NewBuffer,
Console,
- &GraphicsVtbl,
+ GRAPHICS_BUFFER,
sizeof(GRAPHICS_SCREEN_BUFFER));
if (!NT_SUCCESS(Status)) return Status;
- NewBuffer->Header.Type = GRAPHICS_BUFFER;
/*
* Remember the handle to the process so that we can close or unmap
diff --git a/win32ss/user/winsrv/consrv/condrv/text.c
b/win32ss/user/winsrv/consrv/condrv/text.c
index 2b568652ec2..252d1f0f413 100644
--- a/win32ss/user/winsrv/consrv/condrv/text.c
+++ b/win32ss/user/winsrv/consrv/condrv/text.c
@@ -36,28 +36,16 @@ do { \
/* PRIVATE FUNCTIONS **********************************************************/
-CONSOLE_IO_OBJECT_TYPE
-TEXTMODE_BUFFER_GetType(PCONSOLE_SCREEN_BUFFER This)
-{
- // return This->Header.Type;
- return TEXTMODE_BUFFER;
-}
-
-static CONSOLE_SCREEN_BUFFER_VTBL TextVtbl =
-{
- TEXTMODE_BUFFER_GetType,
-};
-
-
/*static*/ VOID
ClearLineBuffer(PTEXTMODE_SCREEN_BUFFER Buff);
-
NTSTATUS
-CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
- IN PCONSOLE Console,
- IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
- IN SIZE_T Size);
+CONSOLE_SCREEN_BUFFER_Initialize(
+ OUT PCONSOLE_SCREEN_BUFFER* Buffer,
+ IN PCONSOLE Console,
+ IN CONSOLE_IO_OBJECT_TYPE Type,
+ IN SIZE_T Size);
+
VOID
CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer);
@@ -86,10 +74,9 @@ TEXTMODE_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
Status = CONSOLE_SCREEN_BUFFER_Initialize((PCONSOLE_SCREEN_BUFFER*)&NewBuffer,
Console,
- &TextVtbl,
+ TEXTMODE_BUFFER,
sizeof(TEXTMODE_SCREEN_BUFFER));
if (!NT_SUCCESS(Status)) return Status;
- NewBuffer->Header.Type = TEXTMODE_BUFFER;
NewBuffer->Buffer = ConsoleAllocHeap(HEAP_ZERO_MEMORY,
TextModeInfo->ScreenBufferSize.X *
diff --git a/win32ss/user/winsrv/consrv/coninput.h
b/win32ss/user/winsrv/consrv/coninput.h
index ea186b0fcce..52fca0b990d 100644
--- a/win32ss/user/winsrv/consrv/coninput.h
+++ b/win32ss/user/winsrv/consrv/coninput.h
@@ -9,6 +9,13 @@
#pragma once
+typedef struct ConsoleInput_t
+{
+ LIST_ENTRY ListEntry;
+ INPUT_RECORD InputEvent;
+} ConsoleInput;
+
+
NTSTATUS NTAPI
ConDrvInitInputBuffer(IN PCONSOLE Console,
IN ULONG InputBufferSize);
diff --git a/win32ss/user/winsrv/consrv/consrv.h b/win32ss/user/winsrv/consrv/consrv.h
index 546913ac050..5d9353faa32 100644
--- a/win32ss/user/winsrv/consrv/consrv.h
+++ b/win32ss/user/winsrv/consrv/consrv.h
@@ -54,12 +54,6 @@ typedef struct _CONSOLE_PROCESS_DATA
// LPTHREAD_START_ROUTINE ImeRoutine;
} CONSOLE_PROCESS_DATA, *PCONSOLE_PROCESS_DATA;
-typedef struct ConsoleInput_t
-{
- LIST_ENTRY ListEntry;
- INPUT_RECORD InputEvent;
-} ConsoleInput;
-
#include "include/conio.h"
#include "include/conio_winsrv.h"
diff --git a/win32ss/user/winsrv/consrv/include/conio.h
b/win32ss/user/winsrv/consrv/include/conio.h
index ca5bf202c56..37360b17b11 100644
--- a/win32ss/user/winsrv/consrv/include/conio.h
+++ b/win32ss/user/winsrv/consrv/include/conio.h
@@ -51,20 +51,11 @@ typedef struct _CONSOLE_IO_OBJECT
* See conoutput.c for the implementation
*/
-typedef struct _CONSOLE_SCREEN_BUFFER CONSOLE_SCREEN_BUFFER,
- *PCONSOLE_SCREEN_BUFFER;
+#define GetType(This) (((PCONSOLE_SCREEN_BUFFER)(This))->Header.Type)
-typedef struct _CONSOLE_SCREEN_BUFFER_VTBL
-{
- CONSOLE_IO_OBJECT_TYPE (*GetType)(PCONSOLE_SCREEN_BUFFER This);
-} CONSOLE_SCREEN_BUFFER_VTBL, *PCONSOLE_SCREEN_BUFFER_VTBL;
-
-#define GetType(This) (This)->Vtbl->GetType(This)
-
-struct _CONSOLE_SCREEN_BUFFER
+typedef struct _CONSOLE_SCREEN_BUFFER
{
CONSOLE_IO_OBJECT Header; /* Object header - MUST BE IN FIRST PLACE */
- PCONSOLE_SCREEN_BUFFER_VTBL Vtbl; /* Virtual table */
LIST_ENTRY ListEntry; /* Entry in console's list of buffers */
@@ -90,7 +81,7 @@ struct _CONSOLE_SCREEN_BUFFER
// USHORT ScreenDefaultAttrib; /* Default screen char attribute */
// USHORT PopupDefaultAttrib; /* Default popup char attribute */
USHORT Mode; /* Output buffer modes */
-};
+} CONSOLE_SCREEN_BUFFER, *PCONSOLE_SCREEN_BUFFER;
@@ -182,8 +173,6 @@ typedef struct _CONSOLE_INPUT_BUFFER
} CONSOLE_INPUT_BUFFER, *PCONSOLE_INPUT_BUFFER;
-typedef struct _TERMINAL TERMINAL, *PTERMINAL;
-
/*
* Structure used to hold console information
*/
@@ -204,6 +193,8 @@ typedef struct _CONSOLE_INFO
} CONSOLE_INFO, *PCONSOLE_INFO;
+typedef struct _TERMINAL TERMINAL, *PTERMINAL;
+
typedef struct _TERMINAL_VTBL
{
/*