Author: hbelusca
Date: Fri May 2 18:44:26 2014
New Revision: 63117
URL:
http://svn.reactos.org/svn/reactos?rev=63117&view=rev
Log:
[CONSRV]
- Move some functions where they belong.
- Start to differentiate frontends for consrv terminal, and terminals.
Added:
branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyterm.c
- copied, changed from r63112,
branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c
branches/condrv_restructure/win32ss/user/winsrv/consrv/frontends/terminal.c
- copied, changed from r63112,
branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c
Removed:
branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c
Modified:
branches/condrv_restructure/win32ss/user/winsrv/consrv.cmake
branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/coninput.c
branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/console.c
branches/condrv_restructure/win32ss/user/winsrv/consrv/coninput.h
branches/condrv_restructure/win32ss/user/winsrv/consrv/console.c
branches/condrv_restructure/win32ss/user/winsrv/consrv/frontends/input.c
branches/condrv_restructure/win32ss/user/winsrv/consrv/include/conio.h
branches/condrv_restructure/win32ss/user/winsrv/consrv/include/conio_winsrv.h
Modified: branches/condrv_restructure/win32ss/user/winsrv/consrv.cmake
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
--- branches/condrv_restructure/win32ss/user/winsrv/consrv.cmake [iso-8859-1] (original)
+++ branches/condrv_restructure/win32ss/user/winsrv/consrv.cmake [iso-8859-1] Fri May 2
18:44:26 2014
@@ -18,10 +18,11 @@
consrv/condrv/coninput.c
consrv/condrv/conoutput.c
consrv/condrv/console.c
- consrv/condrv/dummyfrontend.c
+ consrv/condrv/dummyterm.c
consrv/condrv/graphics.c
consrv/condrv/text.c
consrv/frontends/input.c
+ consrv/frontends/terminal.c
consrv/frontends/gui/conwnd.c
consrv/frontends/gui/fullscreen.c
consrv/frontends/gui/guiterm.c
Modified: branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/coninput.c
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
--- branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/coninput.c [iso-8859-1]
(original)
+++ branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/coninput.c [iso-8859-1]
Fri May 2 18:44:26 2014
@@ -17,10 +17,10 @@
/* GLOBALS ********************************************************************/
#define ConsoleInputUnicodeCharToAnsiChar(Console, dChar, sWChar) \
- WideCharToMultiByte((Console)->CodePage, 0, (sWChar), 1, (dChar), 1, NULL, NULL)
+ WideCharToMultiByte((Console)->InputCodePage, 0, (sWChar), 1, (dChar), 1, NULL,
NULL)
#define ConsoleInputAnsiCharToUnicodeChar(Console, dWChar, sChar) \
- MultiByteToWideChar((Console)->CodePage, 0, (sChar), 1, (dWChar), 1)
+ MultiByteToWideChar((Console)->InputCodePage, 0, (sChar), 1, (dWChar), 1)
typedef struct ConsoleInput_t
{
@@ -142,82 +142,6 @@
}
CloseHandle(Console->InputBuffer.ActiveEvent);
-}
-
-/*
- * This function explicitely references Console->ActiveBuffer
- * (and also makes use of keyboard functions...).
- * It is possible that it will move into frontends...
- */
-VOID NTAPI
-ConDrvProcessKey(IN PCONSOLE Console,
- IN BOOLEAN Down,
- IN UINT VirtualKeyCode,
- IN UINT VirtualScanCode,
- IN WCHAR UnicodeChar,
- IN ULONG ShiftState,
- IN BYTE KeyStateCtrl)
-{
- INPUT_RECORD er;
-
- /* process Ctrl-C and Ctrl-Break */
- if ( Console->InputBuffer.Mode & ENABLE_PROCESSED_INPUT &&
- Down && (VirtualKeyCode == VK_PAUSE || VirtualKeyCode == 'C')
&&
- (ShiftState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED) || KeyStateCtrl &
0x80) )
- {
- DPRINT1("Console_Api Ctrl-C\n");
- ConSrvConsoleProcessCtrlEvent(Console, 0, CTRL_C_EVENT);
-
- if (Console->LineBuffer && !Console->LineComplete)
- {
- /* Line input is in progress; end it */
- Console->LinePos = Console->LineSize = 0;
- Console->LineComplete = TRUE;
- }
- return;
- }
-
- if ( (ShiftState & (RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED)) != 0 &&
- (VK_UP == VirtualKeyCode || VK_DOWN == VirtualKeyCode) )
- {
- if (!Down) return;
-
- /* scroll up or down */
- if (VK_UP == VirtualKeyCode)
- {
- /* only scroll up if there is room to scroll up into */
- if (Console->ActiveBuffer->CursorPosition.Y !=
Console->ActiveBuffer->ScreenBufferSize.Y - 1)
- {
- Console->ActiveBuffer->VirtualY =
(Console->ActiveBuffer->VirtualY +
-
Console->ActiveBuffer->ScreenBufferSize.Y - 1) %
-
Console->ActiveBuffer->ScreenBufferSize.Y;
- Console->ActiveBuffer->CursorPosition.Y++;
- }
- }
- else
- {
- /* only scroll down if there is room to scroll down into */
- if (Console->ActiveBuffer->CursorPosition.Y != 0)
- {
- Console->ActiveBuffer->VirtualY =
(Console->ActiveBuffer->VirtualY + 1) %
-
Console->ActiveBuffer->ScreenBufferSize.Y;
- Console->ActiveBuffer->CursorPosition.Y--;
- }
- }
-
- ConioDrawConsole(Console);
- return;
- }
-
- er.EventType = KEY_EVENT;
- er.Event.KeyEvent.bKeyDown = Down;
- er.Event.KeyEvent.wRepeatCount = 1;
- er.Event.KeyEvent.wVirtualKeyCode = VirtualKeyCode;
- er.Event.KeyEvent.wVirtualScanCode = VirtualScanCode;
- er.Event.KeyEvent.uChar.UnicodeChar = UnicodeChar;
- er.Event.KeyEvent.dwControlKeyState = ShiftState;
-
- ConioProcessInputEvent(Console, &er);
}
Modified: branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/console.c
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
--- branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/console.c [iso-8859-1]
(original)
+++ branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/console.c [iso-8859-1]
Fri May 2 18:44:26 2014
@@ -453,7 +453,7 @@
// LineWakeupMask
/* Set-up the code page */
- Console->CodePage = Console->OutputCodePage = ConsoleInfo->CodePage;
+ Console->InputCodePage = Console->OutputCodePage = ConsoleInfo->CodePage;
/* Initialize a new text-mode screen buffer with default settings */
ScreenBufferInfo.ScreenBufferSize = ConsoleInfo->ScreenBufferSize;
@@ -862,7 +862,7 @@
if (*BufLength >= sizeof(CHAR))
{
Length = min(*BufLength - sizeof(CHAR), Console->Title.Length /
sizeof(WCHAR));
- Length = WideCharToMultiByte(Console->CodePage, 0,
+ Length = WideCharToMultiByte(Console->InputCodePage, 0,
Console->Title.Buffer, Length,
TitleBuffer, Length,
NULL, NULL);
@@ -898,7 +898,7 @@
else
{
/* Use the console input CP for the conversion */
- Length = MultiByteToWideChar(Console->CodePage, 0,
+ Length = MultiByteToWideChar(Console->InputCodePage, 0,
TitleBuffer, BufLength,
NULL, 0);
/* The returned Length was in number of wchars, convert it in bytes */
@@ -923,7 +923,7 @@
}
else
{
- MultiByteToWideChar(Console->CodePage, 0,
+ MultiByteToWideChar(Console->InputCodePage, 0,
TitleBuffer, BufLength,
Console->Title.Buffer,
Console->Title.Length / sizeof(WCHAR));
@@ -944,7 +944,7 @@
if (Console == NULL || CodePage == NULL)
return STATUS_INVALID_PARAMETER;
- *CodePage = (OutputCP ? Console->OutputCodePage : Console->CodePage);
+ *CodePage = (OutputCP ? Console->OutputCodePage : Console->InputCodePage);
return STATUS_SUCCESS;
}
@@ -960,7 +960,7 @@
if (OutputCP)
Console->OutputCodePage = CodePage;
else
- Console->CodePage = CodePage;
+ Console->InputCodePage = CodePage;
return STATUS_SUCCESS;
}
Removed: branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
---
branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c [iso-8859-1]
(original)
+++
branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c (removed)
@@ -1,213 +0,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS Console Server DLL
- * FILE: win32ss/user/winsrv/consrv/condrv/dummyfrontend.c
- * PURPOSE: Dummy Terminal Front-End used when no frontend
- * is attached to the specified console.
- * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca(a)sfr.fr)
- */
-
-/* INCLUDES *******************************************************************/
-
-#include <consrv.h>
-
-/* DUMMY FRONTEND INTERFACE ***************************************************/
-
-static NTSTATUS NTAPI
-DummyInitFrontEnd(IN OUT PFRONTEND This,
- IN PCONSOLE Console)
-{
- /* Load some settings ?? */
- return STATUS_SUCCESS;
-}
-
-static VOID NTAPI
-DummyDeinitFrontEnd(IN OUT PFRONTEND This)
-{
- /* Free some settings ?? */
-}
-
-static VOID NTAPI
-DummyDrawRegion(IN OUT PFRONTEND This,
- SMALL_RECT* Region)
-{
-}
-
-static VOID NTAPI
-DummyWriteStream(IN OUT PFRONTEND This,
- SMALL_RECT* Region,
- SHORT CursorStartX,
- SHORT CursorStartY,
- UINT ScrolledLines,
- PWCHAR Buffer,
- UINT Length)
-{
-}
-
-static BOOL NTAPI
-DummySetCursorInfo(IN OUT PFRONTEND This,
- PCONSOLE_SCREEN_BUFFER Buff)
-{
- return TRUE;
-}
-
-static BOOL NTAPI
-DummySetScreenInfo(IN OUT PFRONTEND This,
- PCONSOLE_SCREEN_BUFFER Buff,
- SHORT OldCursorX,
- SHORT OldCursorY)
-{
- return TRUE;
-}
-
-static VOID NTAPI
-DummyResizeTerminal(IN OUT PFRONTEND This)
-{
-}
-
-static VOID NTAPI
-DummySetActiveScreenBuffer(IN OUT PFRONTEND This)
-{
-}
-
-static VOID NTAPI
-DummyReleaseScreenBuffer(IN OUT PFRONTEND This,
- 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
-DummyRefreshInternalInfo(IN OUT PFRONTEND This)
-{
-}
-
-static VOID NTAPI
-DummyChangeTitle(IN OUT PFRONTEND 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)
-{
-}
-
-static BOOL NTAPI
-DummyGetSelectionInfo(IN OUT PFRONTEND This,
- PCONSOLE_SELECTION_INFO pSelectionInfo)
-{
- return TRUE;
-}
-
-static BOOL NTAPI
-DummySetPalette(IN OUT PFRONTEND This,
- HPALETTE PaletteHandle,
- UINT PaletteUsage)
-{
- 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
-DummyShowMouseCursor(IN OUT PFRONTEND This,
- BOOL Show)
-{
- return 0;
-}
-
-static BOOL NTAPI
-DummySetMouseCursor(IN OUT PFRONTEND This,
- HCURSOR CursorHandle)
-{
- return TRUE;
-}
-
-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,
- DummyWriteStream,
- DummySetCursorInfo,
- DummySetScreenInfo,
- DummyResizeTerminal,
- DummySetActiveScreenBuffer,
- DummyReleaseScreenBuffer,
- DummyProcessKeyCallback,
- DummyRefreshInternalInfo,
- DummyChangeTitle,
- DummyChangeIcon,
- DummyGetConsoleWindowHandle,
- DummyGetLargestConsoleWindowSize,
- DummyGetSelectionInfo,
- DummySetPalette,
- DummyGetDisplayMode,
- DummySetDisplayMode,
- DummyShowMouseCursor,
- DummySetMouseCursor,
- DummyMenuControl,
- DummySetMenuClose,
-};
-
-VOID
-ResetFrontEnd(IN PCONSOLE Console)
-{
- if (!Console) return;
-
- /* Reinitialize the frontend interface */
- RtlZeroMemory(&Console->FrontEndIFace, sizeof(Console->FrontEndIFace));
- Console->FrontEndIFace.Vtbl = &DummyVtbl;
-}
-
-/* EOF */
Copied: branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyterm.c (from
r63112, branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c)
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
---
branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c [iso-8859-1]
(original)
+++ branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyterm.c [iso-8859-1]
Fri May 2 18:44:26 2014
@@ -1,8 +1,8 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Console Server DLL
- * FILE: win32ss/user/winsrv/consrv/condrv/dummyfrontend.c
- * PURPOSE: Dummy Terminal Front-End used when no frontend
+ * FILE: condrv/dummyterm.c
+ * PURPOSE: Dummy Terminal used when no terminal
* is attached to the specified console.
* PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca(a)sfr.fr)
*/
@@ -11,7 +11,7 @@
#include <consrv.h>
-/* DUMMY FRONTEND INTERFACE ***************************************************/
+/* DUMMY TERMINAL INTERFACE ***************************************************/
static NTSTATUS NTAPI
DummyInitFrontEnd(IN OUT PFRONTEND This,
Modified: branches/condrv_restructure/win32ss/user/winsrv/consrv/coninput.h
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
--- branches/condrv_restructure/win32ss/user/winsrv/consrv/coninput.h [iso-8859-1]
(original)
+++ branches/condrv_restructure/win32ss/user/winsrv/consrv/coninput.h [iso-8859-1] Fri May
2 18:44:26 2014
@@ -10,12 +10,3 @@
#pragma once
VOID PurgeInputBuffer(PCONSOLE Console);
-
-VOID NTAPI
-ConDrvProcessKey(IN PCONSOLE Console,
- IN BOOLEAN Down,
- IN UINT VirtualKeyCode,
- IN UINT VirtualScanCode,
- IN WCHAR UnicodeChar,
- IN ULONG ShiftState,
- IN BYTE KeyStateCtrl);
Modified: branches/condrv_restructure/win32ss/user/winsrv/consrv/console.c
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
--- branches/condrv_restructure/win32ss/user/winsrv/consrv/console.c [iso-8859-1]
(original)
+++ branches/condrv_restructure/win32ss/user/winsrv/consrv/console.c [iso-8859-1] Fri May
2 18:44:26 2014
@@ -13,12 +13,7 @@
#include "consrv.h"
#include <ndk/psfuncs.h>
-
#include "procinit.h"
-
-#ifdef TUITERM_COMPILE
-#include "frontends/tui/tuiterm.h"
-#endif
#define NDEBUG
#include <debug.h>
@@ -27,69 +22,6 @@
NTSTATUS NTAPI RtlGetLastNtStatus(VOID);
/* GLOBALS ********************************************************************/
-
-/***************/
-#ifdef TUITERM_COMPILE
-NTSTATUS NTAPI
-TuiLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
- IN OUT PCONSOLE_INFO ConsoleInfo,
- IN OUT PVOID ExtraConsoleInfo,
- IN ULONG ProcessId);
-NTSTATUS NTAPI
-TuiUnloadFrontEnd(IN OUT PFRONTEND FrontEnd);
-#endif
-
-NTSTATUS NTAPI
-GuiLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
- IN OUT PCONSOLE_INFO ConsoleInfo,
- IN OUT PVOID ExtraConsoleInfo,
- IN ULONG ProcessId);
-NTSTATUS NTAPI
-GuiUnloadFrontEnd(IN OUT PFRONTEND FrontEnd);
-/***************/
-
-typedef
-NTSTATUS (NTAPI *FRONTEND_LOAD)(IN OUT PFRONTEND FrontEnd,
- IN OUT PCONSOLE_INFO ConsoleInfo,
- IN OUT PVOID ExtraConsoleInfo,
- IN ULONG ProcessId);
-
-typedef
-NTSTATUS (NTAPI *FRONTEND_UNLOAD)(IN OUT PFRONTEND FrontEnd);
-
-/*
- * If we are not in GUI-mode, start the text-mode terminal emulator.
- * If we fail, try to start the GUI-mode terminal emulator.
- *
- * Try to open the GUI-mode terminal emulator. Two cases are possible:
- * - We are in GUI-mode, therefore GuiMode == TRUE, the previous test-case
- * failed and we start GUI-mode terminal emulator.
- * - We are in text-mode, therefore GuiMode == FALSE, the previous test-case
- * succeeded BUT we failed at starting text-mode terminal emulator.
- * Then GuiMode was switched to TRUE in order to try to open the GUI-mode
- * terminal emulator (Win32k will automatically switch to graphical mode,
- * therefore no additional code is needed).
- */
-
-/*
- * NOTE: Each entry of the table should be retrieved when loading a front-end
- * (examples of the CSR servers which register some data for CSRSS).
- */
-struct
-{
- CHAR FrontEndName[80];
- FRONTEND_LOAD FrontEndLoad;
- FRONTEND_UNLOAD FrontEndUnload;
-} FrontEndLoadingMethods[] =
-{
-#ifdef TUITERM_COMPILE
- {"TUI", TuiLoadFrontEnd, TuiUnloadFrontEnd},
-#endif
- {"GUI", GuiLoadFrontEnd, GuiUnloadFrontEnd},
-
-// {"Not found", 0, NULL}
-};
-
/* PRIVATE FUNCTIONS **********************************************************/
@@ -150,6 +82,14 @@
}
+/* static */ NTSTATUS
+ConSrvLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
+ IN OUT PCONSOLE_INFO ConsoleInfo,
+ IN OUT PVOID ExtraConsoleInfo,
+ IN ULONG ProcessId);
+/* static */ NTSTATUS
+ConSrvUnloadFrontEnd(IN PFRONTEND FrontEnd);
+
NTSTATUS NTAPI
ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
OUT PCONSOLE* NewConsole,
@@ -161,7 +101,7 @@
PCONSOLE Console;
CONSOLE_INFO ConsoleInfo;
SIZE_T Length = 0;
- ULONG i = 0;
+
FRONTEND FrontEnd;
if (NewConsole == NULL || ConsoleStartInfo == NULL)
@@ -182,39 +122,31 @@
wcsncpy(ConsoleInfo.ConsoleTitle, ConsoleStartInfo->ConsoleTitle, Length);
ConsoleInfo.ConsoleTitle[Length] = L'\0';
-
- /*
- * Choose an adequate terminal front-end to load, and load it
- */
- Status = STATUS_SUCCESS;
- for (i = 0; i < sizeof(FrontEndLoadingMethods) /
sizeof(FrontEndLoadingMethods[0]); ++i)
- {
- DPRINT("CONSRV: Trying to load %s terminal emulator...\n",
FrontEndLoadingMethods[i].FrontEndName);
- Status = FrontEndLoadingMethods[i].FrontEndLoad(&FrontEnd,
- &ConsoleInfo,
- ConsoleStartInfo,
- ConsoleLeaderProcessId);
- if (NT_SUCCESS(Status))
- {
- DPRINT("CONSRV: %s terminal emulator loaded successfully\n",
FrontEndLoadingMethods[i].FrontEndName);
- break;
- }
- else
- {
- DPRINT1("CONSRV: Loading %s terminal emulator failed, Status = 0x%08lx ,
continuing...\n", FrontEndLoadingMethods[i].FrontEndName, Status);
- }
- }
-
+#if 0
+ /* 3. Initialize the ConSrv terminal */
+ Status = ConSrvInitTerminal(&Terminal,
+ &ConsoleInfo,
+ ConsoleStartInfo,
+ ConsoleLeaderProcessId);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("CONSRV: Failed to initialize a terminal, Status = 0x%08lx\n",
Status);
+ return Status;
+ }
+ 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.
*/
@@ -249,8 +181,8 @@
/* Set-up the code page */
ConsoleInfo.CodePage = GetOEMCP();
-/******************************************************************************/
-
+
+ /* Initialize a new console via the driver */
Status = ConDrvInitConsole(&ConsoleHandle,
&Console,
&ConsoleInfo,
@@ -258,7 +190,7 @@
if (!NT_SUCCESS(Status))
{
DPRINT1("Creating a new console failed, Status = 0x%08lx\n", Status);
- FrontEndLoadingMethods[i].FrontEndUnload(&FrontEnd);
+ ConSrvUnloadFrontEnd(&FrontEnd);
return Status;
}
@@ -266,20 +198,26 @@
DPRINT("Console initialized\n");
/*** Register ConSrv features ***/
+
+ /* Initialize process support */
InitializeListHead(&Console->ProcessList);
Console->NotifiedLastCloseProcess = NULL;
Console->NotifyLastClose = FALSE;
+
+ /* Initialize pausing support */
+ Console->PauseFlags = 0;
InitializeListHead(&Console->ReadWaitQueue);
InitializeListHead(&Console->WriteWaitQueue);
- Console->PauseFlags = 0;
- Console->QuickEdit = ConsoleInfo.QuickEdit;
-
+
+ Console->QuickEdit = ConsoleInfo.QuickEdit;
+
+ /* Attach the ConSrv terminal to the console */
Status = ConDrvRegisterFrontEnd(Console, &FrontEnd);
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to register frontend to the given console, Status =
0x%08lx\n", Status);
ConDrvDeleteConsole(Console);
- FrontEndLoadingMethods[i].FrontEndUnload(&FrontEnd);
+ ConSrvUnloadFrontEnd(&FrontEnd);
return Status;
}
DPRINT("FrontEnd registered\n");
Modified: branches/condrv_restructure/win32ss/user/winsrv/consrv/frontends/input.c
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
--- branches/condrv_restructure/win32ss/user/winsrv/consrv/frontends/input.c [iso-8859-1]
(original)
+++ branches/condrv_restructure/win32ss/user/winsrv/consrv/frontends/input.c [iso-8859-1]
Fri May 2 18:44:26 2014
@@ -19,6 +19,77 @@
/* PRIVATE FUNCTIONS **********************************************************/
+
+static VOID
+ConDrvProcessKey(IN PCONSOLE Console,
+ IN BOOLEAN Down,
+ IN UINT VirtualKeyCode,
+ IN UINT VirtualScanCode,
+ IN WCHAR UnicodeChar,
+ IN ULONG ShiftState,
+ IN BYTE KeyStateCtrl)
+{
+ INPUT_RECORD er;
+
+ /* process Ctrl-C and Ctrl-Break */
+ if ( Console->InputBuffer.Mode & ENABLE_PROCESSED_INPUT &&
+ Down && (VirtualKeyCode == VK_PAUSE || VirtualKeyCode == 'C')
&&
+ (ShiftState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED) || KeyStateCtrl &
0x80) )
+ {
+ DPRINT1("Console_Api Ctrl-C\n");
+ ConSrvConsoleProcessCtrlEvent(Console, 0, CTRL_C_EVENT);
+
+ if (Console->LineBuffer && !Console->LineComplete)
+ {
+ /* Line input is in progress; end it */
+ Console->LinePos = Console->LineSize = 0;
+ Console->LineComplete = TRUE;
+ }
+ return;
+ }
+
+ if ( (ShiftState & (RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED)) != 0 &&
+ (VK_UP == VirtualKeyCode || VK_DOWN == VirtualKeyCode) )
+ {
+ if (!Down) return;
+
+ /* scroll up or down */
+ if (VK_UP == VirtualKeyCode)
+ {
+ /* only scroll up if there is room to scroll up into */
+ if (Console->ActiveBuffer->CursorPosition.Y !=
Console->ActiveBuffer->ScreenBufferSize.Y - 1)
+ {
+ Console->ActiveBuffer->VirtualY =
(Console->ActiveBuffer->VirtualY +
+
Console->ActiveBuffer->ScreenBufferSize.Y - 1) %
+
Console->ActiveBuffer->ScreenBufferSize.Y;
+ Console->ActiveBuffer->CursorPosition.Y++;
+ }
+ }
+ else
+ {
+ /* only scroll down if there is room to scroll down into */
+ if (Console->ActiveBuffer->CursorPosition.Y != 0)
+ {
+ Console->ActiveBuffer->VirtualY =
(Console->ActiveBuffer->VirtualY + 1) %
+
Console->ActiveBuffer->ScreenBufferSize.Y;
+ Console->ActiveBuffer->CursorPosition.Y--;
+ }
+ }
+
+ ConioDrawConsole(Console);
+ return;
+ }
+
+ er.EventType = KEY_EVENT;
+ er.Event.KeyEvent.bKeyDown = Down;
+ er.Event.KeyEvent.wRepeatCount = 1;
+ er.Event.KeyEvent.wVirtualKeyCode = VirtualKeyCode;
+ er.Event.KeyEvent.wVirtualScanCode = VirtualScanCode;
+ er.Event.KeyEvent.uChar.UnicodeChar = UnicodeChar;
+ er.Event.KeyEvent.dwControlKeyState = ShiftState;
+
+ ConioProcessInputEvent(Console, &er);
+}
static DWORD
ConioGetShiftState(PBYTE KeyState, LPARAM lParam)
Copied: branches/condrv_restructure/win32ss/user/winsrv/consrv/frontends/terminal.c (from
r63112, branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c)
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
---
branches/condrv_restructure/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c [iso-8859-1]
(original)
+++
branches/condrv_restructure/win32ss/user/winsrv/consrv/frontends/terminal.c [iso-8859-1]
Fri May 2 18:44:26 2014
@@ -1,9 +1,8 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Console Server DLL
- * FILE: win32ss/user/winsrv/consrv/condrv/dummyfrontend.c
- * PURPOSE: Dummy Terminal Front-End used when no frontend
- * is attached to the specified console.
+ * FILE: frontends/terminal.c
+ * PURPOSE: ConSrv terminal.
* PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca(a)sfr.fr)
*/
@@ -11,7 +10,129 @@
#include <consrv.h>
+#ifdef TUITERM_COMPILE
+#include "frontends/tui/tuiterm.h"
+#endif
+
+#define NDEBUG
+#include <debug.h>
+
+/* CONSRV TERMINAL FRONTENDS INTERFACE ****************************************/
+
+/***************/
+#ifdef TUITERM_COMPILE
+NTSTATUS NTAPI
+TuiLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
+ IN OUT PCONSOLE_INFO ConsoleInfo,
+ IN OUT PVOID ExtraConsoleInfo,
+ IN ULONG ProcessId);
+NTSTATUS NTAPI
+TuiUnloadFrontEnd(IN OUT PFRONTEND FrontEnd);
+#endif
+
+NTSTATUS NTAPI
+GuiLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
+ IN OUT PCONSOLE_INFO ConsoleInfo,
+ IN OUT PVOID ExtraConsoleInfo,
+ IN ULONG ProcessId);
+NTSTATUS NTAPI
+GuiUnloadFrontEnd(IN OUT PFRONTEND FrontEnd);
+/***************/
+
+typedef
+NTSTATUS (NTAPI *FRONTEND_LOAD)(IN OUT PFRONTEND FrontEnd,
+ IN OUT PCONSOLE_INFO ConsoleInfo,
+ IN OUT PVOID ExtraConsoleInfo,
+ IN ULONG ProcessId);
+
+typedef
+NTSTATUS (NTAPI *FRONTEND_UNLOAD)(IN OUT PFRONTEND FrontEnd);
+
+/*
+ * If we are not in GUI-mode, start the text-mode terminal emulator.
+ * If we fail, try to start the GUI-mode terminal emulator.
+ *
+ * Try to open the GUI-mode terminal emulator. Two cases are possible:
+ * - We are in GUI-mode, therefore GuiMode == TRUE, the previous test-case
+ * failed and we start GUI-mode terminal emulator.
+ * - We are in text-mode, therefore GuiMode == FALSE, the previous test-case
+ * succeeded BUT we failed at starting text-mode terminal emulator.
+ * Then GuiMode was switched to TRUE in order to try to open the GUI-mode
+ * terminal emulator (Win32k will automatically switch to graphical mode,
+ * therefore no additional code is needed).
+ */
+
+/*
+ * NOTE: Each entry of the table should be retrieved when loading a front-end
+ * (examples of the CSR servers which register some data for CSRSS).
+ */
+struct
+{
+ CHAR FrontEndName[80];
+ FRONTEND_LOAD FrontEndLoad;
+ FRONTEND_UNLOAD FrontEndUnload;
+} FrontEndLoadingMethods[] =
+{
+#ifdef TUITERM_COMPILE
+ {"TUI", TuiLoadFrontEnd, TuiUnloadFrontEnd},
+#endif
+ {"GUI", GuiLoadFrontEnd, GuiUnloadFrontEnd},
+
+// {"Not found", 0, NULL}
+};
+
+
+/* static */ NTSTATUS
+ConSrvLoadFrontEnd(IN OUT PFRONTEND FrontEnd,
+ IN OUT PCONSOLE_INFO ConsoleInfo,
+ IN OUT PVOID ExtraConsoleInfo,
+ IN ULONG ProcessId)
+{
+ NTSTATUS Status = STATUS_SUCCESS;
+ ULONG i;
+
+ /*
+ * Choose an adequate terminal front-end to load, and load it
+ */
+ for (i = 0; i < sizeof(FrontEndLoadingMethods) /
sizeof(FrontEndLoadingMethods[0]); ++i)
+ {
+ DPRINT("CONSRV: Trying to load %s frontend...\n",
+ FrontEndLoadingMethods[i].FrontEndName);
+ Status = FrontEndLoadingMethods[i].FrontEndLoad(FrontEnd,
+ ConsoleInfo,
+ ExtraConsoleInfo,
+ ProcessId);
+ if (NT_SUCCESS(Status))
+ {
+ /* Save the unload callback */
+ FrontEnd->UnloadFrontEnd = FrontEndLoadingMethods[i].FrontEndUnload;
+
+ DPRINT("CONSRV: %s frontend loaded successfully\n",
+ FrontEndLoadingMethods[i].FrontEndName);
+ break;
+ }
+ else
+ {
+ DPRINT1("CONSRV: Loading %s frontend failed, Status = 0x%08lx ,
continuing...\n",
+ FrontEndLoadingMethods[i].FrontEndName, Status);
+ }
+ }
+
+ return Status;
+}
+
+/* static */ NTSTATUS
+ConSrvUnloadFrontEnd(IN PFRONTEND FrontEnd)
+{
+ if (FrontEnd == NULL) return STATUS_INVALID_PARAMETER;
+ // return FrontEnd->Vtbl->UnloadFrontEnd(FrontEnd);
+ return FrontEnd->UnloadFrontEnd(FrontEnd);
+}
+
+
/* DUMMY FRONTEND INTERFACE ***************************************************/
+
+#if 0
static NTSTATUS NTAPI
DummyInitFrontEnd(IN OUT PFRONTEND This,
@@ -210,4 +331,6 @@
Console->FrontEndIFace.Vtbl = &DummyVtbl;
}
+#endif
+
/* EOF */
Modified: branches/condrv_restructure/win32ss/user/winsrv/consrv/include/conio.h
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
--- branches/condrv_restructure/win32ss/user/winsrv/consrv/include/conio.h [iso-8859-1]
(original)
+++ branches/condrv_restructure/win32ss/user/winsrv/consrv/include/conio.h [iso-8859-1]
Fri May 2 18:44:26 2014
@@ -297,7 +297,7 @@
/**************************** Input buffer and data ***************************/
CONSOLE_INPUT_BUFFER InputBuffer; /* Input buffer of the console */
- UINT CodePage;
+ UINT InputCodePage;
/** Put those things in TEXTMODE_SCREEN_BUFFER ?? **/
PWCHAR LineBuffer; /* Current line being input, in line buffered
mode */
Modified: branches/condrv_restructure/win32ss/user/winsrv/consrv/include/conio_winsrv.h
URL:
http://svn.reactos.org/svn/reactos/branches/condrv_restructure/win32ss/user…
==============================================================================
---
branches/condrv_restructure/win32ss/user/winsrv/consrv/include/conio_winsrv.h [iso-8859-1]
(original)
+++
branches/condrv_restructure/win32ss/user/winsrv/consrv/include/conio_winsrv.h [iso-8859-1]
Fri May 2 18:44:26 2014
@@ -85,6 +85,8 @@
struct _FRONTEND
{
PFRONTEND_VTBL Vtbl; /* Virtual table */
+ NTSTATUS (NTAPI *UnloadFrontEnd)(IN OUT PFRONTEND This);
+
struct _CONSOLE* Console; /* Console to which the frontend is attached to */
PVOID Data; /* Private data */
PVOID OldData; /* Reserved */