/* * libsympathy.c: * * Copyright (c) 2008 James McKenzie , * All rights reserved. * */ static char rcsid[] = "$Id$"; /* * $Log$ * Revision 1.5 2008/02/06 17:53:28 james * *** empty log message *** * * Revision 1.4 2008/02/04 20:23:55 james * *** empty log message *** * * Revision 1.3 2008/02/04 05:45:55 james * :: * * Revision 1.2 2008/02/04 02:05:06 james * *** empty log message *** * * Revision 1.1 2008/02/03 16:20:24 james * *** empty log message *** * * */ #include "project.h" struct termios old = { 0 }; static int had_winch=0; static void quit (int not) { tcsetattr (0, TCSANOW, &old); exit (1); } static void winch (int not) { had_winch++; } void testy (void) { struct termios raw = { 0 }; VT102 v = { 0 }; ANSI a = { 0 }; fd_set rfd; int fd; char c; signal (SIGINT, quit); { struct sigaction sa={0}; sa.sa_handler=winch; sa.sa_flags=SA_RESTART; sigaction(SIGWINCH,&sa,NULL); } tcgetattr (0, &old); tcgetattr (0, &raw); cfmakeraw (&raw); tcsetattr (0, TCSANOW, &raw); a.fd = 1; vt102_reset (&v); ansi_reset (&a); fd = open_fd_to_bash (); FD_ZERO (&rfd); for (;;) { struct timeval tv={0,100000}; FD_SET (fd, &rfd); FD_SET (0, &rfd); if (select (fd + 1, &rfd, NULL, NULL, &tv)<0) continue; if (FD_ISSET (0, &rfd)) { if ((read (0, &c, 1) <= 0) || (c == 3)) break; write (fd, &c, 1); } if (FD_ISSET (fd, &rfd)) { if ((read (fd, &c, 1) <= 0)) break; //write (1, &c, 1); vt102_parse_char (&v, c); ansi_draw (&a, &v.crt); } if (had_winch) { had_winch=0; ansi_getsize(&a); ansi_reset(&a); ansi_draw (&a, &v.crt); } } tcsetattr (0, TCSANOW, &old); printf ("QUAT\n"); }