keyboard.c
1 /* 2 * keyboard.c 3 * 4 * Copyright (C) 1999 Jonathan St-André 5 * Copyright (C) 1999 Hugo Villeneuve <hugo@hugovil.com> 6 * 7 * This file is released under the GPLv2 8 */ 9 10 #include <termios.h> 11 #include <unistd.h> 12 13 static struct termios orig, newtio; 14 static int peek = -1; 15 16 int 17 kbhit(void) 18 { 19 char ch; 20 int nread; 21 22 if (peek != -1) 23 return 1; 24 25 newtio.c_cc[VMIN] = 0; 26 tcsetattr(0, TCSANOW, &newtio); 27 nread = read(0, &ch, 1); 28 newtio.c_cc[VMIN] = 1; 29 tcsetattr(0, TCSANOW, &newtio); 30 31 if (nread == 1) { 32 peek = ch; 33 return 1; 34 } 35 36 return 0; 37 } 38 39 int 40 getch(void) 41 { 42 char ch; 43 44 if (peek != -1) { 45 ch = peek; 46 peek = -1; 47 return ch; 48 } 49 50 read(0, &ch, 1); 51 52 return ch; 53 } 54 55 void 56 keyboard_init(void) 57 { 58 tcgetattr(0, &orig); 59 newtio = orig; 60 newtio.c_lflag &= ~ICANON; 61 newtio.c_lflag &= ~ECHO; 62 newtio.c_lflag &= ~ISIG; 63 newtio.c_cc[VMIN] = 1; 64 newtio.c_cc[VTIME] = 0; 65 tcsetattr(0, TCSANOW, &newtio); 66 } 67 68 void 69 keyboard_reset(void) 70 { 71 tcsetattr(0, TCSANOW, &orig); 72 }