https://git.reactos.org/?p=reactos.git;a=commitdiff;h=83c238e4902c064cfbb823...
commit 83c238e4902c064cfbb823d63da153f0651e363f Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Sun Apr 12 19:03:30 2020 +0200 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@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 { /*