mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:52:57 +00:00
[CONSRV]
Terminals are for consoles, and frontends for a given win32 terminal. Start to clarify this situation in the code. Work in progress. svn path=/branches/condrv_restructure/; revision=63123
This commit is contained in:
parent
e26a117d1f
commit
9b17c1b99d
8 changed files with 240 additions and 320 deletions
|
@ -187,12 +187,11 @@ RemoveConsoleByPointer(IN PCONSOLE Console)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* For resetting the frontend - defined in dummyfrontend.c */
|
|
||||||
VOID ResetFrontEnd(IN PCONSOLE Console);
|
|
||||||
|
|
||||||
|
|
||||||
/* PRIVATE FUNCTIONS **********************************************************/
|
/* PRIVATE FUNCTIONS **********************************************************/
|
||||||
|
|
||||||
|
/* For resetting the terminal - defined in dummyterm.c */
|
||||||
|
VOID ResetTerminal(IN PCONSOLE Console);
|
||||||
|
|
||||||
VOID NTAPI
|
VOID NTAPI
|
||||||
ConDrvPause(PCONSOLE Console)
|
ConDrvPause(PCONSOLE Console)
|
||||||
{
|
{
|
||||||
|
@ -417,12 +416,12 @@ ConDrvInitConsole(OUT PHANDLE NewConsoleHandle,
|
||||||
Console->ReferenceCount = 0;
|
Console->ReferenceCount = 0;
|
||||||
InitializeCriticalSection(&Console->Lock);
|
InitializeCriticalSection(&Console->Lock);
|
||||||
|
|
||||||
/* Initialize the frontend interface */
|
/* Initialize the terminal interface */
|
||||||
ResetFrontEnd(Console);
|
ResetTerminal(Console);
|
||||||
|
|
||||||
memcpy(Console->Colors, ConsoleInfo->Colors, sizeof(ConsoleInfo->Colors));
|
memcpy(Console->Colors, ConsoleInfo->Colors, sizeof(ConsoleInfo->Colors));
|
||||||
Console->ConsoleSize = ConsoleInfo->ConsoleSize;
|
Console->ConsoleSize = ConsoleInfo->ConsoleSize;
|
||||||
Console->FixedSize = FALSE; // Value by default; is reseted by the front-ends if needed.
|
Console->FixedSize = FALSE; // Value by default; is reseted by the terminals if needed.
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the input buffer
|
* Initialize the input buffer
|
||||||
|
@ -538,63 +537,63 @@ ConDrvInitConsole(OUT PHANDLE NewConsoleHandle,
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvRegisterFrontEnd(IN PCONSOLE Console,
|
ConDrvRegisterTerminal(IN PCONSOLE Console,
|
||||||
IN PFRONTEND FrontEnd)
|
IN PTERMINAL Terminal)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
if (Console == NULL || FrontEnd == NULL)
|
if (Console == NULL || Terminal == NULL)
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
/* FIXME: Lock the console before ?? */
|
/* FIXME: Lock the console before ?? */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Attach the frontend to the console. Use now the FrontEndIFace of the console,
|
* Attach the terminal to the console. Use now the TermIFace of the console,
|
||||||
* and not the user-defined temporary FrontEnd pointer.
|
* and not the user-defined temporary Terminal pointer.
|
||||||
*/
|
*/
|
||||||
Console->FrontEndIFace = *FrontEnd;
|
Console->TermIFace = *Terminal;
|
||||||
Console->FrontEndIFace.Console = Console;
|
Console->TermIFace.Console = Console;
|
||||||
|
|
||||||
/* Initialize the frontend AFTER having attached it to the console */
|
/* Initialize the terminal AFTER having attached it to the console */
|
||||||
DPRINT("Finish initialization of frontend\n");
|
DPRINT("Finish initialization of terminal\n");
|
||||||
Status = Console->FrontEndIFace.Vtbl->InitFrontEnd(&Console->FrontEndIFace, Console);
|
Status = Console->TermIFace.Vtbl->InitTerminal(&Console->TermIFace, Console);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("FrontEnd initialization failed, Status = 0x%08lx\n", Status);
|
DPRINT1("Terminal initialization failed, Status = 0x%08lx\n", Status);
|
||||||
|
|
||||||
/* We failed, detach the frontend from the console */
|
/* We failed, detach the terminal from the console */
|
||||||
FrontEnd->Console = NULL; // For the caller
|
Terminal->Console = NULL; // For the caller
|
||||||
ResetFrontEnd(Console);
|
ResetTerminal(Console);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy buffer contents to screen */
|
/* Copy buffer contents to screen */
|
||||||
// FrontEnd.Draw();
|
// Terminal.Draw();
|
||||||
// ConioDrawConsole(Console);
|
// ConioDrawConsole(Console);
|
||||||
DPRINT("Console drawn\n");
|
DPRINT("Console drawn\n");
|
||||||
|
|
||||||
DPRINT("Terminal FrontEnd initialization done\n");
|
DPRINT("Terminal initialization done\n");
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvDeregisterFrontEnd(IN PCONSOLE Console)
|
ConDrvDeregisterTerminal(IN PCONSOLE Console)
|
||||||
{
|
{
|
||||||
if (Console == NULL) return STATUS_INVALID_PARAMETER;
|
if (Console == NULL) return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
/* FIXME: Lock the console before ?? */
|
/* FIXME: Lock the console before ?? */
|
||||||
|
|
||||||
/* Deinitialize the frontend BEFORE detaching it from the console */
|
/* Deinitialize the terminal BEFORE detaching it from the console */
|
||||||
Console->FrontEndIFace.Vtbl->DeinitFrontEnd(&Console->FrontEndIFace/*, Console*/);
|
Console->TermIFace.Vtbl->DeinitTerminal(&Console->TermIFace/*, Console*/);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Detach the frontend from the console:
|
* Detach the terminal from the console:
|
||||||
* reinitialize the frontend interface.
|
* reinitialize the terminal interface.
|
||||||
*/
|
*/
|
||||||
ResetFrontEnd(Console);
|
ResetTerminal(Console);
|
||||||
|
|
||||||
DPRINT("Terminal FrontEnd unregistered\n");
|
DPRINT("Terminal unregistered\n");
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -643,7 +642,7 @@ ConDrvDeleteConsole(IN PCONSOLE Console)
|
||||||
|
|
||||||
/* Cleanup the UI-oriented part */
|
/* Cleanup the UI-oriented part */
|
||||||
DPRINT("Deregister console\n");
|
DPRINT("Deregister console\n");
|
||||||
ConDrvDeregisterFrontEnd(Console);
|
ConDrvDeregisterTerminal(Console);
|
||||||
DPRINT("Console deregistered\n");
|
DPRINT("Console deregistered\n");
|
||||||
|
|
||||||
/***
|
/***
|
||||||
|
|
|
@ -14,27 +14,25 @@
|
||||||
/* DUMMY TERMINAL INTERFACE ***************************************************/
|
/* DUMMY TERMINAL INTERFACE ***************************************************/
|
||||||
|
|
||||||
static NTSTATUS NTAPI
|
static NTSTATUS NTAPI
|
||||||
DummyInitFrontEnd(IN OUT PFRONTEND This,
|
DummyInitTerminal(IN OUT PTERMINAL This,
|
||||||
IN PCONSOLE Console)
|
IN PCONSOLE Console)
|
||||||
{
|
{
|
||||||
/* Load some settings ?? */
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyDeinitFrontEnd(IN OUT PFRONTEND This)
|
DummyDeinitTerminal(IN OUT PTERMINAL This)
|
||||||
{
|
{
|
||||||
/* Free some settings ?? */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyDrawRegion(IN OUT PFRONTEND This,
|
DummyDrawRegion(IN OUT PTERMINAL This,
|
||||||
SMALL_RECT* Region)
|
SMALL_RECT* Region)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyWriteStream(IN OUT PFRONTEND This,
|
DummyWriteStream(IN OUT PTERMINAL This,
|
||||||
SMALL_RECT* Region,
|
SMALL_RECT* Region,
|
||||||
SHORT CursorStartX,
|
SHORT CursorStartX,
|
||||||
SHORT CursorStartY,
|
SHORT CursorStartY,
|
||||||
|
@ -45,15 +43,15 @@ DummyWriteStream(IN OUT PFRONTEND This,
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
DummySetCursorInfo(IN OUT PFRONTEND This,
|
DummySetCursorInfo(IN OUT PTERMINAL This,
|
||||||
PCONSOLE_SCREEN_BUFFER Buff)
|
PCONSOLE_SCREEN_BUFFER ScreenBuffer)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
DummySetScreenInfo(IN OUT PFRONTEND This,
|
DummySetScreenInfo(IN OUT PTERMINAL This,
|
||||||
PCONSOLE_SCREEN_BUFFER Buff,
|
PCONSOLE_SCREEN_BUFFER ScreenBuffer,
|
||||||
SHORT OldCursorX,
|
SHORT OldCursorX,
|
||||||
SHORT OldCursorY)
|
SHORT OldCursorY)
|
||||||
{
|
{
|
||||||
|
@ -61,122 +59,60 @@ DummySetScreenInfo(IN OUT PFRONTEND This,
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyResizeTerminal(IN OUT PFRONTEND This)
|
DummyResizeTerminal(IN OUT PTERMINAL This)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummySetActiveScreenBuffer(IN OUT PFRONTEND This)
|
DummySetActiveScreenBuffer(IN OUT PTERMINAL This)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyReleaseScreenBuffer(IN OUT PFRONTEND This,
|
DummyReleaseScreenBuffer(IN OUT PTERMINAL This,
|
||||||
IN PCONSOLE_SCREEN_BUFFER ScreenBuffer)
|
IN PCONSOLE_SCREEN_BUFFER ScreenBuffer)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL NTAPI
|
|
||||||
DummyProcessKeyCallback(IN OUT PFRONTEND This,
|
|
||||||
MSG* msg,
|
|
||||||
BYTE KeyStateMenu,
|
|
||||||
DWORD ShiftState,
|
|
||||||
UINT VirtualKeyCode,
|
|
||||||
BOOL Down)
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyRefreshInternalInfo(IN OUT PFRONTEND This)
|
DummyChangeTitle(IN OUT PTERMINAL This)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyChangeTitle(IN OUT PFRONTEND This)
|
DummyGetLargestConsoleWindowSize(IN OUT PTERMINAL This,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL NTAPI
|
|
||||||
DummyChangeIcon(IN OUT PFRONTEND This,
|
|
||||||
HICON IconHandle)
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static HWND NTAPI
|
|
||||||
DummyGetConsoleWindowHandle(IN OUT PFRONTEND This)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VOID NTAPI
|
|
||||||
DummyGetLargestConsoleWindowSize(IN OUT PFRONTEND This,
|
|
||||||
PCOORD pSize)
|
PCOORD pSize)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
DummyGetSelectionInfo(IN OUT PFRONTEND This,
|
DummyGetSelectionInfo(IN OUT PTERMINAL This,
|
||||||
PCONSOLE_SELECTION_INFO pSelectionInfo)
|
PCONSOLE_SELECTION_INFO pSelectionInfo)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
DummySetPalette(IN OUT PFRONTEND This,
|
DummySetPalette(IN OUT PTERMINAL This,
|
||||||
HPALETTE PaletteHandle,
|
HPALETTE PaletteHandle,
|
||||||
UINT PaletteUsage)
|
UINT PaletteUsage)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG NTAPI
|
|
||||||
DummyGetDisplayMode(IN OUT PFRONTEND This)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL NTAPI
|
|
||||||
DummySetDisplayMode(IN OUT PFRONTEND This,
|
|
||||||
ULONG NewMode)
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static INT NTAPI
|
static INT NTAPI
|
||||||
DummyShowMouseCursor(IN OUT PFRONTEND This,
|
DummyShowMouseCursor(IN OUT PTERMINAL This,
|
||||||
BOOL Show)
|
BOOL Show)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL NTAPI
|
static TERMINAL_VTBL DummyVtbl =
|
||||||
DummySetMouseCursor(IN OUT PFRONTEND This,
|
|
||||||
HCURSOR CursorHandle)
|
|
||||||
{
|
{
|
||||||
return TRUE;
|
DummyInitTerminal,
|
||||||
}
|
DummyDeinitTerminal,
|
||||||
|
|
||||||
static HMENU NTAPI
|
|
||||||
DummyMenuControl(IN OUT PFRONTEND This,
|
|
||||||
UINT CmdIdLow,
|
|
||||||
UINT CmdIdHigh)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL NTAPI
|
|
||||||
DummySetMenuClose(IN OUT PFRONTEND This,
|
|
||||||
BOOL Enable)
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static FRONTEND_VTBL DummyVtbl =
|
|
||||||
{
|
|
||||||
DummyInitFrontEnd,
|
|
||||||
DummyDeinitFrontEnd,
|
|
||||||
DummyDrawRegion,
|
DummyDrawRegion,
|
||||||
DummyWriteStream,
|
DummyWriteStream,
|
||||||
DummySetCursorInfo,
|
DummySetCursorInfo,
|
||||||
|
@ -184,30 +120,21 @@ static FRONTEND_VTBL DummyVtbl =
|
||||||
DummyResizeTerminal,
|
DummyResizeTerminal,
|
||||||
DummySetActiveScreenBuffer,
|
DummySetActiveScreenBuffer,
|
||||||
DummyReleaseScreenBuffer,
|
DummyReleaseScreenBuffer,
|
||||||
DummyProcessKeyCallback,
|
|
||||||
DummyRefreshInternalInfo,
|
|
||||||
DummyChangeTitle,
|
DummyChangeTitle,
|
||||||
DummyChangeIcon,
|
|
||||||
DummyGetConsoleWindowHandle,
|
|
||||||
DummyGetLargestConsoleWindowSize,
|
DummyGetLargestConsoleWindowSize,
|
||||||
DummyGetSelectionInfo,
|
// DummyGetSelectionInfo,
|
||||||
DummySetPalette,
|
DummySetPalette,
|
||||||
DummyGetDisplayMode,
|
|
||||||
DummySetDisplayMode,
|
|
||||||
DummyShowMouseCursor,
|
DummyShowMouseCursor,
|
||||||
DummySetMouseCursor,
|
|
||||||
DummyMenuControl,
|
|
||||||
DummySetMenuClose,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
ResetFrontEnd(IN PCONSOLE Console)
|
ResetTerminal(IN PCONSOLE Console)
|
||||||
{
|
{
|
||||||
if (!Console) return;
|
if (!Console) return;
|
||||||
|
|
||||||
/* Reinitialize the frontend interface */
|
/* Reinitialize the terminal interface */
|
||||||
RtlZeroMemory(&Console->FrontEndIFace, sizeof(Console->FrontEndIFace));
|
RtlZeroMemory(&Console->TermIFace, sizeof(Console->TermIFace));
|
||||||
Console->FrontEndIFace.Vtbl = &DummyVtbl;
|
Console->TermIFace.Vtbl = &DummyVtbl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -82,13 +82,13 @@ ConSrvReleaseConsole(PCONSOLE Console,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* static */ NTSTATUS
|
NTSTATUS NTAPI
|
||||||
ConSrvLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
|
ConSrvInitTerminal(IN OUT PTERMINAL Terminal,
|
||||||
IN OUT PCONSOLE_INFO ConsoleInfo,
|
IN OUT PCONSOLE_INFO ConsoleInfo,
|
||||||
IN OUT PVOID ExtraConsoleInfo,
|
IN OUT PVOID ExtraConsoleInfo,
|
||||||
IN ULONG ProcessId);
|
IN ULONG ProcessId);
|
||||||
/* static */ NTSTATUS
|
NTSTATUS NTAPI
|
||||||
ConSrvUnloadFrontEnd(IN PFRONTEND FrontEnd);
|
ConSrvDeinitTerminal(IN OUT PTERMINAL Terminal);
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
|
ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
|
||||||
|
@ -102,7 +102,7 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
|
||||||
CONSOLE_INFO ConsoleInfo;
|
CONSOLE_INFO ConsoleInfo;
|
||||||
SIZE_T Length = 0;
|
SIZE_T Length = 0;
|
||||||
|
|
||||||
FRONTEND FrontEnd;
|
TERMINAL Terminal; /* The ConSrv terminal for this console */
|
||||||
|
|
||||||
if (NewConsole == NULL || ConsoleStartInfo == NULL)
|
if (NewConsole == NULL || ConsoleStartInfo == NULL)
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
@ -122,7 +122,6 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
|
||||||
wcsncpy(ConsoleInfo.ConsoleTitle, ConsoleStartInfo->ConsoleTitle, Length);
|
wcsncpy(ConsoleInfo.ConsoleTitle, ConsoleStartInfo->ConsoleTitle, Length);
|
||||||
ConsoleInfo.ConsoleTitle[Length] = L'\0';
|
ConsoleInfo.ConsoleTitle[Length] = L'\0';
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* 3. Initialize the ConSrv terminal */
|
/* 3. Initialize the ConSrv terminal */
|
||||||
Status = ConSrvInitTerminal(&Terminal,
|
Status = ConSrvInitTerminal(&Terminal,
|
||||||
&ConsoleInfo,
|
&ConsoleInfo,
|
||||||
|
@ -134,18 +133,6 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
DPRINT("CONSRV: Terminal initialized\n");
|
DPRINT("CONSRV: Terminal initialized\n");
|
||||||
#else
|
|
||||||
Status = ConSrvLoadFrontEnd(&FrontEnd,
|
|
||||||
&ConsoleInfo,
|
|
||||||
ConsoleStartInfo,
|
|
||||||
ConsoleLeaderProcessId);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("CONSRV: Failed to initialize a frontend, Status = 0x%08lx\n", Status);
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
DPRINT("CONSRV: Frontend initialized\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 4. Load the remaining console settings via the registry.
|
* 4. Load the remaining console settings via the registry.
|
||||||
|
@ -190,7 +177,7 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Creating a new console failed, Status = 0x%08lx\n", Status);
|
DPRINT1("Creating a new console failed, Status = 0x%08lx\n", Status);
|
||||||
ConSrvUnloadFrontEnd(&FrontEnd);
|
ConSrvDeinitTerminal(&Terminal);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,15 +199,15 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
|
||||||
Console->QuickEdit = ConsoleInfo.QuickEdit;
|
Console->QuickEdit = ConsoleInfo.QuickEdit;
|
||||||
|
|
||||||
/* Attach the ConSrv terminal to the console */
|
/* Attach the ConSrv terminal to the console */
|
||||||
Status = ConDrvRegisterFrontEnd(Console, &FrontEnd);
|
Status = ConDrvRegisterTerminal(Console, &Terminal);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Failed to register frontend to the given console, Status = 0x%08lx\n", Status);
|
DPRINT1("Failed to register terminal to the given console, Status = 0x%08lx\n", Status);
|
||||||
ConDrvDeleteConsole(Console);
|
ConDrvDeleteConsole(Console);
|
||||||
ConSrvUnloadFrontEnd(&FrontEnd);
|
ConSrvDeinitTerminal(&Terminal);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
DPRINT("FrontEnd registered\n");
|
DPRINT("Terminal registered\n");
|
||||||
|
|
||||||
/* Return the newly created console to the caller and a success code too */
|
/* Return the newly created console to the caller and a success code too */
|
||||||
*NewConsoleHandle = ConsoleHandle;
|
*NewConsoleHandle = ConsoleHandle;
|
||||||
|
@ -233,7 +220,7 @@ ConSrvDeleteConsole(PCONSOLE Console)
|
||||||
{
|
{
|
||||||
DPRINT("ConSrvDeleteConsole\n");
|
DPRINT("ConSrvDeleteConsole\n");
|
||||||
|
|
||||||
/* Just call the driver. ConSrvDeregisterFrontEnd is called on-demand. */
|
/* Just call the driver. ConDrvDeregisterTerminal is called on-demand. */
|
||||||
ConDrvDeleteConsole(Console);
|
ConDrvDeleteConsole(Console);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include <consrv.h>
|
#include <consrv.h>
|
||||||
|
|
||||||
|
// #include "frontends/gui/guiterm.h"
|
||||||
#ifdef TUITERM_COMPILE
|
#ifdef TUITERM_COMPILE
|
||||||
#include "frontends/tui/tuiterm.h"
|
#include "frontends/tui/tuiterm.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -81,8 +82,7 @@ struct
|
||||||
// {"Not found", 0, NULL}
|
// {"Not found", 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static NTSTATUS
|
||||||
/* static */ NTSTATUS
|
|
||||||
ConSrvLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
|
ConSrvLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
|
||||||
IN OUT PCONSOLE_INFO ConsoleInfo,
|
IN OUT PCONSOLE_INFO ConsoleInfo,
|
||||||
IN OUT PVOID ExtraConsoleInfo,
|
IN OUT PVOID ExtraConsoleInfo,
|
||||||
|
@ -121,7 +121,7 @@ ConSrvLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ NTSTATUS
|
static NTSTATUS
|
||||||
ConSrvUnloadFrontEnd(IN PFRONTEND FrontEnd)
|
ConSrvUnloadFrontEnd(IN PFRONTEND FrontEnd)
|
||||||
{
|
{
|
||||||
if (FrontEnd == NULL) return STATUS_INVALID_PARAMETER;
|
if (FrontEnd == NULL) return STATUS_INVALID_PARAMETER;
|
||||||
|
@ -129,33 +129,105 @@ ConSrvUnloadFrontEnd(IN PFRONTEND FrontEnd)
|
||||||
return FrontEnd->UnloadFrontEnd(FrontEnd);
|
return FrontEnd->UnloadFrontEnd(FrontEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See after...
|
||||||
|
static TERMINAL_VTBL ConSrvTermVtbl;
|
||||||
|
|
||||||
/* DUMMY FRONTEND INTERFACE ***************************************************/
|
NTSTATUS NTAPI
|
||||||
|
ConSrvInitTerminal(IN OUT PTERMINAL Terminal,
|
||||||
#if 0
|
IN OUT PCONSOLE_INFO ConsoleInfo,
|
||||||
|
IN OUT PVOID ExtraConsoleInfo,
|
||||||
static NTSTATUS NTAPI
|
IN ULONG ProcessId)
|
||||||
DummyInitFrontEnd(IN OUT PFRONTEND This,
|
|
||||||
IN PCONSOLE Console)
|
|
||||||
{
|
{
|
||||||
/* Load some settings ?? */
|
NTSTATUS Status;
|
||||||
|
PFRONTEND FrontEnd;
|
||||||
|
|
||||||
|
/* Load a suitable frontend for the ConSrv terminal */
|
||||||
|
FrontEnd = ConsoleAllocHeap(HEAP_ZERO_MEMORY, sizeof(*FrontEnd));
|
||||||
|
if (!FrontEnd) return STATUS_NO_MEMORY;
|
||||||
|
|
||||||
|
Status = ConSrvLoadFrontEnd(FrontEnd,
|
||||||
|
ConsoleInfo,
|
||||||
|
ExtraConsoleInfo,
|
||||||
|
ProcessId);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("CONSRV: Failed to initialize a frontend, Status = 0x%08lx\n", Status);
|
||||||
|
ConsoleFreeHeap(FrontEnd);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
DPRINT("CONSRV: Frontend initialized\n");
|
||||||
|
|
||||||
|
/* Initialize the ConSrv terminal */
|
||||||
|
Terminal->Vtbl = &ConSrvTermVtbl;
|
||||||
|
// Terminal->Console will be initialized by ConDrvRegisterTerminal
|
||||||
|
Terminal->Data = FrontEnd; /* We store the frontend pointer in the terminal private data */
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
NTSTATUS NTAPI
|
||||||
DummyDeinitFrontEnd(IN OUT PFRONTEND This)
|
ConSrvDeinitTerminal(IN OUT PTERMINAL Terminal)
|
||||||
{
|
{
|
||||||
/* Free some settings ?? */
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
PFRONTEND FrontEnd = Terminal->Data;
|
||||||
|
|
||||||
|
/* Reset the ConSrv terminal */
|
||||||
|
Terminal->Data = NULL;
|
||||||
|
Terminal->Vtbl = NULL;
|
||||||
|
|
||||||
|
/* Unload the frontend */
|
||||||
|
if (FrontEnd != NULL)
|
||||||
|
{
|
||||||
|
Status = ConSrvUnloadFrontEnd(FrontEnd);
|
||||||
|
ConsoleFreeHeap(FrontEnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* CONSRV TERMINAL INTERFACE **************************************************/
|
||||||
|
|
||||||
|
static NTSTATUS NTAPI
|
||||||
|
ConSrvTermInitTerminal(IN OUT PTERMINAL This,
|
||||||
|
IN PCONSOLE Console)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
|
||||||
|
/* Initialize the console pointer for our frontend */
|
||||||
|
FrontEnd->Console = Console;
|
||||||
|
|
||||||
|
/** HACK HACK!! Copy FrontEnd into the console!! **/
|
||||||
|
DPRINT1("Using FrontEndIFace HACK(1), should be removed after proper implementation!\n");
|
||||||
|
Console->FrontEndIFace = *FrontEnd;
|
||||||
|
|
||||||
|
Status = FrontEnd->Vtbl->InitFrontEnd(FrontEnd, FrontEnd->Console);
|
||||||
|
|
||||||
|
/** HACK HACK!! Be sure FrontEndIFace is correctly updated in the console!! **/
|
||||||
|
DPRINT1("Using FrontEndIFace HACK(2), should be removed after proper implementation!\n");
|
||||||
|
Console->FrontEndIFace = *FrontEnd;
|
||||||
|
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyDrawRegion(IN OUT PFRONTEND This,
|
ConSrvTermDeinitTerminal(IN OUT PTERMINAL This)
|
||||||
|
{
|
||||||
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
FrontEnd->Vtbl->DeinitFrontEnd(FrontEnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID NTAPI
|
||||||
|
ConSrvTermDrawRegion(IN OUT PTERMINAL This,
|
||||||
SMALL_RECT* Region)
|
SMALL_RECT* Region)
|
||||||
{
|
{
|
||||||
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
FrontEnd->Vtbl->DrawRegion(FrontEnd, Region);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyWriteStream(IN OUT PFRONTEND This,
|
ConSrvTermWriteStream(IN OUT PTERMINAL This,
|
||||||
SMALL_RECT* Region,
|
SMALL_RECT* Region,
|
||||||
SHORT CursorStartX,
|
SHORT CursorStartX,
|
||||||
SHORT CursorStartY,
|
SHORT CursorStartY,
|
||||||
|
@ -163,164 +235,120 @@ DummyWriteStream(IN OUT PFRONTEND This,
|
||||||
PWCHAR Buffer,
|
PWCHAR Buffer,
|
||||||
UINT Length)
|
UINT Length)
|
||||||
{
|
{
|
||||||
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
FrontEnd->Vtbl->WriteStream(FrontEnd,
|
||||||
|
Region,
|
||||||
|
CursorStartX,
|
||||||
|
CursorStartY,
|
||||||
|
ScrolledLines,
|
||||||
|
Buffer,
|
||||||
|
Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
DummySetCursorInfo(IN OUT PFRONTEND This,
|
ConSrvTermSetCursorInfo(IN OUT PTERMINAL This,
|
||||||
PCONSOLE_SCREEN_BUFFER Buff)
|
PCONSOLE_SCREEN_BUFFER ScreenBuffer)
|
||||||
{
|
{
|
||||||
return TRUE;
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
return FrontEnd->Vtbl->SetCursorInfo(FrontEnd, ScreenBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
DummySetScreenInfo(IN OUT PFRONTEND This,
|
ConSrvTermSetScreenInfo(IN OUT PTERMINAL This,
|
||||||
PCONSOLE_SCREEN_BUFFER Buff,
|
PCONSOLE_SCREEN_BUFFER ScreenBuffer,
|
||||||
SHORT OldCursorX,
|
SHORT OldCursorX,
|
||||||
SHORT OldCursorY)
|
SHORT OldCursorY)
|
||||||
{
|
{
|
||||||
return TRUE;
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
return FrontEnd->Vtbl->SetScreenInfo(FrontEnd,
|
||||||
|
ScreenBuffer,
|
||||||
|
OldCursorX,
|
||||||
|
OldCursorY);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyResizeTerminal(IN OUT PFRONTEND This)
|
ConSrvTermResizeTerminal(IN OUT PTERMINAL This)
|
||||||
{
|
{
|
||||||
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
FrontEnd->Vtbl->ResizeTerminal(FrontEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummySetActiveScreenBuffer(IN OUT PFRONTEND This)
|
ConSrvTermSetActiveScreenBuffer(IN OUT PTERMINAL This)
|
||||||
{
|
{
|
||||||
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
FrontEnd->Vtbl->SetActiveScreenBuffer(FrontEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyReleaseScreenBuffer(IN OUT PFRONTEND This,
|
ConSrvTermReleaseScreenBuffer(IN OUT PTERMINAL This,
|
||||||
IN PCONSOLE_SCREEN_BUFFER ScreenBuffer)
|
IN PCONSOLE_SCREEN_BUFFER ScreenBuffer)
|
||||||
{
|
{
|
||||||
}
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
FrontEnd->Vtbl->ReleaseScreenBuffer(FrontEnd, ScreenBuffer);
|
||||||
static BOOL NTAPI
|
|
||||||
DummyProcessKeyCallback(IN OUT PFRONTEND This,
|
|
||||||
MSG* msg,
|
|
||||||
BYTE KeyStateMenu,
|
|
||||||
DWORD ShiftState,
|
|
||||||
UINT VirtualKeyCode,
|
|
||||||
BOOL Down)
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyRefreshInternalInfo(IN OUT PFRONTEND This)
|
ConSrvTermChangeTitle(IN OUT PTERMINAL This)
|
||||||
{
|
{
|
||||||
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
FrontEnd->Vtbl->ChangeTitle(FrontEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
DummyChangeTitle(IN OUT PFRONTEND This)
|
ConSrvTermGetLargestConsoleWindowSize(IN OUT PTERMINAL This,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL NTAPI
|
|
||||||
DummyChangeIcon(IN OUT PFRONTEND This,
|
|
||||||
HICON IconHandle)
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static HWND NTAPI
|
|
||||||
DummyGetConsoleWindowHandle(IN OUT PFRONTEND This)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VOID NTAPI
|
|
||||||
DummyGetLargestConsoleWindowSize(IN OUT PFRONTEND This,
|
|
||||||
PCOORD pSize)
|
PCOORD pSize)
|
||||||
{
|
{
|
||||||
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
FrontEnd->Vtbl->GetLargestConsoleWindowSize(FrontEnd, pSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
DummyGetSelectionInfo(IN OUT PFRONTEND This,
|
ConSrvTermGetSelectionInfo(IN OUT PTERMINAL This,
|
||||||
PCONSOLE_SELECTION_INFO pSelectionInfo)
|
PCONSOLE_SELECTION_INFO pSelectionInfo)
|
||||||
{
|
{
|
||||||
return TRUE;
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
return FrontEnd->Vtbl->GetSelectionInfo(FrontEnd, pSelectionInfo);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
DummySetPalette(IN OUT PFRONTEND This,
|
ConSrvTermSetPalette(IN OUT PTERMINAL This,
|
||||||
HPALETTE PaletteHandle,
|
HPALETTE PaletteHandle,
|
||||||
UINT PaletteUsage)
|
UINT PaletteUsage)
|
||||||
{
|
{
|
||||||
return TRUE;
|
PFRONTEND FrontEnd = This->Data;
|
||||||
}
|
return FrontEnd->Vtbl->SetPalette(FrontEnd, PaletteHandle, PaletteUsage);
|
||||||
|
|
||||||
static ULONG NTAPI
|
|
||||||
DummyGetDisplayMode(IN OUT PFRONTEND This)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL NTAPI
|
|
||||||
DummySetDisplayMode(IN OUT PFRONTEND This,
|
|
||||||
ULONG NewMode)
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT NTAPI
|
static INT NTAPI
|
||||||
DummyShowMouseCursor(IN OUT PFRONTEND This,
|
ConSrvTermShowMouseCursor(IN OUT PTERMINAL This,
|
||||||
BOOL Show)
|
BOOL Show)
|
||||||
{
|
{
|
||||||
return 0;
|
PFRONTEND FrontEnd = This->Data;
|
||||||
|
return FrontEnd->Vtbl->ShowMouseCursor(FrontEnd, Show);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL NTAPI
|
static TERMINAL_VTBL ConSrvTermVtbl =
|
||||||
DummySetMouseCursor(IN OUT PFRONTEND This,
|
|
||||||
HCURSOR CursorHandle)
|
|
||||||
{
|
{
|
||||||
return TRUE;
|
ConSrvTermInitTerminal,
|
||||||
}
|
ConSrvTermDeinitTerminal,
|
||||||
|
ConSrvTermDrawRegion,
|
||||||
static HMENU NTAPI
|
ConSrvTermWriteStream,
|
||||||
DummyMenuControl(IN OUT PFRONTEND This,
|
ConSrvTermSetCursorInfo,
|
||||||
UINT CmdIdLow,
|
ConSrvTermSetScreenInfo,
|
||||||
UINT CmdIdHigh)
|
ConSrvTermResizeTerminal,
|
||||||
{
|
ConSrvTermSetActiveScreenBuffer,
|
||||||
return NULL;
|
ConSrvTermReleaseScreenBuffer,
|
||||||
}
|
ConSrvTermChangeTitle,
|
||||||
|
ConSrvTermGetLargestConsoleWindowSize,
|
||||||
static BOOL NTAPI
|
// ConSrvTermGetSelectionInfo,
|
||||||
DummySetMenuClose(IN OUT PFRONTEND This,
|
ConSrvTermSetPalette,
|
||||||
BOOL Enable)
|
ConSrvTermShowMouseCursor,
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static FRONTEND_VTBL DummyVtbl =
|
|
||||||
{
|
|
||||||
DummyInitFrontEnd,
|
|
||||||
DummyDeinitFrontEnd,
|
|
||||||
DummyDrawRegion,
|
|
||||||
DummyWriteStream,
|
|
||||||
DummySetCursorInfo,
|
|
||||||
DummySetScreenInfo,
|
|
||||||
DummyResizeTerminal,
|
|
||||||
DummySetActiveScreenBuffer,
|
|
||||||
DummyReleaseScreenBuffer,
|
|
||||||
DummyProcessKeyCallback,
|
|
||||||
DummyRefreshInternalInfo,
|
|
||||||
DummyChangeTitle,
|
|
||||||
DummyChangeIcon,
|
|
||||||
DummyGetConsoleWindowHandle,
|
|
||||||
DummyGetLargestConsoleWindowSize,
|
|
||||||
DummyGetSelectionInfo,
|
|
||||||
DummySetPalette,
|
|
||||||
DummyGetDisplayMode,
|
|
||||||
DummySetDisplayMode,
|
|
||||||
DummyShowMouseCursor,
|
|
||||||
DummySetMouseCursor,
|
|
||||||
DummyMenuControl,
|
|
||||||
DummySetMenuClose,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if 0
|
||||||
VOID
|
VOID
|
||||||
ResetFrontEnd(IN PCONSOLE Console)
|
ResetFrontEnd(IN PCONSOLE Console)
|
||||||
{
|
{
|
||||||
|
@ -328,9 +356,8 @@ ResetFrontEnd(IN PCONSOLE Console)
|
||||||
|
|
||||||
/* Reinitialize the frontend interface */
|
/* Reinitialize the frontend interface */
|
||||||
RtlZeroMemory(&Console->FrontEndIFace, sizeof(Console->FrontEndIFace));
|
RtlZeroMemory(&Console->FrontEndIFace, sizeof(Console->FrontEndIFace));
|
||||||
Console->FrontEndIFace.Vtbl = &DummyVtbl;
|
Console->FrontEndIFace.Vtbl = &ConSrvTermVtbl;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -186,16 +186,16 @@ typedef struct _TERMINAL_VTBL
|
||||||
/*
|
/*
|
||||||
* Internal interface (functions called by the console server only)
|
* Internal interface (functions called by the console server only)
|
||||||
*/
|
*/
|
||||||
NTSTATUS (NTAPI *InitFrontEnd)(IN OUT PTERMINAL This,
|
NTSTATUS (NTAPI *InitTerminal)(IN OUT PTERMINAL This,
|
||||||
IN struct _CONSOLE* Console);
|
IN struct _CONSOLE* Console);
|
||||||
VOID (NTAPI *DeinitFrontEnd)(IN OUT PTERMINAL This);
|
VOID (NTAPI *DeinitTerminal)(IN OUT PTERMINAL This);
|
||||||
|
|
||||||
/* Interface used for both text-mode and graphics screen buffers */
|
/* Interface used for both text-mode and graphics screen buffers */
|
||||||
VOID (NTAPI *DrawRegion)(IN OUT PTERMINAL This,
|
VOID (NTAPI *DrawRegion)(IN OUT PTERMINAL This,
|
||||||
SMALL_RECT* Region);
|
SMALL_RECT* Region);
|
||||||
/* Interface used only for text-mode screen buffers */
|
/* Interface used only for text-mode screen buffers */
|
||||||
VOID (NTAPI *WriteStream)(IN OUT PTERMINAL This,
|
VOID (NTAPI *WriteStream)(IN OUT PTERMINAL This,
|
||||||
SMALL_RECT* Block,
|
SMALL_RECT* Region,
|
||||||
SHORT CursorStartX,
|
SHORT CursorStartX,
|
||||||
SHORT CursorStartY,
|
SHORT CursorStartY,
|
||||||
UINT ScrolledLines,
|
UINT ScrolledLines,
|
||||||
|
@ -211,47 +211,27 @@ typedef struct _TERMINAL_VTBL
|
||||||
VOID (NTAPI *SetActiveScreenBuffer)(IN OUT PTERMINAL This);
|
VOID (NTAPI *SetActiveScreenBuffer)(IN OUT PTERMINAL This);
|
||||||
VOID (NTAPI *ReleaseScreenBuffer)(IN OUT PTERMINAL This,
|
VOID (NTAPI *ReleaseScreenBuffer)(IN OUT PTERMINAL This,
|
||||||
IN PCONSOLE_SCREEN_BUFFER ScreenBuffer);
|
IN PCONSOLE_SCREEN_BUFFER ScreenBuffer);
|
||||||
BOOL (NTAPI *ProcessKeyCallback)(IN OUT PTERMINAL This,
|
|
||||||
MSG* msg,
|
|
||||||
BYTE KeyStateMenu,
|
|
||||||
DWORD ShiftState,
|
|
||||||
UINT VirtualKeyCode,
|
|
||||||
BOOL Down);
|
|
||||||
VOID (NTAPI *RefreshInternalInfo)(IN OUT PTERMINAL This);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* External interface (functions corresponding to the Console API)
|
* External interface (functions corresponding to the Console API)
|
||||||
*/
|
*/
|
||||||
VOID (NTAPI *ChangeTitle)(IN OUT PTERMINAL This);
|
VOID (NTAPI *ChangeTitle)(IN OUT PTERMINAL This);
|
||||||
BOOL (NTAPI *ChangeIcon)(IN OUT PTERMINAL This,
|
|
||||||
HICON IconHandle);
|
|
||||||
HWND (NTAPI *GetConsoleWindowHandle)(IN OUT PTERMINAL This);
|
|
||||||
VOID (NTAPI *GetLargestConsoleWindowSize)(IN OUT PTERMINAL This,
|
VOID (NTAPI *GetLargestConsoleWindowSize)(IN OUT PTERMINAL This,
|
||||||
PCOORD pSize);
|
PCOORD pSize);
|
||||||
BOOL (NTAPI *GetSelectionInfo)(IN OUT PTERMINAL This,
|
// BOOL (NTAPI *GetSelectionInfo)(IN OUT PTERMINAL This,
|
||||||
PCONSOLE_SELECTION_INFO pSelectionInfo);
|
// PCONSOLE_SELECTION_INFO pSelectionInfo);
|
||||||
BOOL (NTAPI *SetPalette)(IN OUT PTERMINAL This,
|
BOOL (NTAPI *SetPalette)(IN OUT PTERMINAL This,
|
||||||
HPALETTE PaletteHandle,
|
HPALETTE PaletteHandle,
|
||||||
UINT PaletteUsage);
|
UINT PaletteUsage);
|
||||||
ULONG (NTAPI *GetDisplayMode)(IN OUT PTERMINAL This);
|
|
||||||
BOOL (NTAPI *SetDisplayMode)(IN OUT PTERMINAL This,
|
|
||||||
ULONG NewMode);
|
|
||||||
INT (NTAPI *ShowMouseCursor)(IN OUT PTERMINAL This,
|
INT (NTAPI *ShowMouseCursor)(IN OUT PTERMINAL This,
|
||||||
BOOL Show);
|
BOOL Show);
|
||||||
BOOL (NTAPI *SetMouseCursor)(IN OUT PTERMINAL This,
|
|
||||||
HCURSOR CursorHandle);
|
|
||||||
HMENU (NTAPI *MenuControl)(IN OUT PTERMINAL This,
|
|
||||||
UINT CmdIdLow,
|
|
||||||
UINT CmdIdHigh);
|
|
||||||
BOOL (NTAPI *SetMenuClose)(IN OUT PTERMINAL This,
|
|
||||||
BOOL Enable);
|
|
||||||
|
|
||||||
#if 0 // Possible future front-end interface
|
#if 0 // Possible future front-end interface
|
||||||
BOOL (NTAPI *GetFrontEndProperty)(IN OUT PTERMINAL This,
|
BOOL (NTAPI *GetTerminalProperty)(IN OUT PTERMINAL This,
|
||||||
ULONG Flag,
|
ULONG Flag,
|
||||||
PVOID Info,
|
PVOID Info,
|
||||||
ULONG Size);
|
ULONG Size);
|
||||||
BOOL (NTAPI *SetFrontEndProperty)(IN OUT PTERMINAL This,
|
BOOL (NTAPI *SetTerminalProperty)(IN OUT PTERMINAL This,
|
||||||
ULONG Flag,
|
ULONG Flag,
|
||||||
PVOID Info /*,
|
PVOID Info /*,
|
||||||
ULONG Size */);
|
ULONG Size */);
|
||||||
|
|
|
@ -30,7 +30,7 @@ typedef struct _FRONTEND_VTBL
|
||||||
SMALL_RECT* Region);
|
SMALL_RECT* Region);
|
||||||
/* Interface used only for text-mode screen buffers */
|
/* Interface used only for text-mode screen buffers */
|
||||||
VOID (NTAPI *WriteStream)(IN OUT PFRONTEND This,
|
VOID (NTAPI *WriteStream)(IN OUT PFRONTEND This,
|
||||||
SMALL_RECT* Block,
|
SMALL_RECT* Region,
|
||||||
SHORT CursorStartX,
|
SHORT CursorStartX,
|
||||||
SHORT CursorStartY,
|
SHORT CursorStartY,
|
||||||
UINT ScrolledLines,
|
UINT ScrolledLines,
|
||||||
|
|
|
@ -17,10 +17,10 @@ ConDrvInitConsole(OUT PHANDLE NewConsoleHandle,
|
||||||
IN PCONSOLE_INFO ConsoleInfo,
|
IN PCONSOLE_INFO ConsoleInfo,
|
||||||
IN ULONG ConsoleLeaderProcessId);
|
IN ULONG ConsoleLeaderProcessId);
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvRegisterFrontEnd(IN PCONSOLE Console,
|
ConDrvRegisterTerminal(IN PCONSOLE Console,
|
||||||
IN PFRONTEND FrontEnd);
|
IN PTERMINAL Terminal);
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvDeregisterFrontEnd(IN PCONSOLE Console);
|
ConDrvDeregisterTerminal(IN PCONSOLE Console);
|
||||||
VOID NTAPI
|
VOID NTAPI
|
||||||
ConDrvDeleteConsole(IN PCONSOLE Console);
|
ConDrvDeleteConsole(IN PCONSOLE Console);
|
||||||
|
|
||||||
|
|
|
@ -11,43 +11,43 @@
|
||||||
/* Macros used to call functions in the FRONTEND_VTBL virtual table */
|
/* Macros used to call functions in the FRONTEND_VTBL virtual table */
|
||||||
|
|
||||||
#define TermDrawRegion(Console, Region) \
|
#define TermDrawRegion(Console, Region) \
|
||||||
(Console)->FrontEndIFace.Vtbl->DrawRegion(&(Console)->FrontEndIFace, (Region))
|
(Console)->TermIFace.Vtbl->DrawRegion(&(Console)->TermIFace, (Region))
|
||||||
#define TermWriteStream(Console, Block, CurStartX, CurStartY, ScrolledLines, Buffer, Length) \
|
#define TermWriteStream(Console, Region, CurStartX, CurStartY, ScrolledLines, Buffer, Length) \
|
||||||
(Console)->FrontEndIFace.Vtbl->WriteStream(&(Console)->FrontEndIFace, (Block), (CurStartX), (CurStartY), \
|
(Console)->TermIFace.Vtbl->WriteStream(&(Console)->TermIFace, (Region), (CurStartX), (CurStartY), \
|
||||||
(ScrolledLines), (Buffer), (Length))
|
(ScrolledLines), (Buffer), (Length))
|
||||||
#define TermSetCursorInfo(Console, ScreenBuffer) \
|
#define TermSetCursorInfo(Console, ScreenBuffer) \
|
||||||
(Console)->FrontEndIFace.Vtbl->SetCursorInfo(&(Console)->FrontEndIFace, (ScreenBuffer))
|
(Console)->TermIFace.Vtbl->SetCursorInfo(&(Console)->TermIFace, (ScreenBuffer))
|
||||||
#define TermSetScreenInfo(Console, ScreenBuffer, OldCursorX, OldCursorY) \
|
#define TermSetScreenInfo(Console, ScreenBuffer, OldCursorX, OldCursorY) \
|
||||||
(Console)->FrontEndIFace.Vtbl->SetScreenInfo(&(Console)->FrontEndIFace, (ScreenBuffer), (OldCursorX), (OldCursorY))
|
(Console)->TermIFace.Vtbl->SetScreenInfo(&(Console)->TermIFace, (ScreenBuffer), (OldCursorX), (OldCursorY))
|
||||||
#define TermResizeTerminal(Console) \
|
#define TermResizeTerminal(Console) \
|
||||||
(Console)->FrontEndIFace.Vtbl->ResizeTerminal(&(Console)->FrontEndIFace)
|
(Console)->TermIFace.Vtbl->ResizeTerminal(&(Console)->TermIFace)
|
||||||
#define TermSetActiveScreenBuffer(Console) \
|
#define TermSetActiveScreenBuffer(Console) \
|
||||||
(Console)->FrontEndIFace.Vtbl->SetActiveScreenBuffer(&(Console)->FrontEndIFace)
|
(Console)->TermIFace.Vtbl->SetActiveScreenBuffer(&(Console)->TermIFace)
|
||||||
#define TermReleaseScreenBuffer(Console, ScreenBuffer) \
|
#define TermReleaseScreenBuffer(Console, ScreenBuffer) \
|
||||||
(Console)->FrontEndIFace.Vtbl->ReleaseScreenBuffer(&(Console)->FrontEndIFace, (ScreenBuffer))
|
(Console)->TermIFace.Vtbl->ReleaseScreenBuffer(&(Console)->TermIFace, (ScreenBuffer))
|
||||||
#define TermProcessKeyCallback(Console, Msg, KeyStateMenu, ShiftState, VirtualKeyCode, Down) \
|
#define TermProcessKeyCallback(Console, Msg, KeyStateMenu, ShiftState, VirtualKeyCode, Down) \
|
||||||
(Console)->FrontEndIFace.Vtbl->ProcessKeyCallback(&(Console)->FrontEndIFace, (Msg), (KeyStateMenu), (ShiftState), (VirtualKeyCode), (Down))
|
(Console)->FrontEndIFace.Vtbl->ProcessKeyCallback(&(Console)->FrontEndIFace, (Msg), (KeyStateMenu), (ShiftState), (VirtualKeyCode), (Down))
|
||||||
#define TermRefreshInternalInfo(Console) \
|
#define TermRefreshInternalInfo(Console) \
|
||||||
(Console)->FrontEndIFace.Vtbl->RefreshInternalInfo(&(Console)->FrontEndIFace)
|
(Console)->FrontEndIFace.Vtbl->RefreshInternalInfo(&(Console)->FrontEndIFace)
|
||||||
|
|
||||||
#define TermChangeTitle(Console) \
|
#define TermChangeTitle(Console) \
|
||||||
(Console)->FrontEndIFace.Vtbl->ChangeTitle(&(Console)->FrontEndIFace)
|
(Console)->TermIFace.Vtbl->ChangeTitle(&(Console)->TermIFace)
|
||||||
#define TermChangeIcon(Console, IconHandle) \
|
#define TermChangeIcon(Console, IconHandle) \
|
||||||
(Console)->FrontEndIFace.Vtbl->ChangeIcon(&(Console)->FrontEndIFace, (IconHandle))
|
(Console)->FrontEndIFace.Vtbl->ChangeIcon(&(Console)->FrontEndIFace, (IconHandle))
|
||||||
#define TermGetConsoleWindowHandle(Console) \
|
#define TermGetConsoleWindowHandle(Console) \
|
||||||
(Console)->FrontEndIFace.Vtbl->GetConsoleWindowHandle(&(Console)->FrontEndIFace)
|
(Console)->FrontEndIFace.Vtbl->GetConsoleWindowHandle(&(Console)->FrontEndIFace)
|
||||||
#define TermGetLargestConsoleWindowSize(Console, pSize) \
|
#define TermGetLargestConsoleWindowSize(Console, pSize) \
|
||||||
(Console)->FrontEndIFace.Vtbl->GetLargestConsoleWindowSize(&(Console)->FrontEndIFace, (pSize))
|
(Console)->TermIFace.Vtbl->GetLargestConsoleWindowSize(&(Console)->TermIFace, (pSize))
|
||||||
#define TermGetSelectionInfo(Console, pSelectionInfo) \
|
#define TermGetSelectionInfo(Console, pSelectionInfo) \
|
||||||
(Console)->FrontEndIFace.Vtbl->GetSelectionInfo(&(Console)->FrontEndIFace, (pSelectionInfo))
|
(Console)->FrontEndIFace.Vtbl->GetSelectionInfo(&(Console)->FrontEndIFace, (pSelectionInfo))
|
||||||
#define TermSetPalette(Console, PaletteHandle, PaletteUsage) \
|
#define TermSetPalette(Console, PaletteHandle, PaletteUsage) \
|
||||||
(Console)->FrontEndIFace.Vtbl->SetPalette(&(Console)->FrontEndIFace, (PaletteHandle), (PaletteUsage))
|
(Console)->TermIFace.Vtbl->SetPalette(&(Console)->TermIFace, (PaletteHandle), (PaletteUsage))
|
||||||
#define TermGetDisplayMode(Console) \
|
#define TermGetDisplayMode(Console) \
|
||||||
(Console)->FrontEndIFace.Vtbl->GetDisplayMode(&(Console)->FrontEndIFace)
|
(Console)->FrontEndIFace.Vtbl->GetDisplayMode(&(Console)->FrontEndIFace)
|
||||||
#define TermSetDisplayMode(Console, NewMode) \
|
#define TermSetDisplayMode(Console, NewMode) \
|
||||||
(Console)->FrontEndIFace.Vtbl->SetDisplayMode(&(Console)->FrontEndIFace, (NewMode))
|
(Console)->FrontEndIFace.Vtbl->SetDisplayMode(&(Console)->FrontEndIFace, (NewMode))
|
||||||
#define TermShowMouseCursor(Console, Show) \
|
#define TermShowMouseCursor(Console, Show) \
|
||||||
(Console)->FrontEndIFace.Vtbl->ShowMouseCursor(&(Console)->FrontEndIFace, (Show))
|
(Console)->TermIFace.Vtbl->ShowMouseCursor(&(Console)->TermIFace, (Show))
|
||||||
#define TermSetMouseCursor(Console, CursorHandle) \
|
#define TermSetMouseCursor(Console, CursorHandle) \
|
||||||
(Console)->FrontEndIFace.Vtbl->SetMouseCursor(&(Console)->FrontEndIFace, (CursorHandle))
|
(Console)->FrontEndIFace.Vtbl->SetMouseCursor(&(Console)->FrontEndIFace, (CursorHandle))
|
||||||
#define TermMenuControl(Console, CmdIdLow, CmdIdHigh) \
|
#define TermMenuControl(Console, CmdIdLow, CmdIdHigh) \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue