X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=visor;a=blobdiff_plain;f=visor%2Fsrc%2Fmain_unix.c;fp=visor%2Fsrc%2Fmain_unix.c;h=9e96d456571ef796d4bc5acf346ff7be3bc5ea97;hp=37406a0d3206d802c1502e659220cde9be4a0eb2;hb=c21ad1b67f3bb33cda9a85006486a6d88116a731;hpb=05b4673efbeb372387b0a9359af5046afb87c8cf diff --git a/visor/src/main_unix.c b/visor/src/main_unix.c index 37406a0..9e96d45 100644 --- a/visor/src/main_unix.c +++ b/visor/src/main_unix.c @@ -1,19 +1,9 @@ #include -#include -#include -#include -#include -#include -#include static int init(void); static void cleanup(void); static void sighandler(int s); -int term_width, term_height; -int ttyfd; -struct termios saved_term; - int main(int argc, char **argv) { int res; @@ -24,7 +14,7 @@ int main(int argc, char **argv) } for(;;) { - if((res = read(ttyfd, &c, 1)) == 0 || (res < 0 && errno != EINTR)) { + if(term_getchar() == 'q') { break; } /* proc input */ @@ -36,60 +26,14 @@ int main(int argc, char **argv) static int init(void) { - struct termios term; - struct winsize winsz; - - if((ttyfd = open("/dev/tty", O_RDWR)) == -1) { - perror("failed to open /dev/tty"); + if(term_init() == -1) { return -1; } - if(tcgetattr(ttyfd, &term) == -1) { - perror("failed to get terminal attr"); - return -1; - } - saved_term = term; - term.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); - term.c_oflag &= ~OPOST; - term.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); - term.c_cflag = (term.c_cflag & ~(CSIZE | PARENB)) | CS8; - - if(tcsetattr(ttyfd, TCSAFLUSH, &term) == -1) { - perror("failed to change terminal attributes"); - return -1; - } - - ioctl(1, TIOCGWINSZ, &winsz); - term_width = winsz.ws_col; - term_height = winsz.ws_row; - - signal(SIGWINCH, sighandler); - - write(ttyfd, "\033[2J", 4); - + term_clear(); return 0; } static void cleanup(void) { - tcsetattr(ttyfd, TCSAFLUSH, &saved_term); - close(ttyfd); -} - -static void sighandler(int s) -{ - struct winsize winsz; - - signal(s, sighandler); - - switch(s) { - case SIGWINCH: - ioctl(1, TIOCGWINSZ, &winsz); - term_width = winsz.ws_col; - term_height = winsz.ws_row; - /* redraw */ - break; - - default: - break; - } + term_cleanup(); }