https://git.reactos.org/?p=reactos.git;a=commitdiff;h=83c238e4902c064cfbb823d63da153f0651e363f

commit 83c238e4902c064cfbb823d63da153f0651e363f
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Sun Apr 12 19:03:30 2020 +0200
Commit:     Hermès Bélusca-Maïto <[email protected]>
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
 {
     /*

Reply via email to