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