mirror of
https://github.com/reactos/reactos.git
synced 2025-05-06 18:31:26 +00:00
[CONSRV] Convenience fixes.
- Simplify screen-buffers initialization. - Get rid of this CONSOLE_SCREEN_BUFFER_VTBL virtual table. - Move ConsoleInput to a proper header.
This commit is contained in:
parent
69e565891d
commit
83c238e490
6 changed files with 55 additions and 81 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 *
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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
|
||||
{
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue