Author: hbelusca
Date: Sun Jun 23 23:19:42 2013
New Revision: 59326

URL: http://svn.reactos.org/svn/reactos?rev=59326&view=rev
Log:
[CONSRV]
- Turn some BOOLs into BOOLEANs in condrv.
- Move some coninput functions into condrv.

Added:
    trunk/reactos/win32ss/user/consrv/condrv/coninput.c
      - copied, changed from r59297, 
trunk/reactos/win32ss/user/consrv/coninput.c
Modified:
    trunk/reactos/win32ss/user/consrv/CMakeLists.txt
    trunk/reactos/win32ss/user/consrv/condrv/conoutput.c
    trunk/reactos/win32ss/user/consrv/condrv/console.c
    trunk/reactos/win32ss/user/consrv/condrv/text.c
    trunk/reactos/win32ss/user/consrv/coninput.c
    trunk/reactos/win32ss/user/consrv/conoutput.c

Modified: trunk/reactos/win32ss/user/consrv/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/CMakeLists.txt?rev=59326&r1=59325&r2=59326&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/consrv/CMakeLists.txt    [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/CMakeLists.txt    [iso-8859-1] Sun Jun 23 
23:19:42 2013
@@ -18,6 +18,7 @@
     init.c
     lineinput.c
     settings.c
+    condrv/coninput.c
     condrv/conoutput.c
     condrv/console.c
     condrv/graphics.c

Copied: trunk/reactos/win32ss/user/consrv/condrv/coninput.c (from r59297, 
trunk/reactos/win32ss/user/consrv/coninput.c)
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/condrv/coninput.c?p2=trunk/reactos/win32ss/user/consrv/condrv/coninput.c&p1=trunk/reactos/win32ss/user/consrv/coninput.c&r1=59297&r2=59326&rev=59326&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/consrv/coninput.c        [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/condrv/coninput.c [iso-8859-1] Sun Jun 23 
23:19:42 2013
@@ -53,6 +53,7 @@
 
 /* PRIVATE FUNCTIONS 
**********************************************************/
 
+#if 0
 static VOID FASTCALL
 ConioInputEventToAnsi(PCONSOLE Console, PINPUT_RECORD InputEvent)
 {
@@ -65,6 +66,7 @@
                                           &UnicodeChar);
     }
 }
+#endif
 
 NTSTATUS FASTCALL
 ConioProcessInputEvent(PCONSOLE Console,
@@ -206,515 +208,33 @@
     ConioProcessInputEvent(Console, &er);
 }
 
-static NTSTATUS
-WaitBeforeReading(IN PGET_INPUT_INFO InputInfo,
-                  IN PCSR_API_MESSAGE ApiMessage,
-                  IN CSR_WAIT_FUNCTION WaitFunction OPTIONAL,
-                  IN BOOL CreateWaitBlock OPTIONAL)
-{
-    if (CreateWaitBlock)
-    {
-        PGET_INPUT_INFO CapturedInputInfo;
-
-        CapturedInputInfo = ConsoleAllocHeap(0, sizeof(GET_INPUT_INFO));
-        if (!CapturedInputInfo) return STATUS_NO_MEMORY;
-
-        RtlMoveMemory(CapturedInputInfo, InputInfo, sizeof(GET_INPUT_INFO));
-
-        if (!CsrCreateWait(&InputInfo->InputBuffer->ReadWaitQueue,
-                           WaitFunction,
-                           InputInfo->CallingThread,
-                           ApiMessage,
-                           CapturedInputInfo,
-                           NULL))
-        {
-            ConsoleFreeHeap(CapturedInputInfo);
-            return STATUS_NO_MEMORY;
-        }
-    }
-
-    /* Wait for input */
-    return STATUS_PENDING;
-}
-
-static NTSTATUS
-ReadInputBuffer(IN PGET_INPUT_INFO InputInfo,
-                IN BOOL Wait,
-                IN PCSR_API_MESSAGE ApiMessage,
-                IN BOOL CreateWaitBlock OPTIONAL);
-
-// Wait function CSR_WAIT_FUNCTION
-static BOOLEAN
-ReadInputBufferThread(IN PLIST_ENTRY WaitList,
-                      IN PCSR_THREAD WaitThread,
-                      IN PCSR_API_MESSAGE WaitApiMessage,
-                      IN PVOID WaitContext,
-                      IN PVOID WaitArgument1,
-                      IN PVOID WaitArgument2,
-                      IN ULONG WaitFlags)
-{
-    NTSTATUS Status;
-    PCONSOLE_GETINPUT GetInputRequest = 
&((PCONSOLE_API_MESSAGE)WaitApiMessage)->Data.GetInputRequest;
-    PGET_INPUT_INFO InputInfo = (PGET_INPUT_INFO)WaitContext;
-
-    PVOID InputHandle = WaitArgument2;
-
-    DPRINT("ReadInputBufferThread - WaitContext = 0x%p, WaitArgument1 = 0x%p, 
WaitArgument2 = 0x%p, WaitFlags = %lu\n", WaitContext, WaitArgument1, 
WaitArgument2, WaitFlags);
-
-    /*
-     * If we are notified of the process termination via a call
-     * to CsrNotifyWaitBlock triggered by CsrDestroyProcess or
-     * CsrDestroyThread, just return.
-     */
-    if (WaitFlags & CsrProcessTerminating)
-    {
-        Status = STATUS_THREAD_IS_TERMINATING;
-        goto Quit;
-    }
-
-    /*
-     * Somebody is closing a handle to this input buffer,
-     * by calling ConSrvCloseHandleEntry.
-     * See whether we are linked to that handle (ie. we
-     * are a waiter for this handle), and if so, return.
-     * Otherwise, ignore the call and continue waiting.
-     */
-    if (InputHandle != NULL)
-    {
-        Status = (InputHandle == InputInfo->HandleEntry ? STATUS_ALERTED
-                                                        : STATUS_PENDING);
-        goto Quit;
-    }
-
-    /*
-     * If we go there, that means we are notified for some new input.
-     * The console is therefore already locked.
-     */
-    Status = ReadInputBuffer(InputInfo,
-                             GetInputRequest->bRead,
-                             WaitApiMessage,
-                             FALSE);
-
-Quit:
-    if (Status != STATUS_PENDING)
-    {
-        WaitApiMessage->Status = Status;
-        ConsoleFreeHeap(InputInfo);
-    }
-
-    return (Status == STATUS_PENDING ? FALSE : TRUE);
-}
-
-static NTSTATUS
-ReadInputBuffer(IN PGET_INPUT_INFO InputInfo,
-                IN BOOL Wait,   // TRUE --> Read ; FALSE --> Peek
-                IN PCSR_API_MESSAGE ApiMessage,
-                IN BOOL CreateWaitBlock OPTIONAL)
-{
-    PCONSOLE_INPUT_BUFFER InputBuffer = InputInfo->InputBuffer;
-
-    if (IsListEmpty(&InputBuffer->InputEvents))
-    {
-        if (Wait)
-        {
-            return WaitBeforeReading(InputInfo,
-                                     ApiMessage,
-                                     ReadInputBufferThread,
-                                     CreateWaitBlock);
-        }
-        else
-        {
-            /* No input available and we don't wait, so we return success */
-            return STATUS_SUCCESS;
-        }
-    }
-    else
-    {
-        PCONSOLE_GETINPUT GetInputRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetInputRequest;
-        PLIST_ENTRY CurrentInput;
-        ConsoleInput* Input;
-        ULONG Length = GetInputRequest->Length;
-        PINPUT_RECORD InputRecord = GetInputRequest->InputRecord;
-
-        /* Only get input if there is any */
-        CurrentInput = InputBuffer->InputEvents.Flink;
-
-        while ( CurrentInput != &InputBuffer->InputEvents &&
-                GetInputRequest->InputsRead < Length )
-        {
-            Input = CONTAINING_RECORD(CurrentInput, ConsoleInput, ListEntry);
-
-            GetInputRequest->InputsRead++;
-            *InputRecord = Input->InputEvent;
-
-            if (GetInputRequest->Unicode == FALSE)
-            {
-                ConioInputEventToAnsi(InputBuffer->Header.Console, 
InputRecord);
-            }
-
-            InputRecord++;
-            CurrentInput = CurrentInput->Flink;
-
-            if (Wait) // TRUE --> Read, we remove inputs from the buffer ; 
FALSE --> Peek, we keep inputs.
-            {
-                RemoveEntryList(&Input->ListEntry);
-                ConsoleFreeHeap(Input);
-            }
-        }
-
-        if (IsListEmpty(&InputBuffer->InputEvents))
-        {
-            ResetEvent(InputBuffer->ActiveEvent);
-        }
-
-        /* We read all the inputs available, we return success */
-        return STATUS_SUCCESS;
-    }
-}
-
-static NTSTATUS
-ReadChars(IN PGET_INPUT_INFO InputInfo,
-          IN PCSR_API_MESSAGE ApiMessage,
-          IN BOOL CreateWaitBlock OPTIONAL);
-
-// Wait function CSR_WAIT_FUNCTION
-static BOOLEAN
-ReadCharsThread(IN PLIST_ENTRY WaitList,
-                IN PCSR_THREAD WaitThread,
-                IN PCSR_API_MESSAGE WaitApiMessage,
-                IN PVOID WaitContext,
-                IN PVOID WaitArgument1,
-                IN PVOID WaitArgument2,
-                IN ULONG WaitFlags)
-{
-    NTSTATUS Status;
-    PGET_INPUT_INFO InputInfo = (PGET_INPUT_INFO)WaitContext;
-
-    PVOID InputHandle = WaitArgument2;
-
-    DPRINT("ReadCharsThread - WaitContext = 0x%p, WaitArgument1 = 0x%p, 
WaitArgument2 = 0x%p, WaitFlags = %lu\n", WaitContext, WaitArgument1, 
WaitArgument2, WaitFlags);
-
-    /*
-     * If we are notified of the process termination via a call
-     * to CsrNotifyWaitBlock triggered by CsrDestroyProcess or
-     * CsrDestroyThread, just return.
-     */
-    if (WaitFlags & CsrProcessTerminating)
-    {
-        Status = STATUS_THREAD_IS_TERMINATING;
-        goto Quit;
-    }
-
-    /*
-     * Somebody is closing a handle to this input buffer,
-     * by calling ConSrvCloseHandleEntry.
-     * See whether we are linked to that handle (ie. we
-     * are a waiter for this handle), and if so, return.
-     * Otherwise, ignore the call and continue waiting.
-     */
-    if (InputHandle != NULL)
-    {
-        Status = (InputHandle == InputInfo->HandleEntry ? STATUS_ALERTED
-                                                        : STATUS_PENDING);
-        goto Quit;
-    }
-
-    /*
-     * If we go there, that means we are notified for some new input.
-     * The console is therefore already locked.
-     */
-    Status = ReadChars(InputInfo,
-                       WaitApiMessage,
-                       FALSE);
-
-Quit:
-    if (Status != STATUS_PENDING)
-    {
-        WaitApiMessage->Status = Status;
-        ConsoleFreeHeap(InputInfo);
-    }
-
-    return (Status == STATUS_PENDING ? FALSE : TRUE);
-}
-
-static NTSTATUS
-ReadChars(IN PGET_INPUT_INFO InputInfo,
-          IN PCSR_API_MESSAGE ApiMessage,
-          IN BOOL CreateWaitBlock OPTIONAL)
-{
-    BOOL WaitForMoreToRead = TRUE; // TRUE : Wait if more to read ; FALSE : 
Don't wait.
-
-    PCONSOLE_READCONSOLE ReadConsoleRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ReadConsoleRequest;
-    PCONSOLE_INPUT_BUFFER InputBuffer = InputInfo->InputBuffer;
-    PCONSOLE Console = InputBuffer->Header.Console;
-    PLIST_ENTRY CurrentEntry;
-    ConsoleInput *Input;
-    PCHAR Buffer = (PCHAR)ReadConsoleRequest->Buffer;
-    PWCHAR UnicodeBuffer = (PWCHAR)Buffer;
-    ULONG nNumberOfCharsToRead = ReadConsoleRequest->NrCharactersToRead;
-
-    /* We haven't read anything (yet) */
-
-    if (InputBuffer->Mode & ENABLE_LINE_INPUT)
-    {
-        if (Console->LineBuffer == NULL)
-        {
-            /* Starting a new line */
-            Console->LineMaxSize = (WORD)max(256, nNumberOfCharsToRead);
-            Console->LineBuffer = ConsoleAllocHeap(0, Console->LineMaxSize * 
sizeof(WCHAR));
-            if (Console->LineBuffer == NULL)
-            {
-                return STATUS_NO_MEMORY;
-            }
-            Console->LineComplete = FALSE;
-            Console->LineUpPressed = FALSE;
-            Console->LineInsertToggle = 0;
-            Console->LineWakeupMask = ReadConsoleRequest->CtrlWakeupMask;
-            Console->LineSize = ReadConsoleRequest->NrCharactersRead;
-            Console->LinePos = Console->LineSize;
-
-            /*
-             * Pre-filling the buffer is only allowed in the Unicode API,
-             * so we don't need to worry about ANSI <-> Unicode conversion.
-             */
-            memcpy(Console->LineBuffer, Buffer, Console->LineSize * 
sizeof(WCHAR));
-            if (Console->LineSize == Console->LineMaxSize)
-            {
-                Console->LineComplete = TRUE;
-                Console->LinePos = 0;
-            }
-        }
-
-        /* If we don't have a complete line yet, process the pending input */
-        while ( !Console->LineComplete &&
-                !IsListEmpty(&InputBuffer->InputEvents) )
-        {
-            /* Remove input event from queue */
-            CurrentEntry = RemoveHeadList(&InputBuffer->InputEvents);
-            if (IsListEmpty(&InputBuffer->InputEvents))
-            {
-                ResetEvent(InputBuffer->ActiveEvent);
-            }
-            Input = CONTAINING_RECORD(CurrentEntry, ConsoleInput, ListEntry);
-
-            /* Only pay attention to key down */
-            if (KEY_EVENT == Input->InputEvent.EventType
-                    && Input->InputEvent.Event.KeyEvent.bKeyDown)
-            {
-                LineInputKeyDown(Console, &Input->InputEvent.Event.KeyEvent);
-                ReadConsoleRequest->ControlKeyState = 
Input->InputEvent.Event.KeyEvent.dwControlKeyState;
-            }
-            ConsoleFreeHeap(Input);
-        }
-
-        /* Check if we have a complete line to read from */
-        if (Console->LineComplete)
-        {
-            while ( ReadConsoleRequest->NrCharactersRead < 
nNumberOfCharsToRead &&
-                    Console->LinePos != Console->LineSize )
-            {
-                WCHAR Char = Console->LineBuffer[Console->LinePos++];
-
-                if (ReadConsoleRequest->Unicode)
-                {
-                    UnicodeBuffer[ReadConsoleRequest->NrCharactersRead] = Char;
-                }
-                else
-                {
-                    ConsoleInputUnicodeCharToAnsiChar(Console,
-                                                      
&Buffer[ReadConsoleRequest->NrCharactersRead],
-                                                      &Char);
-                }
-
-                ReadConsoleRequest->NrCharactersRead++;
-            }
-
-            if (Console->LinePos == Console->LineSize)
-            {
-                /* Entire line has been read */
-                ConsoleFreeHeap(Console->LineBuffer);
-                Console->LineBuffer = NULL;
-            }
-
-            WaitForMoreToRead = FALSE;
-        }
-    }
-    else
-    {
-        /* Character input */
-        while ( ReadConsoleRequest->NrCharactersRead < nNumberOfCharsToRead &&
-                !IsListEmpty(&InputBuffer->InputEvents) )
-        {
-            /* Remove input event from queue */
-            CurrentEntry = RemoveHeadList(&InputBuffer->InputEvents);
-            if (IsListEmpty(&InputBuffer->InputEvents))
-            {
-                ResetEvent(InputBuffer->ActiveEvent);
-            }
-            Input = CONTAINING_RECORD(CurrentEntry, ConsoleInput, ListEntry);
-
-            /* Only pay attention to valid ascii chars, on key down */
-            if (KEY_EVENT == Input->InputEvent.EventType
-                    && Input->InputEvent.Event.KeyEvent.bKeyDown
-                    && Input->InputEvent.Event.KeyEvent.uChar.UnicodeChar != 
L'\0')
-            {
-                WCHAR Char = 
Input->InputEvent.Event.KeyEvent.uChar.UnicodeChar;
-
-                if (ReadConsoleRequest->Unicode)
-                {
-                    UnicodeBuffer[ReadConsoleRequest->NrCharactersRead] = Char;
-                }
-                else
-                {
-                    ConsoleInputUnicodeCharToAnsiChar(Console,
-                                                      
&Buffer[ReadConsoleRequest->NrCharactersRead],
-                                                      &Char);
-                }
-
-                ReadConsoleRequest->NrCharactersRead++;
-
-                /* Did read something */
-                WaitForMoreToRead = FALSE;
-            }
-            ConsoleFreeHeap(Input);
-        }
-    }
-
-    /* We haven't completed a read, so start a wait */
-    if (WaitForMoreToRead == TRUE)
-    {
-        return WaitBeforeReading(InputInfo,
-                                 ApiMessage,
-                                 ReadCharsThread,
-                                 CreateWaitBlock);
-    }
-    else /* We read all what we wanted, we return success */
-    {
-        return STATUS_SUCCESS;
-    }
-}
-
 
 /* PUBLIC SERVER APIS 
*********************************************************/
 
-CSR_API(SrvReadConsole)
-{
-    NTSTATUS Status;
-    PCONSOLE_READCONSOLE ReadConsoleRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ReadConsoleRequest;
-    PCONSOLE_PROCESS_DATA ProcessData = 
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
-    PVOID HandleEntry;
-    PCONSOLE_INPUT_BUFFER InputBuffer;
-    GET_INPUT_INFO InputInfo;
-
-    DPRINT("SrvReadConsole\n");
-
-    if (!CsrValidateMessageBuffer(ApiMessage,
-                                  (PVOID*)&ReadConsoleRequest->Buffer,
-                                  ReadConsoleRequest->BufferSize,
-                                  sizeof(BYTE)))
-    {
+NTSTATUS NTAPI
+ConDrvWriteConsoleInput(IN PCONSOLE Console,
+                        IN PCONSOLE_INPUT_BUFFER InputBuffer,
+                        IN BOOLEAN Unicode,
+                        IN PINPUT_RECORD InputRecord,
+                        IN ULONG NumEventsToWrite,
+                        OUT PULONG NumEventsWritten)
+{
+    NTSTATUS Status = STATUS_SUCCESS;
+    ULONG i;
+
+    if (Console == NULL || InputBuffer == NULL /* || InputRecord == NULL */)
         return STATUS_INVALID_PARAMETER;
-    }
-
-    if (ReadConsoleRequest->NrCharactersRead > 
ReadConsoleRequest->NrCharactersToRead)
-    {
-        return STATUS_INVALID_PARAMETER;
-    }
-
-    Status = ConSrvGetInputBufferAndHandleEntry(ProcessData, 
ReadConsoleRequest->InputHandle, &InputBuffer, &HandleEntry, GENERIC_READ, 
TRUE);
-    if (!NT_SUCCESS(Status)) return Status;
-
-    ReadConsoleRequest->NrCharactersRead = 0;
-
-    InputInfo.CallingThread = CsrGetClientThread();
-    InputInfo.HandleEntry   = HandleEntry;
-    InputInfo.InputBuffer   = InputBuffer;
-
-    Status = ReadChars(&InputInfo,
-                       ApiMessage,
-                       TRUE);
-
-    ConSrvReleaseInputBuffer(InputBuffer, TRUE);
-
-    if (Status == STATUS_PENDING)
-        *ReplyCode = CsrReplyPending;
-
-    return Status;
-}
-
-CSR_API(SrvGetConsoleInput)
-{
-    NTSTATUS Status;
-    PCONSOLE_GETINPUT GetInputRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetInputRequest;
-    PCONSOLE_PROCESS_DATA ProcessData = 
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
-    PVOID HandleEntry;
-    PCONSOLE_INPUT_BUFFER InputBuffer;
-    GET_INPUT_INFO InputInfo;
-
-    DPRINT("SrvGetConsoleInput\n");
-
-    if (!CsrValidateMessageBuffer(ApiMessage,
-                                  (PVOID*)&GetInputRequest->InputRecord,
-                                  GetInputRequest->Length,
-                                  sizeof(INPUT_RECORD)))
-    {
-        return STATUS_INVALID_PARAMETER;
-    }
-
-    GetInputRequest->InputsRead = 0;
-
-    Status = ConSrvGetInputBufferAndHandleEntry(ProcessData, 
GetInputRequest->InputHandle, &InputBuffer, &HandleEntry, GENERIC_READ, TRUE);
-    if (!NT_SUCCESS(Status)) return Status;
-
-    InputInfo.CallingThread = CsrGetClientThread();
-    InputInfo.HandleEntry   = HandleEntry;
-    InputInfo.InputBuffer   = InputBuffer;
-
-    Status = ReadInputBuffer(&InputInfo,
-                             GetInputRequest->bRead,
-                             ApiMessage,
-                             TRUE);
-
-    ConSrvReleaseInputBuffer(InputBuffer, TRUE);
-
-    if (Status == STATUS_PENDING)
-        *ReplyCode = CsrReplyPending;
-
-    return Status;
-}
-
-CSR_API(SrvWriteConsoleInput)
-{
-    NTSTATUS Status;
-    PCONSOLE_WRITEINPUT WriteInputRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.WriteInputRequest;
-    PINPUT_RECORD InputRecord;
-    PCONSOLE_PROCESS_DATA ProcessData = 
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
-    PCONSOLE_INPUT_BUFFER InputBuffer;
-    PCONSOLE Console;
-    DWORD Length;
-    DWORD i;
-
-    DPRINT("SrvWriteConsoleInput\n");
-
-    if (!CsrValidateMessageBuffer(ApiMessage,
-                                  (PVOID*)&WriteInputRequest->InputRecord,
-                                  WriteInputRequest->Length,
-                                  sizeof(INPUT_RECORD)))
-    {
-        return STATUS_INVALID_PARAMETER;
-    }
-
-    Status = ConSrvGetInputBuffer(ProcessData, WriteInputRequest->InputHandle, 
&InputBuffer, GENERIC_WRITE, TRUE);
-    if (!NT_SUCCESS(Status)) return Status;
-
-    Console = InputBuffer->Header.Console;
-    InputRecord = WriteInputRequest->InputRecord;
-    Length = WriteInputRequest->Length;
-
-    for (i = 0; i < Length && NT_SUCCESS(Status); i++)
-    {
-        if (!WriteInputRequest->Unicode &&
-            InputRecord->EventType == KEY_EVENT)
+
+    /* Validity checks */
+    ASSERT(Console == InputBuffer->Header.Console);
+    ASSERT( (InputRecord != NULL && NumEventsToWrite >= 0) ||
+            (InputRecord == NULL && NumEventsToWrite == 0) );
+
+    if (NumEventsWritten) *NumEventsWritten = 0;
+
+    for (i = 0; i < NumEventsToWrite && NT_SUCCESS(Status); ++i)
+    {
+        if (InputRecord->EventType == KEY_EVENT && !Unicode)
         {
             CHAR AsciiChar = InputRecord->Event.KeyEvent.uChar.AsciiChar;
             ConsoleInputAnsiCharToUnicodeChar(Console,
@@ -725,29 +245,23 @@
         Status = ConioProcessInputEvent(Console, InputRecord++);
     }
 
-    ConSrvReleaseInputBuffer(InputBuffer, TRUE);
-
-    WriteInputRequest->Length = i;
+    if (NumEventsWritten) *NumEventsWritten = i;
 
     return Status;
 }
 
-CSR_API(SrvFlushConsoleInputBuffer)
-{
-    NTSTATUS Status;
-    PCONSOLE_FLUSHINPUTBUFFER FlushInputBufferRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.FlushInputBufferRequest;
+NTSTATUS NTAPI
+ConDrvFlushConsoleInputBuffer(IN PCONSOLE Console,
+                              IN PCONSOLE_INPUT_BUFFER InputBuffer)
+{
     PLIST_ENTRY CurrentEntry;
-    PCONSOLE_INPUT_BUFFER InputBuffer;
     ConsoleInput* Event;
 
-    DPRINT("SrvFlushConsoleInputBuffer\n");
-
-    Status = 
ConSrvGetInputBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
-                                 FlushInputBufferRequest->InputHandle,
-                                 &InputBuffer,
-                                 GENERIC_WRITE,
-                                 TRUE);
-    if (!NT_SUCCESS(Status)) return Status;
+    if (Console == NULL || InputBuffer == NULL)
+        return STATUS_INVALID_PARAMETER;
+
+    /* Validity check */
+    ASSERT(Console == InputBuffer->Header.Console);
 
     /* Discard all entries in the input event queue */
     while (!IsListEmpty(&InputBuffer->InputEvents))
@@ -758,36 +272,31 @@
     }
     ResetEvent(InputBuffer->ActiveEvent);
 
-    ConSrvReleaseInputBuffer(InputBuffer, TRUE);
     return STATUS_SUCCESS;
 }
 
-CSR_API(SrvGetConsoleNumberOfInputEvents)
-{
-    NTSTATUS Status;
-    PCONSOLE_GETNUMINPUTEVENTS GetNumInputEventsRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetNumInputEventsRequest;
-    PCONSOLE_INPUT_BUFFER InputBuffer;
+NTSTATUS NTAPI
+ConDrvGetConsoleNumberOfInputEvents(IN PCONSOLE Console,
+                                    IN PCONSOLE_INPUT_BUFFER InputBuffer,
+                                    OUT PULONG NumEvents)
+{
     PLIST_ENTRY CurrentInput;
-    DWORD NumEvents;
-
-    DPRINT("SrvGetConsoleNumberOfInputEvents\n");
-
-    Status = 
ConSrvGetInputBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process), 
GetNumInputEventsRequest->InputHandle, &InputBuffer, GENERIC_READ, TRUE);
-    if (!NT_SUCCESS(Status)) return Status;
-
+
+    if (Console == NULL || InputBuffer == NULL || NumEvents == NULL)
+        return STATUS_INVALID_PARAMETER;
+
+    /* Validity check */
+    ASSERT(Console == InputBuffer->Header.Console);
+
+    *NumEvents = 0;
+
+    /* If there are any events ... */
     CurrentInput = InputBuffer->InputEvents.Flink;
-    /* GetNumInputEventsRequest->NumInputEvents = */ NumEvents = 0;
-
-    /* If there are any events ... */
     while (CurrentInput != &InputBuffer->InputEvents)
     {
         CurrentInput = CurrentInput->Flink;
-        NumEvents++;
-    }
-
-    ConSrvReleaseInputBuffer(InputBuffer, TRUE);
-
-    GetNumInputEventsRequest->NumInputEvents = NumEvents;
+        (*NumEvents)++;
+    }
 
     return STATUS_SUCCESS;
 }

Modified: trunk/reactos/win32ss/user/consrv/condrv/conoutput.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/condrv/conoutput.c?rev=59326&r1=59325&r2=59326&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/consrv/condrv/conoutput.c        [iso-8859-1] 
(original)
+++ trunk/reactos/win32ss/user/consrv/condrv/conoutput.c        [iso-8859-1] 
Sun Jun 23 23:19:42 2013
@@ -227,7 +227,7 @@
                            IN PCONSOLE_CURSOR_INFO CursorInfo)
 {
     ULONG Size;
-    BOOL Visible, Success = TRUE;
+    BOOLEAN Visible, Success = TRUE;
 
     if (Console == NULL || Buffer == NULL || CursorInfo == NULL)
         return STATUS_INVALID_PARAMETER;

Modified: trunk/reactos/win32ss/user/consrv/condrv/console.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/condrv/console.c?rev=59326&r1=59325&r2=59326&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/consrv/condrv/console.c  [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/condrv/console.c  [iso-8859-1] Sun Jun 23 
23:19:42 2013
@@ -549,7 +549,7 @@
     Console->TermIFace.Console = Console;
 
     /* Initialize the frontend AFTER having attached it to the console */
-    DPRINT("Finish initialization of frontend\n");
+    DPRINT1("Finish initialization of frontend\n");
     Status = Console->TermIFace.Vtbl->InitFrontEnd(&Console->TermIFace, 
Console);
     if (!NT_SUCCESS(Status))
     {
@@ -565,9 +565,9 @@
     /* Copy buffer contents to screen */
     // FrontEnd.Draw();
     // ConioDrawConsole(Console);
-    DPRINT("Console drawn\n");
-
-    DPRINT("Terminal FrontEnd initialization done\n");
+    DPRINT1("Console drawn\n");
+
+    DPRINT1("Terminal FrontEnd initialization done\n");
     return STATUS_SUCCESS;
 }
 
@@ -584,7 +584,7 @@
     /* Detach the frontend from the console */
     RtlZeroMemory(&Console->TermIFace, sizeof(Console->TermIFace));
 
-    DPRINT("Terminal FrontEnd unregistered\n");
+    DPRINT1("Terminal FrontEnd unregistered\n");
     return STATUS_SUCCESS;
 }
 
@@ -597,26 +597,28 @@
      * Forbid validation of any console by other threads
      * during the deletion of this console.
      */
-    ConDrvLockConsoleListExclusive();
-
-    /* Check the existence of the console, and if it's ok, continue */
-    if (!ConDrvValidateConsolePointer(Console))
-    {
-        /* Unlock the console list and return */
-        ConDrvUnlockConsoleList();
-        return;
-    }
-
-    /*
-     * If the console is already being destroyed
-     * (thus not running), just return.
-     */
-    if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_RUNNING, TRUE))
-    {
-        /* Unlock the console list and return */
-        ConDrvUnlockConsoleList();
-        return;
-    }
+    // ConDrvLockConsoleListExclusive();
+
+    // /* Check the existence of the console, and if it's ok, continue */
+    // if (!ConDrvValidateConsolePointer(Console))
+    // {
+        // /* Unlock the console list and return */
+        // ConDrvUnlockConsoleList();
+        // return;
+    // }
+
+    // /*
+     // * If the console is already being destroyed
+     // * (thus not running), just return.
+     // */
+    // if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_RUNNING, TRUE))
+    // {
+        // /* Unlock the console list and return */
+        // ConDrvUnlockConsoleList();
+        // return;
+    // }
+
+    if (!ConDrvValidateConsole(Console, CONSOLE_RUNNING, TRUE)) return;
 
     /*
      * We are about to be destroyed. Signal it to other people
@@ -624,6 +626,9 @@
      * they cannot longer validate the console.
      */
     Console->State = CONSOLE_TERMINATING;
+
+    /* We really delete the console. Reset the count to be sure. */
+    Console->ReferenceCount = 0;
 
     /*
      * Allow other threads to finish their job: basically, unlock
@@ -634,14 +639,25 @@
      * can see that we are in fact already deleting the console.
      */
     LeaveCriticalSection(&Console->Lock);
-    ConDrvUnlockConsoleList();
+    // ConDrvUnlockConsoleList();
 
     /* FIXME: Send a terminate message to all the processes owning this 
console */
 
+    /* Close all the applications which are linked to this console */
+    /*
+     * FIXME: Windows will wait up to 5 seconds for the thread to exit.
+     * We shouldn't wait here, though, since the console lock is entered.
+     * A copy of the thread list probably needs to be made.
+     */
+    // ConDrvConsoleProcessCtrlEvent(Console, 0, CTRL_CLOSE_EVENT);
+    // DPRINT1("Apps closed\n");
+    // FIXME: Be sure that, starting from here, there is NO app running
+    //  on this console anymore !!!!!
+
     /* Cleanup the UI-oriented part */
-    DPRINT("Deregister console\n");
+    DPRINT1("Deregister console\n");
     ConDrvDeregisterFrontEnd(Console);
-    DPRINT("Console deregistered\n");
+    DPRINT1("Console deregistered\n");
 
     /***
      * Check that the console is in terminating state before continuing
@@ -649,30 +665,36 @@
      * ...unless to cancel console deletion ?).
      ***/
 
-    ConDrvLockConsoleListExclusive();
-
-    /* Re-check the existence of the console, and if it's ok, continue */
-    if (!ConDrvValidateConsolePointer(Console))
-    {
-        /* Unlock the console list and return */
-        ConDrvUnlockConsoleList();
-        return;
-    }
-
-    if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_TERMINATING, TRUE))
-    {
-        ConDrvUnlockConsoleList();
-        return;
-    }
+    // ConDrvLockConsoleListExclusive();
+
+    // /* Re-check the existence of the console, and if it's ok, continue */
+    // if (!ConDrvValidateConsolePointer(Console))
+    // {
+        // /* Unlock the console list and return */
+        // ConDrvUnlockConsoleList();
+        // return;
+    // }
+
+    // if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_TERMINATING, TRUE))
+    // {
+        // ConDrvUnlockConsoleList();
+        // return;
+    // }
+
+    if (!ConDrvValidateConsole(Console, CONSOLE_TERMINATING, TRUE)) return;
 
     /* We are now in destruction */
     Console->State = CONSOLE_IN_DESTRUCTION;
 
+    /////////////////////
+    ConDrvLockConsoleListExclusive();
+    /////////////////////
+
     /* Remove the console from the list */
     RemoveEntryList(&Console->Entry);
 
-    /* We really delete the console. Reset the count to be sure. */
-    Console->ReferenceCount = 0;
+    /* Unlock the console list */
+    ConDrvUnlockConsoleList();
 
     /* Discard all entries in the input event queue */
     PurgeInputBuffer(Console);
@@ -704,8 +726,8 @@
     ConsoleFreeHeap(Console);
     DPRINT("ConDrvDeleteConsole - Console destroyed\n");
 
-    /* Unlock the console list and return */
-    ConDrvUnlockConsoleList();
+    // /* Unlock the console list and return */
+    // ConDrvUnlockConsoleList();
 }
 
 

Modified: trunk/reactos/win32ss/user/consrv/condrv/text.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/condrv/text.c?rev=59326&r1=59325&r2=59326&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/consrv/condrv/text.c     [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/condrv/text.c     [iso-8859-1] Sun Jun 23 
23:19:42 2013
@@ -606,7 +606,7 @@
 NTSTATUS NTAPI
 ConDrvReadConsoleOutput(IN PCONSOLE Console,
                         IN PTEXTMODE_SCREEN_BUFFER Buffer,
-                        IN BOOL Unicode,
+                        IN BOOLEAN Unicode,
                         OUT PCHAR_INFO CharInfo/*Buffer*/,
                         IN PCOORD BufferSize,
                         IN PCOORD BufferCoord,
@@ -680,7 +680,7 @@
 NTSTATUS NTAPI
 ConDrvWriteConsoleOutput(IN PCONSOLE Console,
                          IN PTEXTMODE_SCREEN_BUFFER Buffer,
-                         IN BOOL Unicode,
+                         IN BOOLEAN Unicode,
                          IN PCHAR_INFO CharInfo/*Buffer*/,
                          IN PCOORD BufferSize,
                          IN PCOORD BufferCoord,
@@ -1161,9 +1161,9 @@
 NTSTATUS NTAPI
 ConDrvScrollConsoleScreenBuffer(IN PCONSOLE Console,
                                 IN PTEXTMODE_SCREEN_BUFFER Buffer,
-                                IN BOOL Unicode,
+                                IN BOOLEAN Unicode,
                                 IN PSMALL_RECT ScrollRectangle,
-                                IN BOOL UseClipRectangle,
+                                IN BOOLEAN UseClipRectangle,
                                 IN PSMALL_RECT ClipRectangle OPTIONAL,
                                 IN PCOORD DestinationOrigin,
                                 IN CHAR_INFO FillChar)

Modified: trunk/reactos/win32ss/user/consrv/coninput.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/coninput.c?rev=59326&r1=59325&r2=59326&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/consrv/coninput.c        [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/coninput.c        [iso-8859-1] Sun Jun 23 
23:19:42 2013
@@ -34,9 +34,6 @@
 #define ConsoleInputUnicodeCharToAnsiChar(Console, dChar, sWChar) \
     WideCharToMultiByte((Console)->CodePage, 0, (sWChar), 1, (dChar), 1, NULL, 
NULL)
 
-#define ConsoleInputAnsiCharToUnicodeChar(Console, dWChar, sChar) \
-    MultiByteToWideChar((Console)->CodePage, 0, (sChar), 1, (dWChar), 1)
-
 typedef struct ConsoleInput_t
 {
     LIST_ENTRY ListEntry;
@@ -64,146 +61,6 @@
                                           
&InputEvent->Event.KeyEvent.uChar.AsciiChar,
                                           &UnicodeChar);
     }
-}
-
-NTSTATUS FASTCALL
-ConioProcessInputEvent(PCONSOLE Console,
-                       PINPUT_RECORD InputEvent)
-{
-    ConsoleInput *ConInRec;
-
-    /* Check for pause or unpause */
-    if (InputEvent->EventType == KEY_EVENT && 
InputEvent->Event.KeyEvent.bKeyDown)
-    {
-        WORD vk = InputEvent->Event.KeyEvent.wVirtualKeyCode;
-        if (!(Console->PauseFlags & PAUSED_FROM_KEYBOARD))
-        {
-            DWORD cks = InputEvent->Event.KeyEvent.dwControlKeyState;
-            if (Console->InputBuffer.Mode & ENABLE_LINE_INPUT &&
-                (vk == VK_PAUSE || (vk == 'S' &&
-                                    (cks & (LEFT_CTRL_PRESSED | 
RIGHT_CTRL_PRESSED)) &&
-                                   !(cks & (LEFT_ALT_PRESSED  | 
RIGHT_ALT_PRESSED)))))
-            {
-                ConioPause(Console, PAUSED_FROM_KEYBOARD);
-                return STATUS_SUCCESS;
-            }
-        }
-        else
-        {
-            if ((vk < VK_SHIFT || vk > VK_CAPITAL) && vk != VK_LWIN &&
-                vk != VK_RWIN && vk != VK_NUMLOCK && vk != VK_SCROLL)
-            {
-                ConioUnpause(Console, PAUSED_FROM_KEYBOARD);
-                return STATUS_SUCCESS;
-            }
-        }
-    }
-
-    /* Add event to the queue */
-    ConInRec = ConsoleAllocHeap(0, sizeof(ConsoleInput));
-    if (ConInRec == NULL) return STATUS_INSUFFICIENT_RESOURCES;
-
-    ConInRec->InputEvent = *InputEvent;
-    InsertTailList(&Console->InputBuffer.InputEvents, &ConInRec->ListEntry);
-
-    SetEvent(Console->InputBuffer.ActiveEvent);
-    CsrNotifyWait(&Console->InputBuffer.ReadWaitQueue,
-                  WaitAny,
-                  NULL,
-                  NULL);
-    if (!IsListEmpty(&Console->InputBuffer.ReadWaitQueue))
-    {
-        CsrDereferenceWait(&Console->InputBuffer.ReadWaitQueue);
-    }
-
-    return STATUS_SUCCESS;
-}
-
-VOID FASTCALL
-PurgeInputBuffer(PCONSOLE Console)
-{
-    PLIST_ENTRY CurrentEntry;
-    ConsoleInput* Event;
-
-    while (!IsListEmpty(&Console->InputBuffer.InputEvents))
-    {
-        CurrentEntry = RemoveHeadList(&Console->InputBuffer.InputEvents);
-        Event = CONTAINING_RECORD(CurrentEntry, ConsoleInput, ListEntry);
-        ConsoleFreeHeap(Event);
-    }
-
-    CloseHandle(Console->InputBuffer.ActiveEvent);
-}
-
-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");
-        ConDrvConsoleProcessCtrlEvent(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 NTSTATUS
@@ -683,16 +540,19 @@
     return Status;
 }
 
+NTSTATUS NTAPI
+ConDrvWriteConsoleInput(IN PCONSOLE Console,
+                        IN PCONSOLE_INPUT_BUFFER InputBuffer,
+                        IN BOOLEAN Unicode,
+                        IN PINPUT_RECORD InputRecord,
+                        IN ULONG NumEventsToWrite,
+                        OUT PULONG NumEventsWritten);
 CSR_API(SrvWriteConsoleInput)
 {
     NTSTATUS Status;
     PCONSOLE_WRITEINPUT WriteInputRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.WriteInputRequest;
-    PINPUT_RECORD InputRecord;
-    PCONSOLE_PROCESS_DATA ProcessData = 
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
     PCONSOLE_INPUT_BUFFER InputBuffer;
-    PCONSOLE Console;
-    DWORD Length;
-    DWORD i;
+    ULONG NumEventsWritten = 0;
 
     DPRINT("SrvWriteConsoleInput\n");
 
@@ -704,92 +564,69 @@
         return STATUS_INVALID_PARAMETER;
     }
 
-    Status = ConSrvGetInputBuffer(ProcessData, WriteInputRequest->InputHandle, 
&InputBuffer, GENERIC_WRITE, TRUE);
+    Status = 
ConSrvGetInputBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
+                                  WriteInputRequest->InputHandle,
+                                  &InputBuffer, GENERIC_WRITE, TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-    Console = InputBuffer->Header.Console;
-    InputRecord = WriteInputRequest->InputRecord;
-    Length = WriteInputRequest->Length;
-
-    for (i = 0; i < Length && NT_SUCCESS(Status); i++)
-    {
-        if (!WriteInputRequest->Unicode &&
-            InputRecord->EventType == KEY_EVENT)
-        {
-            CHAR AsciiChar = InputRecord->Event.KeyEvent.uChar.AsciiChar;
-            ConsoleInputAnsiCharToUnicodeChar(Console,
-                                              
&InputRecord->Event.KeyEvent.uChar.UnicodeChar,
-                                              &AsciiChar);
-        }
-
-        Status = ConioProcessInputEvent(Console, InputRecord++);
-    }
+    Status = ConDrvWriteConsoleInput(InputBuffer->Header.Console,
+                                     InputBuffer,
+                                     WriteInputRequest->Unicode,
+                                     WriteInputRequest->InputRecord,
+                                     WriteInputRequest->Length,
+                                     &NumEventsWritten);
+    WriteInputRequest->Length = NumEventsWritten;
 
     ConSrvReleaseInputBuffer(InputBuffer, TRUE);
-
-    WriteInputRequest->Length = i;
-
     return Status;
 }
 
+NTSTATUS NTAPI
+ConDrvFlushConsoleInputBuffer(IN PCONSOLE Console,
+                              IN PCONSOLE_INPUT_BUFFER InputBuffer);
 CSR_API(SrvFlushConsoleInputBuffer)
 {
     NTSTATUS Status;
     PCONSOLE_FLUSHINPUTBUFFER FlushInputBufferRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.FlushInputBufferRequest;
-    PLIST_ENTRY CurrentEntry;
     PCONSOLE_INPUT_BUFFER InputBuffer;
-    ConsoleInput* Event;
 
     DPRINT("SrvFlushConsoleInputBuffer\n");
 
     Status = 
ConSrvGetInputBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
-                                 FlushInputBufferRequest->InputHandle,
-                                 &InputBuffer,
-                                 GENERIC_WRITE,
-                                 TRUE);
+                                  FlushInputBufferRequest->InputHandle,
+                                  &InputBuffer, GENERIC_WRITE, TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-    /* Discard all entries in the input event queue */
-    while (!IsListEmpty(&InputBuffer->InputEvents))
-    {
-        CurrentEntry = RemoveHeadList(&InputBuffer->InputEvents);
-        Event = CONTAINING_RECORD(CurrentEntry, ConsoleInput, ListEntry);
-        ConsoleFreeHeap(Event);
-    }
-    ResetEvent(InputBuffer->ActiveEvent);
+    Status = ConDrvFlushConsoleInputBuffer(InputBuffer->Header.Console,
+                                           InputBuffer);
 
     ConSrvReleaseInputBuffer(InputBuffer, TRUE);
-    return STATUS_SUCCESS;
-}
-
+    return Status;
+}
+
+NTSTATUS NTAPI
+ConDrvGetConsoleNumberOfInputEvents(IN PCONSOLE Console,
+                                    IN PCONSOLE_INPUT_BUFFER InputBuffer,
+                                    OUT PULONG NumEvents);
 CSR_API(SrvGetConsoleNumberOfInputEvents)
 {
     NTSTATUS Status;
     PCONSOLE_GETNUMINPUTEVENTS GetNumInputEventsRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetNumInputEventsRequest;
     PCONSOLE_INPUT_BUFFER InputBuffer;
-    PLIST_ENTRY CurrentInput;
-    DWORD NumEvents;
 
     DPRINT("SrvGetConsoleNumberOfInputEvents\n");
 
-    Status = 
ConSrvGetInputBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process), 
GetNumInputEventsRequest->InputHandle, &InputBuffer, GENERIC_READ, TRUE);
+    Status = 
ConSrvGetInputBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
+                                  GetNumInputEventsRequest->InputHandle,
+                                  &InputBuffer, GENERIC_READ, TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-    CurrentInput = InputBuffer->InputEvents.Flink;
-    /* GetNumInputEventsRequest->NumInputEvents = */ NumEvents = 0;
-
-    /* If there are any events ... */
-    while (CurrentInput != &InputBuffer->InputEvents)
-    {
-        CurrentInput = CurrentInput->Flink;
-        NumEvents++;
-    }
+    Status = ConDrvGetConsoleNumberOfInputEvents(InputBuffer->Header.Console,
+                                                 InputBuffer,
+                                                 
&GetNumInputEventsRequest->NumInputEvents);
 
     ConSrvReleaseInputBuffer(InputBuffer, TRUE);
-
-    GetNumInputEventsRequest->NumInputEvents = NumEvents;
-
-    return STATUS_SUCCESS;
+    return Status;
 }
 
 /* EOF */

Modified: trunk/reactos/win32ss/user/consrv/conoutput.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/conoutput.c?rev=59326&r1=59325&r2=59326&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/consrv/conoutput.c       [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/conoutput.c       [iso-8859-1] Sun Jun 23 
23:19:42 2013
@@ -411,7 +411,7 @@
 NTSTATUS NTAPI
 ConDrvReadConsoleOutput(IN PCONSOLE Console,
                         IN PTEXTMODE_SCREEN_BUFFER Buffer,
-                        IN BOOL Unicode,
+                        IN BOOLEAN Unicode,
                         OUT PCHAR_INFO CharInfo/*Buffer*/,
                         IN PCOORD BufferSize,
                         IN PCOORD BufferCoord,
@@ -452,7 +452,7 @@
 NTSTATUS NTAPI
 ConDrvWriteConsoleOutput(IN PCONSOLE Console,
                          IN PTEXTMODE_SCREEN_BUFFER Buffer,
-                         IN BOOL Unicode,
+                         IN BOOLEAN Unicode,
                          IN PCHAR_INFO CharInfo/*Buffer*/,
                          IN PCOORD BufferSize,
                          IN PCOORD BufferCoord,
@@ -762,9 +762,9 @@
 NTSTATUS NTAPI
 ConDrvScrollConsoleScreenBuffer(IN PCONSOLE Console,
                                 IN PTEXTMODE_SCREEN_BUFFER Buffer,
-                                IN BOOL Unicode,
+                                IN BOOLEAN Unicode,
                                 IN PSMALL_RECT ScrollRectangle,
-                                IN BOOL UseClipRectangle,
+                                IN BOOLEAN UseClipRectangle,
                                 IN PSMALL_RECT ClipRectangle OPTIONAL,
                                 IN PCOORD DestinationOrigin,
                                 IN CHAR_INFO FillChar);


Reply via email to