![]() |
PC, Linux und HardwareProf. Jürgen Plate |
/* prakt.h * Headerdatei mit Spezialfunktionen fuer stdin */ #ifndef __PRAKT__ #define __PRAKT__ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <termios.h> #include <sys/types.h> int echo_on(void); /* Tastaturecho einschalten */ int echo_off(void); /* Tastaturecho ausschalten */ int getch(void); /* Taste einlesen (ohne anschl. Enter, ohne Echo) */ int getch_nw(void); /* Taste einlesen (ohne Warten, ohne Echo) */ int echo_on(void) /* Echo input on screen */ { struct termios attributes; if(tcgetattr(STDIN_FILENO,&attributes) != 0) return (-1); attributes.c_lflag |= ECHO; if(tcsetattr(STDIN_FILENO,TCSANOW,&attributes) != 0) return (-1); return(0); } int echo_off(void) /* Don't echo input on screen */ { struct termios attributes; if(tcgetattr(STDIN_FILENO,&attributes) != 0) return (-1); attributes.c_lflag &= ~(ECHO); if(tcsetattr(STDIN_FILENO,TCSAFLUSH,&attributes) != 0) return (-1); return(0); } int getch(void) { /* Einlesen von genau einem Zeichen (ohne anschl. Enter, ohne Echo) */ struct termios term, oterm; int ch; tcgetattr(STDIN_FILENO, &oterm); term = oterm; term.c_lflag &= ~( ICANON | ECHO ); tcsetattr( STDIN_FILENO, TCSANOW, &term ); ch = getchar(); tcsetattr( STDIN_FILENO, TCSANOW, &oterm ); return ch; } int getch_nw(void) { /* Einlesen von genau einem Zeichen (ohne Warten, ohne Echo) */ /* gibt -1 zurueck, wenn kein Zeichen gelesen wurde */ struct termios term, oterm; int fd = 0; /* STDIN */ int ch = 0; tcgetattr(fd, &oterm); term.c_lflag &= ~( ICANON | ECHO ); term.c_cc[VMIN] = 0; term.c_cc[VTIME] = 1; tcsetattr(fd, TCSANOW, &term); ch = getchar(); tcsetattr(fd, TCSANOW, &oterm); return ch; } #endif