Implement •term.CharN and •term.RawMode for Windows

This commit is contained in:
vylsaz 2023-07-11 03:15:48 +00:00
parent ce255c4a53
commit e4542f70a6

View File

@ -9,6 +9,7 @@
#include <unistd.h>
#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#include "../windows/getline.c"
#endif
#include <errno.h>
@ -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 <conio.h>
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"); }