package term
import "core:sys/posix"
original_termios: posix.termios
enable_raw_mode :: proc() {
posix.tcgetattr(posix.STDIN_FILENO, &original_termios)
raw := original_termios
// Strip the flags that fight you
raw.c_lflag &~= {.ECHO, .ICANON, .ISIG, .IEXTEN}
raw.c_iflag &~= {.IXON, .ICRNL, .BRKINT, .INPCK, .ISTRIP}
raw.c_oflag &~= {.OPOST}
// VMIN=0, VTIME=1 -> read() returns after 100ms even with no input
// (good for a game loop: check input, redraw, repeat)
raw.c_cc[.VMIN] = 0
raw.c_cc[.VTIME] = 1
posix.tcsetattr(posix.STDIN_FILENO, .TCSAFLUSH, &raw)
}
disable_raw_mode :: proc() {
posix.tcsetattr(posix.STDIN_FILENO, .TCSAFLUSH, &original_termios)
}