29 static bool initialized =
false;
30 static HANDLE hIn =
nullptr;
31 static bool isPipe =
false;
35 hIn = GetStdHandle(STD_INPUT_HANDLE);
38 isPipe = (hIn ==
nullptr) || !GetConsoleMode(hIn, &mode);
41 SetConsoleMode(hIn, mode & ~(ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT));
42 FlushConsoleInputBuffer(hIn);
47 DWORD bytesAvailable = 0;
48 if (!PeekNamedPipe(hIn,
nullptr, 0,
nullptr, &bytesAvailable,
nullptr)) {
52 return static_cast<int>(bytesAvailable);
56 if (!GetNumberOfConsoleInputEvents(hIn, &events))
return 0;
58 return (events <= 1) ? 0 :
static_cast<int>(events);
63 FD_SET(STDIN_FILENO, &readfds);
69 const int nfds = STDIN_FILENO + 1;
70 const int ret = select(nfds, &readfds,
nullptr,
nullptr, &tv);
71 if (ret <= 0)
return 0;
72 return FD_ISSET(STDIN_FILENO, &readfds) ? 1 : 0;
90 static HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
93 char buffer[256] = {0};
98 if (PeekNamedPipe(hIn,
nullptr, 0,
nullptr, &bytesAvail,
nullptr) && bytesAvail > 0) {
99 if (ReadFile(hIn, buffer,
sizeof(buffer) - 1, &readBytes,
nullptr)) {
101 if (
char* eol = std::strchr(buffer,
'\n')) *eol =
'\0';
105 if (std::fgets(buffer,
sizeof(buffer), stdin)) {
106 if (
char* eol = std::strchr(buffer,
'\n')) *eol =
'\0';
110 if (std::strlen(buffer) > 0) {
111 if (!std::strncmp(buffer,
"quit", 4)) {
121 char buffer[256] = {0};
122 ssize_t n = ::read(STDIN_FILENO, buffer,
sizeof(buffer) - 1);
125 if (
char* eol = std::strchr(buffer,
'\n')) *eol =
'\0';
127 if (std::strlen(buffer) > 0) {
128 if (!std::strncmp(buffer,
"quit", 4)) {