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 { /*