Я написал программу, которая ловит нажатые клавиши с помощью getchar()
и выводит символ и его код на экран. Я также очищаю экран и скрываю курсор во время работы программы, отключаю эхо при запуске и восстанавливаю настройки терминала при нажатии Ctrl + C.
В linux все работает хорошо, но я не могу понять, как можно Я заставляю эту программу работать в Windows. Во-первых, такие команды, как "\033[?2J"
, вообще не работают. Во-вторых, я не могу отключить буферизованный ввод.
Может быть, кто-то знает, как с этим справиться?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <termios.h>
#include <stdbool.h>
#include <signal.h>
void setBufferedInput(bool enable) {
static bool enabled = true;
static struct termios old;
struct termios new;
if (enable && !enabled) {
tcsetattr(STDIN_FILENO,TCSANOW,&old);
enabled = true;
} else if (!enable && enabled) {
tcgetattr(STDIN_FILENO,&new);
old = new;
new.c_lflag &=(~ICANON & ~ECHO);
tcsetattr(STDIN_FILENO,TCSANOW,&new);
enabled = false;
}
}
void signal_callback_handler(int signum) {
printf("TERMINATED \n");
setBufferedInput(true);
printf("\033[?25h\033[m");
exit(signum);
}
int main() {
char c;
printf("\033[?25l\033[2J"); // hide the cursor; clear the screen
// register signal handler for when ctrl-c is pressed
signal(SIGINT, signal_callback_handler);
setBufferedInput(false);
while (true) {
c=getchar();
printf("%c %d \n",c,c);
}
}