#include "consrv.h"
#include "include/conio.h"
-#include "include/conio2.h"
+#include "include/term.h"
#include "handle.h"
#include "lineinput.h"
}
NTSTATUS FASTCALL
-ConioProcessInputEvent(PCONSOLE Console,
- PINPUT_RECORD InputEvent)
+ConioAddInputEvent(PCONSOLE Console,
+ PINPUT_RECORD InputEvent,
+ BOOLEAN AppendToEnd)
{
ConsoleInput *ConInRec;
if (ConInRec == NULL) return STATUS_INSUFFICIENT_RESOURCES;
ConInRec->InputEvent = *InputEvent;
- InsertTailList(&Console->InputBuffer.InputEvents, &ConInRec->ListEntry);
+
+ if (AppendToEnd)
+ {
+ /* Append the event to the end of the queue */
+ InsertTailList(&Console->InputBuffer.InputEvents, &ConInRec->ListEntry);
+ }
+ else
+ {
+ /* Append the event to the beginning of the queue */
+ InsertHeadList(&Console->InputBuffer.InputEvents, &ConInRec->ListEntry);
+ }
SetEvent(Console->InputBuffer.ActiveEvent);
CsrNotifyWait(&Console->InputBuffer.ReadWaitQueue,
- WaitAny,
+ FALSE,
NULL,
NULL);
if (!IsListEmpty(&Console->InputBuffer.ReadWaitQueue))
return STATUS_SUCCESS;
}
+NTSTATUS FASTCALL
+ConioProcessInputEvent(PCONSOLE Console,
+ PINPUT_RECORD InputEvent)
+{
+ return ConioAddInputEvent(Console, InputEvent, TRUE);
+}
+
VOID FASTCALL
PurgeInputBuffer(PCONSOLE Console)
{
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,
NTSTATUS NTAPI
ConDrvGetConsoleInput(IN PCONSOLE Console,
IN PCONSOLE_INPUT_BUFFER InputBuffer,
+ IN BOOLEAN KeepEvents,
IN BOOLEAN WaitForMoreEvents,
IN BOOLEAN Unicode,
OUT PINPUT_RECORD InputRecord,
++i;
CurrentInput = CurrentInput->Flink;
- if (WaitForMoreEvents) // TRUE --> Read, we remove inputs from the buffer ; FALSE --> Peek, we keep inputs.
+ /* Remove the events from the queue if needed */
+ if (!KeepEvents)
{
RemoveEntryList(&Input->ListEntry);
ConsoleFreeHeap(Input);
ConDrvWriteConsoleInput(IN PCONSOLE Console,
IN PCONSOLE_INPUT_BUFFER InputBuffer,
IN BOOLEAN Unicode,
+ IN BOOLEAN AppendToEnd,
IN PINPUT_RECORD InputRecord,
IN ULONG NumEventsToWrite,
OUT PULONG NumEventsWritten OPTIONAL)
&AsciiChar);
}
- Status = ConioProcessInputEvent(Console, InputRecord++);
+ Status = ConioAddInputEvent(Console, InputRecord++, AppendToEnd);
}
if (NumEventsWritten) *NumEventsWritten = i;