mirror of
https://github.com/reactos/reactos.git
synced 2025-05-07 18:56:48 +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
|
NTSTATUS
|
||||||
CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
CONSOLE_SCREEN_BUFFER_Initialize(
|
||||||
IN PCONSOLE Console,
|
OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||||
IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
|
IN PCONSOLE Console,
|
||||||
IN SIZE_T Size)
|
IN CONSOLE_IO_OBJECT_TYPE Type,
|
||||||
|
IN SIZE_T Size)
|
||||||
{
|
{
|
||||||
if (Buffer == NULL || Console == NULL)
|
if (Buffer == NULL || Console == NULL)
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
@ -46,32 +47,37 @@ CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||||
if (*Buffer == NULL) return STATUS_INSUFFICIENT_RESOURCES;
|
if (*Buffer == NULL) return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
|
||||||
/* Initialize the header with the default type */
|
/* Initialize the header with the default type */
|
||||||
ConSrvInitObject(&(*Buffer)->Header, SCREEN_BUFFER, Console);
|
ConSrvInitObject(&(*Buffer)->Header, Type /* SCREEN_BUFFER */, Console);
|
||||||
(*Buffer)->Vtbl = Vtbl;
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer)
|
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);
|
TEXTMODE_BUFFER_Destroy(Buffer);
|
||||||
}
|
break;
|
||||||
else if (Buffer->Header.Type == GRAPHICS_BUFFER)
|
|
||||||
{
|
case GRAPHICS_BUFFER:
|
||||||
GRAPHICS_BUFFER_Destroy(Buffer);
|
GRAPHICS_BUFFER_Destroy(Buffer);
|
||||||
}
|
break;
|
||||||
else if (Buffer->Header.Type == SCREEN_BUFFER)
|
|
||||||
|
case SCREEN_BUFFER:
|
||||||
{
|
{
|
||||||
/* Free the palette handle */
|
/* Free the palette handle */
|
||||||
if (Buffer->PaletteHandle != NULL) DeleteObject(Buffer->PaletteHandle);
|
if (Buffer->PaletteHandle != NULL)
|
||||||
|
DeleteObject(Buffer->PaletteHandle);
|
||||||
|
|
||||||
/* Free the screen buffer memory */
|
/* Free the screen buffer memory */
|
||||||
ConsoleFreeHeap(Buffer);
|
ConsoleFreeHeap(Buffer);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
// else
|
|
||||||
// do_nothing;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConDrvCreateConsoleScreenBuffer
|
// ConDrvCreateConsoleScreenBuffer
|
||||||
|
@ -94,18 +100,19 @@ ConDrvCreateScreenBuffer(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||||
if (ProcessHandle == NULL)
|
if (ProcessHandle == NULL)
|
||||||
ProcessHandle = NtCurrentProcess();
|
ProcessHandle = NtCurrentProcess();
|
||||||
|
|
||||||
if (BufferType == CONSOLE_TEXTMODE_BUFFER)
|
switch (BufferType)
|
||||||
{
|
{
|
||||||
|
case CONSOLE_TEXTMODE_BUFFER:
|
||||||
Status = TEXTMODE_BUFFER_Initialize(Buffer, Console, ProcessHandle,
|
Status = TEXTMODE_BUFFER_Initialize(Buffer, Console, ProcessHandle,
|
||||||
(PTEXTMODE_BUFFER_INFO)ScreenBufferInfo);
|
(PTEXTMODE_BUFFER_INFO)ScreenBufferInfo);
|
||||||
}
|
break;
|
||||||
else if (BufferType == CONSOLE_GRAPHICS_BUFFER)
|
|
||||||
{
|
case CONSOLE_GRAPHICS_BUFFER:
|
||||||
Status = GRAPHICS_BUFFER_Initialize(Buffer, Console, ProcessHandle,
|
Status = GRAPHICS_BUFFER_Initialize(Buffer, Console, ProcessHandle,
|
||||||
(PGRAPHICS_BUFFER_INFO)ScreenBufferInfo);
|
(PGRAPHICS_BUFFER_INFO)ScreenBufferInfo);
|
||||||
}
|
break;
|
||||||
else
|
|
||||||
{
|
default:
|
||||||
/* Never ever go there!! */
|
/* Never ever go there!! */
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,24 +18,13 @@
|
||||||
|
|
||||||
/* PRIVATE FUNCTIONS **********************************************************/
|
/* 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
|
NTSTATUS
|
||||||
CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
CONSOLE_SCREEN_BUFFER_Initialize(
|
||||||
IN PCONSOLE Console,
|
OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||||
IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
|
IN PCONSOLE Console,
|
||||||
IN SIZE_T Size);
|
IN CONSOLE_IO_OBJECT_TYPE Type,
|
||||||
|
IN SIZE_T Size);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer);
|
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,
|
Status = CONSOLE_SCREEN_BUFFER_Initialize((PCONSOLE_SCREEN_BUFFER*)&NewBuffer,
|
||||||
Console,
|
Console,
|
||||||
&GraphicsVtbl,
|
GRAPHICS_BUFFER,
|
||||||
sizeof(GRAPHICS_SCREEN_BUFFER));
|
sizeof(GRAPHICS_SCREEN_BUFFER));
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
NewBuffer->Header.Type = GRAPHICS_BUFFER;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Remember the handle to the process so that we can close or unmap
|
* Remember the handle to the process so that we can close or unmap
|
||||||
|
|
|
@ -36,28 +36,16 @@ do { \
|
||||||
|
|
||||||
/* PRIVATE FUNCTIONS **********************************************************/
|
/* 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
|
/*static*/ VOID
|
||||||
ClearLineBuffer(PTEXTMODE_SCREEN_BUFFER Buff);
|
ClearLineBuffer(PTEXTMODE_SCREEN_BUFFER Buff);
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
CONSOLE_SCREEN_BUFFER_Initialize(
|
||||||
IN PCONSOLE Console,
|
OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||||
IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
|
IN PCONSOLE Console,
|
||||||
IN SIZE_T Size);
|
IN CONSOLE_IO_OBJECT_TYPE Type,
|
||||||
|
IN SIZE_T Size);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer);
|
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,
|
Status = CONSOLE_SCREEN_BUFFER_Initialize((PCONSOLE_SCREEN_BUFFER*)&NewBuffer,
|
||||||
Console,
|
Console,
|
||||||
&TextVtbl,
|
TEXTMODE_BUFFER,
|
||||||
sizeof(TEXTMODE_SCREEN_BUFFER));
|
sizeof(TEXTMODE_SCREEN_BUFFER));
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
NewBuffer->Header.Type = TEXTMODE_BUFFER;
|
|
||||||
|
|
||||||
NewBuffer->Buffer = ConsoleAllocHeap(HEAP_ZERO_MEMORY,
|
NewBuffer->Buffer = ConsoleAllocHeap(HEAP_ZERO_MEMORY,
|
||||||
TextModeInfo->ScreenBufferSize.X *
|
TextModeInfo->ScreenBufferSize.X *
|
||||||
|
|
|
@ -9,6 +9,13 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
typedef struct ConsoleInput_t
|
||||||
|
{
|
||||||
|
LIST_ENTRY ListEntry;
|
||||||
|
INPUT_RECORD InputEvent;
|
||||||
|
} ConsoleInput;
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvInitInputBuffer(IN PCONSOLE Console,
|
ConDrvInitInputBuffer(IN PCONSOLE Console,
|
||||||
IN ULONG InputBufferSize);
|
IN ULONG InputBufferSize);
|
||||||
|
|
|
@ -54,12 +54,6 @@ typedef struct _CONSOLE_PROCESS_DATA
|
||||||
// LPTHREAD_START_ROUTINE ImeRoutine;
|
// LPTHREAD_START_ROUTINE ImeRoutine;
|
||||||
} CONSOLE_PROCESS_DATA, *PCONSOLE_PROCESS_DATA;
|
} CONSOLE_PROCESS_DATA, *PCONSOLE_PROCESS_DATA;
|
||||||
|
|
||||||
typedef struct ConsoleInput_t
|
|
||||||
{
|
|
||||||
LIST_ENTRY ListEntry;
|
|
||||||
INPUT_RECORD InputEvent;
|
|
||||||
} ConsoleInput;
|
|
||||||
|
|
||||||
#include "include/conio.h"
|
#include "include/conio.h"
|
||||||
#include "include/conio_winsrv.h"
|
#include "include/conio_winsrv.h"
|
||||||
|
|
||||||
|
|
|
@ -51,20 +51,11 @@ typedef struct _CONSOLE_IO_OBJECT
|
||||||
* See conoutput.c for the implementation
|
* See conoutput.c for the implementation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct _CONSOLE_SCREEN_BUFFER CONSOLE_SCREEN_BUFFER,
|
#define GetType(This) (((PCONSOLE_SCREEN_BUFFER)(This))->Header.Type)
|
||||||
*PCONSOLE_SCREEN_BUFFER;
|
|
||||||
|
|
||||||
typedef struct _CONSOLE_SCREEN_BUFFER_VTBL
|
typedef struct _CONSOLE_SCREEN_BUFFER
|
||||||
{
|
|
||||||
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
|
|
||||||
{
|
{
|
||||||
CONSOLE_IO_OBJECT Header; /* Object header - MUST BE IN FIRST PLACE */
|
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 */
|
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 ScreenDefaultAttrib; /* Default screen char attribute */
|
||||||
// USHORT PopupDefaultAttrib; /* Default popup char attribute */
|
// USHORT PopupDefaultAttrib; /* Default popup char attribute */
|
||||||
USHORT Mode; /* Output buffer modes */
|
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;
|
} CONSOLE_INPUT_BUFFER, *PCONSOLE_INPUT_BUFFER;
|
||||||
|
|
||||||
|
|
||||||
typedef struct _TERMINAL TERMINAL, *PTERMINAL;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Structure used to hold console information
|
* Structure used to hold console information
|
||||||
*/
|
*/
|
||||||
|
@ -204,6 +193,8 @@ typedef struct _CONSOLE_INFO
|
||||||
|
|
||||||
} CONSOLE_INFO, *PCONSOLE_INFO;
|
} CONSOLE_INFO, *PCONSOLE_INFO;
|
||||||
|
|
||||||
|
typedef struct _TERMINAL TERMINAL, *PTERMINAL;
|
||||||
|
|
||||||
typedef struct _TERMINAL_VTBL
|
typedef struct _TERMINAL_VTBL
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue