Implement basic canonical mode for Windows

The `cat` command now works properly, when run by itself on the bash
command prompt. It's working beautifully so far, and is only missing
a few keystrokes for clearing words and lines. Definitely works more
well than the one that ships with WIN32 :-)
This commit is contained in:
Justine Tunney 2023-10-03 22:34:45 -07:00
parent 4825737509
commit f26a280cda
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
36 changed files with 320 additions and 231 deletions

View file

@ -20,6 +20,7 @@
#include "libc/calls/internal.h"
#include "libc/calls/syscall_support-nt.internal.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/nomultics.internal.h"
#include "libc/intrin/weaken.h"
#include "libc/limits.h"
#include "libc/log/libfatal.internal.h"
@ -136,13 +137,14 @@ static abi wontreturn void WinInit(const char16_t *cmdline) {
for (int i = 0; i <= 2; ++i) {
uint32_t m;
intptr_t h = __imp_GetStdHandle(kNtStdio[i]);
__imp_GetConsoleMode(h, &m);
if (!i) {
m |= kNtEnableMouseInput | kNtEnableWindowInput;
} else {
m |= kNtEnableVirtualTerminalProcessing;
if (__imp_GetConsoleMode(h, &m)) {
if (!i) {
m |= kNtEnableMouseInput | kNtEnableWindowInput;
} else {
m |= kNtEnableVirtualTerminalProcessing;
}
__imp_SetConsoleMode(h, m);
}
__imp_SetConsoleMode(h, m);
}
}