+struct StdInThreadParams
+{
+ HANDLE hEvent;
+ HANDLE write_stdin;
+};
+
+DWORD WINAPI StdInThread(void *param)
+{
+ StdInThreadParams *threadParams = (StdInThreadParams *) param;
+ char buf[1];
+ memset(buf, 0, sizeof(buf));
+
+ HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
+ while(true)
+ {
+ DWORD cbRead = 0;
+ DWORD cbWrite = 0;
+
+ char c;
+ ReadFile(hStdin, &c, 1, &cbRead, NULL);
+ if (cbRead > 0)
+ {
+ buf[0] = c;
+ bool ctrlBroken = Scan(buf, 1);
+ WriteFile(threadParams->write_stdin, buf, 1, &cbWrite, NULL);
+ if (ctrlBroken)
+ {
+ SetEvent(threadParams->hEvent);
+ break;
+ }
+ }
+ }
+ return 0;
+}
+