mirror of
https://github.com/reactos/reactos.git
synced 2024-07-08 13:45:06 +00:00
[CONSRV][CONDRV]
- Move CSR details (pre/post-processing, unicode translation) of reading/writing console inputs to consrv, where they belong. - Add a temporary solution to screenbuffer resizing notifications, to be properly fixed later on. svn path=/branches/condrv_restructure/; revision=64004
This commit is contained in:
parent
0482248489
commit
b47d51c6a3
|
@ -16,20 +16,6 @@
|
||||||
|
|
||||||
/* GLOBALS ********************************************************************/
|
/* GLOBALS ********************************************************************/
|
||||||
|
|
||||||
/*
|
|
||||||
* From MSDN:
|
|
||||||
* "The lpMultiByteStr and lpWideCharStr pointers must not be the same.
|
|
||||||
* If they are the same, the function fails, and GetLastError returns
|
|
||||||
* ERROR_INVALID_PARAMETER."
|
|
||||||
*/
|
|
||||||
#define ConsoleInputUnicodeCharToAnsiChar(Console, dChar, sWChar) \
|
|
||||||
ASSERT((ULONG_PTR)dChar != (ULONG_PTR)sWChar); \
|
|
||||||
WideCharToMultiByte((Console)->InputCodePage, 0, (sWChar), 1, (dChar), 1, NULL, NULL)
|
|
||||||
|
|
||||||
#define ConsoleInputAnsiCharToUnicodeChar(Console, dWChar, sChar) \
|
|
||||||
ASSERT((ULONG_PTR)dWChar != (ULONG_PTR)sChar); \
|
|
||||||
MultiByteToWideChar((Console)->InputCodePage, 0, (sChar), 1, (dWChar), 1)
|
|
||||||
|
|
||||||
typedef struct ConsoleInput_t
|
typedef struct ConsoleInput_t
|
||||||
{
|
{
|
||||||
LIST_ENTRY ListEntry;
|
LIST_ENTRY ListEntry;
|
||||||
|
@ -39,34 +25,7 @@ typedef struct ConsoleInput_t
|
||||||
|
|
||||||
/* PRIVATE FUNCTIONS **********************************************************/
|
/* PRIVATE FUNCTIONS **********************************************************/
|
||||||
|
|
||||||
static VOID
|
static NTSTATUS
|
||||||
ConioInputEventToAnsi(PCONSOLE Console, PINPUT_RECORD InputEvent)
|
|
||||||
{
|
|
||||||
if (InputEvent->EventType == KEY_EVENT)
|
|
||||||
{
|
|
||||||
WCHAR UnicodeChar = InputEvent->Event.KeyEvent.uChar.UnicodeChar;
|
|
||||||
InputEvent->Event.KeyEvent.uChar.UnicodeChar = 0;
|
|
||||||
ConsoleInputUnicodeCharToAnsiChar(Console,
|
|
||||||
&InputEvent->Event.KeyEvent.uChar.AsciiChar,
|
|
||||||
&UnicodeChar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static VOID
|
|
||||||
ConioInputEventToUnicode(PCONSOLE Console, PINPUT_RECORD InputEvent)
|
|
||||||
{
|
|
||||||
if (InputEvent->EventType == KEY_EVENT)
|
|
||||||
{
|
|
||||||
CHAR AsciiChar = InputEvent->Event.KeyEvent.uChar.AsciiChar;
|
|
||||||
InputEvent->Event.KeyEvent.uChar.AsciiChar = 0;
|
|
||||||
ConsoleInputAnsiCharToUnicodeChar(Console,
|
|
||||||
&InputEvent->Event.KeyEvent.uChar.UnicodeChar,
|
|
||||||
&AsciiChar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ConDrvAddInputEvents(PCONSOLE Console,
|
ConDrvAddInputEvents(PCONSOLE Console,
|
||||||
PINPUT_RECORD InputRecords, // InputEvent
|
PINPUT_RECORD InputRecords, // InputEvent
|
||||||
ULONG NumEventsToWrite,
|
ULONG NumEventsToWrite,
|
||||||
|
@ -218,60 +177,6 @@ Done:
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ULONG
|
|
||||||
PreprocessInput(PCONSOLE Console,
|
|
||||||
PINPUT_RECORD InputEvent,
|
|
||||||
ULONG NumEventsToWrite);
|
|
||||||
VOID
|
|
||||||
PostprocessInput(PCONSOLE Console);
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ConioAddInputEvents(PCONSOLE Console,
|
|
||||||
PINPUT_RECORD InputRecords, // InputEvent
|
|
||||||
ULONG NumEventsToWrite,
|
|
||||||
PULONG NumEventsWritten,
|
|
||||||
BOOLEAN AppendToEnd)
|
|
||||||
{
|
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
|
||||||
|
|
||||||
if (NumEventsWritten) *NumEventsWritten = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This pre-processing code MUST be IN consrv ONLY!!
|
|
||||||
*/
|
|
||||||
NumEventsToWrite = PreprocessInput(Console, InputRecords, NumEventsToWrite);
|
|
||||||
if (NumEventsToWrite == 0) return STATUS_SUCCESS;
|
|
||||||
|
|
||||||
Status = ConDrvAddInputEvents(Console,
|
|
||||||
InputRecords,
|
|
||||||
NumEventsToWrite,
|
|
||||||
NumEventsWritten,
|
|
||||||
AppendToEnd);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This post-processing code MUST be IN consrv ONLY!!
|
|
||||||
*/
|
|
||||||
// if (NT_SUCCESS(Status))
|
|
||||||
if (Status == STATUS_SUCCESS) PostprocessInput(Console);
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Move elsewhere...*/
|
|
||||||
NTSTATUS
|
|
||||||
ConioProcessInputEvent(PCONSOLE Console,
|
|
||||||
PINPUT_RECORD InputEvent)
|
|
||||||
{
|
|
||||||
ULONG NumEventsWritten;
|
|
||||||
return ConioAddInputEvents(Console,
|
|
||||||
InputEvent,
|
|
||||||
1,
|
|
||||||
&NumEventsWritten,
|
|
||||||
TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
PurgeInputBuffer(PCONSOLE Console)
|
PurgeInputBuffer(PCONSOLE Console)
|
||||||
{
|
{
|
||||||
|
@ -329,7 +234,6 @@ ConDrvGetConsoleInput(IN PCONSOLE Console,
|
||||||
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
||||||
IN BOOLEAN KeepEvents,
|
IN BOOLEAN KeepEvents,
|
||||||
IN BOOLEAN WaitForMoreEvents,
|
IN BOOLEAN WaitForMoreEvents,
|
||||||
IN BOOLEAN Unicode,
|
|
||||||
OUT PINPUT_RECORD InputRecord,
|
OUT PINPUT_RECORD InputRecord,
|
||||||
IN ULONG NumEventsToRead,
|
IN ULONG NumEventsToRead,
|
||||||
OUT PULONG NumEventsRead OPTIONAL)
|
OUT PULONG NumEventsRead OPTIONAL)
|
||||||
|
@ -379,15 +283,6 @@ ConDrvGetConsoleInput(IN PCONSOLE Console,
|
||||||
|
|
||||||
if (NumEventsRead) *NumEventsRead = i;
|
if (NumEventsRead) *NumEventsRead = i;
|
||||||
|
|
||||||
/* Now translate everything to ANSI */
|
|
||||||
if (!Unicode)
|
|
||||||
{
|
|
||||||
for (; i > 0; --i)
|
|
||||||
{
|
|
||||||
ConioInputEventToAnsi(InputBuffer->Header.Console, --InputRecord);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsListEmpty(&InputBuffer->InputEvents))
|
if (IsListEmpty(&InputBuffer->InputEvents))
|
||||||
{
|
{
|
||||||
ResetEvent(InputBuffer->ActiveEvent);
|
ResetEvent(InputBuffer->ActiveEvent);
|
||||||
|
@ -400,15 +295,11 @@ ConDrvGetConsoleInput(IN PCONSOLE Console,
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvWriteConsoleInput(IN PCONSOLE Console,
|
ConDrvWriteConsoleInput(IN PCONSOLE Console,
|
||||||
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
||||||
IN BOOLEAN Unicode,
|
|
||||||
IN BOOLEAN AppendToEnd,
|
IN BOOLEAN AppendToEnd,
|
||||||
IN PINPUT_RECORD InputRecord,
|
IN PINPUT_RECORD InputRecord,
|
||||||
IN ULONG NumEventsToWrite,
|
IN ULONG NumEventsToWrite,
|
||||||
OUT PULONG NumEventsWritten OPTIONAL)
|
OUT PULONG NumEventsWritten OPTIONAL)
|
||||||
{
|
{
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
|
||||||
ULONG i;
|
|
||||||
|
|
||||||
if (Console == NULL || InputBuffer == NULL /* || InputRecord == NULL */)
|
if (Console == NULL || InputBuffer == NULL /* || InputRecord == NULL */)
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
@ -416,26 +307,14 @@ ConDrvWriteConsoleInput(IN PCONSOLE Console,
|
||||||
ASSERT(Console == InputBuffer->Header.Console);
|
ASSERT(Console == InputBuffer->Header.Console);
|
||||||
ASSERT((InputRecord != NULL) || (InputRecord == NULL && NumEventsToWrite == 0));
|
ASSERT((InputRecord != NULL) || (InputRecord == NULL && NumEventsToWrite == 0));
|
||||||
|
|
||||||
/* First translate everything to UNICODE */
|
|
||||||
if (!Unicode)
|
|
||||||
{
|
|
||||||
for (i = 0; i < NumEventsToWrite; ++i)
|
|
||||||
{
|
|
||||||
ConioInputEventToUnicode(Console, &InputRecord[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Now, add the events */
|
/* Now, add the events */
|
||||||
// if (NumEventsWritten) *NumEventsWritten = 0;
|
if (NumEventsWritten) *NumEventsWritten = 0;
|
||||||
// ConDrvAddInputEvents
|
|
||||||
Status = ConioAddInputEvents(Console,
|
|
||||||
InputRecord,
|
|
||||||
NumEventsToWrite,
|
|
||||||
NumEventsWritten,
|
|
||||||
AppendToEnd);
|
|
||||||
// if (NumEventsWritten) *NumEventsWritten = i;
|
|
||||||
|
|
||||||
return Status;
|
return ConDrvAddInputEvents(Console,
|
||||||
|
InputRecord,
|
||||||
|
NumEventsToWrite,
|
||||||
|
NumEventsWritten,
|
||||||
|
AppendToEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
|
|
|
@ -233,6 +233,15 @@ ConioMoveRegion(PTEXTMODE_SCREEN_BUFFER ScreenBuffer,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME!
|
||||||
|
NTSTATUS NTAPI
|
||||||
|
ConDrvWriteConsoleInput(IN PCONSOLE Console,
|
||||||
|
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
||||||
|
IN BOOLEAN AppendToEnd,
|
||||||
|
IN PINPUT_RECORD InputRecord,
|
||||||
|
IN ULONG NumEventsToWrite,
|
||||||
|
OUT PULONG NumEventsWritten OPTIONAL);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
ConioResizeBuffer(PCONSOLE Console,
|
ConioResizeBuffer(PCONSOLE Console,
|
||||||
PTEXTMODE_SCREEN_BUFFER ScreenBuffer,
|
PTEXTMODE_SCREEN_BUFFER ScreenBuffer,
|
||||||
|
@ -341,12 +350,19 @@ ConioResizeBuffer(PCONSOLE Console,
|
||||||
*/
|
*/
|
||||||
if (Console->InputBuffer.Mode & ENABLE_WINDOW_INPUT)
|
if (Console->InputBuffer.Mode & ENABLE_WINDOW_INPUT)
|
||||||
{
|
{
|
||||||
|
ULONG NumEventsWritten;
|
||||||
INPUT_RECORD er;
|
INPUT_RECORD er;
|
||||||
|
|
||||||
er.EventType = WINDOW_BUFFER_SIZE_EVENT;
|
er.EventType = WINDOW_BUFFER_SIZE_EVENT;
|
||||||
er.Event.WindowBufferSizeEvent.dwSize = ScreenBuffer->ScreenBufferSize;
|
er.Event.WindowBufferSizeEvent.dwSize = ScreenBuffer->ScreenBufferSize;
|
||||||
|
|
||||||
ConioProcessInputEvent(Console, &er);
|
// ConioProcessInputEvent(Console, &er);
|
||||||
|
ConDrvWriteConsoleInput(Console,
|
||||||
|
&Console->InputBuffer,
|
||||||
|
TRUE,
|
||||||
|
&er,
|
||||||
|
1,
|
||||||
|
&NumEventsWritten);
|
||||||
}
|
}
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
|
|
@ -26,6 +26,25 @@
|
||||||
ConSrvReleaseObject(&(Buff)->Header, (IsConsoleLocked))
|
ConSrvReleaseObject(&(Buff)->Header, (IsConsoleLocked))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* From MSDN:
|
||||||
|
* "The lpMultiByteStr and lpWideCharStr pointers must not be the same.
|
||||||
|
* If they are the same, the function fails, and GetLastError returns
|
||||||
|
* ERROR_INVALID_PARAMETER."
|
||||||
|
*/
|
||||||
|
#define ConsoleInputUnicodeCharToAnsiChar(Console, dChar, sWChar) \
|
||||||
|
ASSERT((ULONG_PTR)dChar != (ULONG_PTR)sWChar); \
|
||||||
|
WideCharToMultiByte((Console)->InputCodePage, 0, (sWChar), 1, (dChar), 1, NULL, NULL)
|
||||||
|
|
||||||
|
#define ConsoleInputAnsiCharToUnicodeChar(Console, dWChar, sChar) \
|
||||||
|
ASSERT((ULONG_PTR)dWChar != (ULONG_PTR)sChar); \
|
||||||
|
MultiByteToWideChar((Console)->InputCodePage, 0, (sChar), 1, (dWChar), 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _GET_INPUT_INFO
|
typedef struct _GET_INPUT_INFO
|
||||||
{
|
{
|
||||||
PCSR_THREAD CallingThread; // The thread which called the input API.
|
PCSR_THREAD CallingThread; // The thread which called the input API.
|
||||||
|
@ -36,10 +55,33 @@ typedef struct _GET_INPUT_INFO
|
||||||
|
|
||||||
/* PRIVATE FUNCTIONS **********************************************************/
|
/* PRIVATE FUNCTIONS **********************************************************/
|
||||||
|
|
||||||
/*
|
static VOID
|
||||||
* This pre-processing code MUST be IN consrv ONLY
|
ConioInputEventToAnsi(PCONSOLE Console, PINPUT_RECORD InputEvent)
|
||||||
*/
|
{
|
||||||
/* static */ ULONG
|
if (InputEvent->EventType == KEY_EVENT)
|
||||||
|
{
|
||||||
|
WCHAR UnicodeChar = InputEvent->Event.KeyEvent.uChar.UnicodeChar;
|
||||||
|
InputEvent->Event.KeyEvent.uChar.UnicodeChar = 0;
|
||||||
|
ConsoleInputUnicodeCharToAnsiChar(Console,
|
||||||
|
&InputEvent->Event.KeyEvent.uChar.AsciiChar,
|
||||||
|
&UnicodeChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
ConioInputEventToUnicode(PCONSOLE Console, PINPUT_RECORD InputEvent)
|
||||||
|
{
|
||||||
|
if (InputEvent->EventType == KEY_EVENT)
|
||||||
|
{
|
||||||
|
CHAR AsciiChar = InputEvent->Event.KeyEvent.uChar.AsciiChar;
|
||||||
|
InputEvent->Event.KeyEvent.uChar.AsciiChar = 0;
|
||||||
|
ConsoleInputAnsiCharToUnicodeChar(Console,
|
||||||
|
&InputEvent->Event.KeyEvent.uChar.UnicodeChar,
|
||||||
|
&AsciiChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG
|
||||||
PreprocessInput(PCONSRV_CONSOLE Console,
|
PreprocessInput(PCONSRV_CONSOLE Console,
|
||||||
PINPUT_RECORD InputEvent,
|
PINPUT_RECORD InputEvent,
|
||||||
ULONG NumEventsToWrite)
|
ULONG NumEventsToWrite)
|
||||||
|
@ -98,10 +140,7 @@ PreprocessInput(PCONSRV_CONSOLE Console,
|
||||||
return NumEventsToWrite;
|
return NumEventsToWrite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
static VOID
|
||||||
* This post-processing code MUST be IN consrv ONLY
|
|
||||||
*/
|
|
||||||
/* static */ VOID
|
|
||||||
PostprocessInput(PCONSRV_CONSOLE Console)
|
PostprocessInput(PCONSRV_CONSOLE Console)
|
||||||
{
|
{
|
||||||
CsrNotifyWait(&Console->ReadWaitQueue,
|
CsrNotifyWait(&Console->ReadWaitQueue,
|
||||||
|
@ -115,7 +154,58 @@ PostprocessInput(PCONSRV_CONSOLE Console)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS NTAPI
|
||||||
|
ConDrvWriteConsoleInput(IN PCONSOLE Console,
|
||||||
|
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
||||||
|
IN BOOLEAN AppendToEnd,
|
||||||
|
IN PINPUT_RECORD InputRecord,
|
||||||
|
IN ULONG NumEventsToWrite,
|
||||||
|
OUT PULONG NumEventsWritten OPTIONAL);
|
||||||
|
static NTSTATUS
|
||||||
|
ConioAddInputEvents(PCONSOLE Console,
|
||||||
|
PINPUT_RECORD InputRecords, // InputEvent
|
||||||
|
ULONG NumEventsToWrite,
|
||||||
|
PULONG NumEventsWritten,
|
||||||
|
BOOLEAN AppendToEnd)
|
||||||
|
{
|
||||||
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
|
||||||
|
if (NumEventsWritten) *NumEventsWritten = 0;
|
||||||
|
|
||||||
|
NumEventsToWrite = PreprocessInput(Console, InputRecords, NumEventsToWrite);
|
||||||
|
if (NumEventsToWrite == 0) return STATUS_SUCCESS;
|
||||||
|
|
||||||
|
// Status = ConDrvAddInputEvents(Console,
|
||||||
|
// InputRecords,
|
||||||
|
// NumEventsToWrite,
|
||||||
|
// NumEventsWritten,
|
||||||
|
// AppendToEnd);
|
||||||
|
|
||||||
|
Status = ConDrvWriteConsoleInput(Console,
|
||||||
|
&Console->InputBuffer,
|
||||||
|
AppendToEnd,
|
||||||
|
InputRecords,
|
||||||
|
NumEventsToWrite,
|
||||||
|
NumEventsWritten);
|
||||||
|
|
||||||
|
// if (NT_SUCCESS(Status))
|
||||||
|
if (Status == STATUS_SUCCESS) PostprocessInput(Console);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME: This function can be called by CONDRV, in ConioResizeBuffer() in text.c */
|
||||||
|
NTSTATUS
|
||||||
|
ConioProcessInputEvent(PCONSOLE Console,
|
||||||
|
PINPUT_RECORD InputEvent)
|
||||||
|
{
|
||||||
|
ULONG NumEventsWritten;
|
||||||
|
return ConioAddInputEvents(Console,
|
||||||
|
InputEvent,
|
||||||
|
1,
|
||||||
|
&NumEventsWritten,
|
||||||
|
TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static NTSTATUS
|
static NTSTATUS
|
||||||
|
@ -381,7 +471,6 @@ ConDrvGetConsoleInput(IN PCONSOLE Console,
|
||||||
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
||||||
IN BOOLEAN KeepEvents,
|
IN BOOLEAN KeepEvents,
|
||||||
IN BOOLEAN WaitForMoreEvents,
|
IN BOOLEAN WaitForMoreEvents,
|
||||||
IN BOOLEAN Unicode,
|
|
||||||
OUT PINPUT_RECORD InputRecord,
|
OUT PINPUT_RECORD InputRecord,
|
||||||
IN ULONG NumEventsToRead,
|
IN ULONG NumEventsToRead,
|
||||||
OUT PULONG NumEventsRead OPTIONAL);
|
OUT PULONG NumEventsRead OPTIONAL);
|
||||||
|
@ -422,7 +511,6 @@ ReadInputBuffer(IN PGET_INPUT_INFO InputInfo,
|
||||||
InputBuffer,
|
InputBuffer,
|
||||||
(GetInputRequest->Flags & CONSOLE_READ_KEEPEVENT) != 0,
|
(GetInputRequest->Flags & CONSOLE_READ_KEEPEVENT) != 0,
|
||||||
(GetInputRequest->Flags & CONSOLE_READ_CONTINUE ) == 0,
|
(GetInputRequest->Flags & CONSOLE_READ_CONTINUE ) == 0,
|
||||||
GetInputRequest->Unicode,
|
|
||||||
InputRecord,
|
InputRecord,
|
||||||
GetInputRequest->NumRecords,
|
GetInputRequest->NumRecords,
|
||||||
&NumEventsRead);
|
&NumEventsRead);
|
||||||
|
@ -443,6 +531,18 @@ ReadInputBuffer(IN PGET_INPUT_INFO InputInfo,
|
||||||
*/
|
*/
|
||||||
GetInputRequest->NumRecords = NumEventsRead;
|
GetInputRequest->NumRecords = NumEventsRead;
|
||||||
|
|
||||||
|
if (NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
/* Now translate everything to ANSI */
|
||||||
|
if (!GetInputRequest->Unicode)
|
||||||
|
{
|
||||||
|
for (; NumEventsRead > 0; --NumEventsRead)
|
||||||
|
{
|
||||||
|
ConioInputEventToAnsi(InputBuffer->Header.Console, --InputRecord);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
// return STATUS_SUCCESS;
|
// return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -563,14 +663,15 @@ CSR_API(SrvGetConsoleInput)
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvWriteConsoleInput(IN PCONSOLE Console,
|
ConDrvWriteConsoleInput(IN PCONSOLE Console,
|
||||||
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
||||||
IN BOOLEAN Unicode,
|
|
||||||
IN BOOLEAN AppendToEnd,
|
IN BOOLEAN AppendToEnd,
|
||||||
IN PINPUT_RECORD InputRecord,
|
IN PINPUT_RECORD InputRecord,
|
||||||
IN ULONG NumEventsToWrite,
|
IN ULONG NumEventsToWrite,
|
||||||
OUT PULONG NumEventsWritten OPTIONAL);
|
OUT PULONG NumEventsWritten OPTIONAL);
|
||||||
|
#endif
|
||||||
CSR_API(SrvWriteConsoleInput)
|
CSR_API(SrvWriteConsoleInput)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
@ -619,14 +720,32 @@ CSR_API(SrvWriteConsoleInput)
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* First translate everything to UNICODE */
|
||||||
|
if (!WriteInputRequest->Unicode)
|
||||||
|
{
|
||||||
|
ULONG i;
|
||||||
|
for (i = 0; i < WriteInputRequest->NumRecords; ++i)
|
||||||
|
{
|
||||||
|
ConioInputEventToUnicode(InputBuffer->Header.Console, &InputRecord[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now, add the events */
|
||||||
NumEventsWritten = 0;
|
NumEventsWritten = 0;
|
||||||
Status = ConDrvWriteConsoleInput(InputBuffer->Header.Console,
|
Status = ConioAddInputEvents(InputBuffer->Header.Console,
|
||||||
InputBuffer,
|
// InputBuffer,
|
||||||
WriteInputRequest->Unicode,
|
InputRecord,
|
||||||
WriteInputRequest->AppendToEnd,
|
WriteInputRequest->NumRecords,
|
||||||
InputRecord,
|
&NumEventsWritten,
|
||||||
WriteInputRequest->NumRecords,
|
WriteInputRequest->AppendToEnd);
|
||||||
&NumEventsWritten);
|
|
||||||
|
// Status = ConDrvWriteConsoleInput(InputBuffer->Header.Console,
|
||||||
|
// InputBuffer,
|
||||||
|
// WriteInputRequest->AppendToEnd,
|
||||||
|
// InputRecord,
|
||||||
|
// WriteInputRequest->NumRecords,
|
||||||
|
// &NumEventsWritten);
|
||||||
|
|
||||||
WriteInputRequest->NumRecords = NumEventsWritten;
|
WriteInputRequest->NumRecords = NumEventsWritten;
|
||||||
|
|
||||||
ConSrvReleaseInputBuffer(InputBuffer, TRUE);
|
ConSrvReleaseInputBuffer(InputBuffer, TRUE);
|
||||||
|
|
|
@ -326,17 +326,6 @@ NTSTATUS
|
||||||
ConSrvConsoleCtrlEvent(IN ULONG CtrlEvent,
|
ConSrvConsoleCtrlEvent(IN ULONG CtrlEvent,
|
||||||
IN PCONSOLE_PROCESS_DATA ProcessData);
|
IN PCONSOLE_PROCESS_DATA ProcessData);
|
||||||
|
|
||||||
/* coninput.c */
|
|
||||||
NTSTATUS
|
|
||||||
ConioAddInputEvents(PCONSOLE Console,
|
|
||||||
PINPUT_RECORD InputRecords,
|
|
||||||
ULONG NumEventsToWrite,
|
|
||||||
PULONG NumEventsWritten,
|
|
||||||
BOOLEAN AppendToEnd);
|
|
||||||
NTSTATUS
|
|
||||||
ConioProcessInputEvent(PCONSOLE Console,
|
|
||||||
PINPUT_RECORD InputEvent);
|
|
||||||
|
|
||||||
/* conoutput.c */
|
/* conoutput.c */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -193,12 +193,6 @@ DWORD ConioEffectiveCursorSize(PCONSRV_CONSOLE Console,
|
||||||
DWORD Scale);
|
DWORD Scale);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
ConioAddInputEvents(PCONSRV_CONSOLE Console,
|
|
||||||
PINPUT_RECORD InputRecords,
|
|
||||||
ULONG NumEventsToWrite,
|
|
||||||
PULONG NumEventsWritten,
|
|
||||||
BOOLEAN AppendToEnd);
|
|
||||||
NTSTATUS
|
|
||||||
ConioProcessInputEvent(PCONSRV_CONSOLE Console,
|
ConioProcessInputEvent(PCONSRV_CONSOLE Console,
|
||||||
PINPUT_RECORD InputEvent);
|
PINPUT_RECORD InputEvent);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue