008
05.03.2003, 10:30 Uhr
~0xdeadbeef
Gast
|
Allerdings ist ncurses ein bisschen overkill. Wie wärs hiermit:
C++: |
#include <stdio.h> #include <termio.h>
void setTerminalBuffering(bool new_state) { static struct termios stored_settings; static bool old_state = true; if(old_state == new_state) return; //nix zu tun old_state = new_state; if(!new_state) { struct termios new_settings; tcgetattr(0,&stored_settings); new_settings = stored_settings; new_settings.c_lflag &= (~ICANON); new_settings.c_cc[VTIME] = 0; tcgetattr(0,&stored_settings); new_settings.c_cc[VMIN] = 1; tcsetattr(0,TCSANOW,&new_settings); } else { tcsetattr(0,TCSANOW,&stored_settings); } }
int main() { setTerminalBuffering(false); //ab jetzt geht getchar() wie getch(), nur ohne ncurses printf("\n%c\n", getchar()); setTerminalBuffering(true); //jetzt will getchar() wieder ein return haben return 0; }
|
Ich hab den Code hier: www.c-for-dummies.com/lessons/linux/04/ gesehen und ein bisschen abgewandelt, so dass er in eine Funktion passte. Die Funktion ist in der Form C++, weil bool in C nicht definiert ist. Für C müsste man vor der Funktion void setTerminalBuffering(bool) noch diese Zeile einfügen:
C++: |
typedef enum{false, true} bool;
|
|