X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=fbgfx;a=blobdiff_plain;f=src%2Ffbevents.c;fp=src%2Ffbevents.c;h=1522a5889d6030c540b21cdda695b77f77aeb235;hp=0000000000000000000000000000000000000000;hb=4b522caf5387f8075b7bbb2a2b0475c012157456;hpb=7e9af893a6d14c0136a89648a2fdebab614a662f diff --git a/src/fbevents.c b/src/fbevents.c new file mode 100644 index 0000000..1522a58 --- /dev/null +++ b/src/fbevents.c @@ -0,0 +1,84 @@ +#include +#include +#include +#include +#include +#include "fbevents.h" + +static struct termios orig_state; +static int term_fd = -1; /* tty file descriptor */ + +static void (*keyb_func)(int, int, void*); +static void *keyb_cls; +static void (*mbutton_func)(int, int, int, int, void*); +static void *mbutton_cls; +static void (*mmotion_func)(int, int, void*); +static void *mmotion_cls; + + +int fbev_init(void) +{ + struct termios tstate; + + if((term_fd = open("/dev/tty", O_RDWR)) == -1) { + perror("failed to open tty"); + return -1; + } + fcntl(term_fd, F_SETFL, fcntl(term_fd, F_GETFL) | O_NONBLOCK); + + if(tcgetattr(term_fd, &tstate) == -1) { + perror("failed to retrieve tty attribs"); + close(term_fd); + return -1; + } + orig_state = tstate; + + cfmakeraw(&tstate); + if(tcsetattr(term_fd, TCSANOW, &tstate) == -1) { + close(term_fd); + return -1; + } + return 0; +} + +void fbev_shutdown(void) +{ + if(term_fd >= 0) { + tcsetattr(term_fd, TCSANOW, &orig_state); + close(term_fd); + term_fd = -1; + } +} + +void fbev_update(void) +{ + char buf[64]; + int i, sz; + assert(term_fd >= 0); + + while((sz = read(term_fd, buf, 64)) > 0) { + if(keyb_func) { + for(i=0; i