X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Ffbdev%2Fkeyboard.cc;h=d1d5077ddf269963f9b60bf918d276d740cb2496;hb=e2626c41c841dbbfb64ddf6341b4e23089036299;hp=77f0bdd974438ccb21484a7a16dc64492682366f;hpb=6dc42c0e7292d6d94de640ddd7de3ee5c808e9c2;p=winnie diff --git a/src/fbdev/keyboard.cc b/src/fbdev/keyboard.cc index 77f0bdd..d1d5077 100644 --- a/src/fbdev/keyboard.cc +++ b/src/fbdev/keyboard.cc @@ -1,3 +1,24 @@ +/* +winnie - an experimental window system + +Copyright (C) 2013 Eleni Maria Stea + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Author: Eleni Maria Stea +*/ + #ifdef WINNIE_FBDEV #include #include @@ -10,22 +31,34 @@ #include #include "keyboard.h" +#include "shalloc.h" #include "window.h" #include "wm.h" -static int dev_fd = -1; -static enum {RAW, CANONICAL} ttystate = CANONICAL; +struct Keyboard { + int dev_fd; + enum {RAW, CANONICAL} ttystate; +}; + +static Keyboard *keyboard; bool init_keyboard() { - if((dev_fd = open("/dev/tty", O_RDWR)) == -1) { + if(!(keyboard = (Keyboard*)sh_malloc(sizeof *keyboard))) { + return false; + } + + keyboard->ttystate = keyboard->CANONICAL; + keyboard->dev_fd = -1; + + if((keyboard->dev_fd = open("/dev/tty", O_RDWR)) == -1) { fprintf(stderr, "Cannot open /dev/tty : %s\n", strerror(errno)); return false; } struct termios buf; - if(tcgetattr(dev_fd, &buf) < 0) { + if(tcgetattr(keyboard->dev_fd, &buf) < 0) { fprintf(stderr, "Cannot get the tty parameters : %s\n", strerror(errno)); return false; } @@ -36,11 +69,11 @@ bool init_keyboard() buf.c_cflag |= CS8; buf.c_oflag &= ~(OPOST); - if(tcsetattr(dev_fd, TCSAFLUSH, &buf) < 0) { + if(tcsetattr(keyboard->dev_fd, TCSAFLUSH, &buf) < 0) { return false; } - ttystate = RAW; + keyboard->ttystate = keyboard->RAW; return true; } @@ -48,7 +81,7 @@ void destroy_keyboard() { struct termios buf; - if(tcgetattr(dev_fd, &buf) < 0) { + if(tcgetattr(keyboard->dev_fd, &buf) < 0) { fprintf(stderr, "Cannot get the tty parameters : %s\n", strerror(errno)); } @@ -58,27 +91,29 @@ void destroy_keyboard() buf.c_cflag &= CS8; buf.c_oflag |= (OPOST); - if(tcsetattr(dev_fd, TCSAFLUSH, &buf) < 0) { + if(tcsetattr(keyboard->dev_fd, TCSAFLUSH, &buf) < 0) { fprintf(stderr, "Cannot set the tty parameters : %s\n", strerror(errno)); } - ttystate = CANONICAL; + keyboard->ttystate = keyboard->CANONICAL; - if(dev_fd != -1) { - close(dev_fd); - dev_fd = -1; + if(keyboard->dev_fd != -1) { + close(keyboard->dev_fd); + keyboard->dev_fd = -1; } + + sh_free(keyboard); } int get_keyboard_fd() { - return dev_fd; + return keyboard->dev_fd; } void process_keyboard_event() { char key; - if(read(dev_fd, &key, 1) < 1) { + if(read(keyboard->dev_fd, &key, 1) < 1) { return; }