diff --git a/src/builtins/sysfn.c b/src/builtins/sysfn.c index 46b98768..9b3ab7e9 100644 --- a/src/builtins/sysfn.c +++ b/src/builtins/sysfn.c @@ -9,6 +9,7 @@ #include #if defined(_WIN32) || defined(_WIN64) + #include #include "../windows/getline.c" #endif #include @@ -1151,6 +1152,26 @@ B tCharN_c1(B t, B x) { fcntl(0, F_SETFL, 0); return n>=0? m_c32(n) : m_f64(0); } +#elif defined(_WIN32) || defined(_WIN64) +#include +B tRawMode_c1(B t, B x) { + HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); + DWORD dwMode; + GetConsoleMode(hIn, &dwMode); + if (o2b(x)) dwMode&= ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT); + else dwMode|= ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT; + SetConsoleMode(hIn, dwMode); + return x; +} +B tCharN_c1(B t, B x) { + dec(x); + if (_kbhit()) { + int n = _getch(); + return n>=0? m_c32(n) : m_f64(0); + } else { + return m_f64(0); + } +} #else B tRawMode_c1(B t, B x) { thrM("•term.RawMode not available"); } B tCharN_c1(B t, B x) { thrM("•term.CharN not available"); }