diff options
Diffstat (limited to 'src/libsympathy.c')
-rw-r--r-- | src/libsympathy.c | 73 |
1 files changed, 36 insertions, 37 deletions
diff --git a/src/libsympathy.c b/src/libsympathy.c index d8eb76f..5c24ef2 100644 --- a/src/libsympathy.c +++ b/src/libsympathy.c @@ -11,6 +11,9 @@ static char rcsid[] = /* * $Log$ + * Revision 1.6 2008/02/06 20:26:58 james + * *** empty log message *** + * * Revision 1.5 2008/02/06 17:53:28 james * *** empty log message *** * @@ -32,15 +35,17 @@ static char rcsid[] = #include "project.h" struct termios old = { 0 }; -static int had_winch=0; +static int had_winch = 0; -static void quit (int not) +static void +quit (int not) { tcsetattr (0, TCSANOW, &old); exit (1); } -static void winch (int not) +static void +winch (int not) { had_winch++; } @@ -50,68 +55,62 @@ void testy (void) { struct termios raw = { 0 }; - VT102 v = { 0 }; ANSI a = { 0 }; fd_set rfd; int fd; char c; + TTY *y; + VT102 *v; signal (SIGINT, quit); -{ -struct sigaction sa={0}; + { + struct sigaction sa = { 0 }; + + sa.sa_handler = winch; + sa.sa_flags = SA_RESTART; + sigaction (SIGWINCH, &sa, NULL); + } -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); + a.fd = 0; ansi_reset (&a); - fd = open_fd_to_bash (); + t=tty_new_test(); + v=vt102_new(t); FD_ZERO (&rfd); - - for (;;) { - struct timeval tv={0,100000}; + struct timeval tv = { 0, 100000 }; - FD_SET (fd, &rfd); - FD_SET (0, &rfd); - if (select (fd + 1, &rfd, NULL, NULL, &tv)<0) continue; + FD_SET (t->fd, &rfd); + FD_SET (a.fd, &rfd); + if (select (t->fd + 1, &rfd, NULL, NULL, &tv) < 0) + continue; - if (FD_ISSET (0, &rfd)) + if (FD_ISSET (a.fd, &rfd)) { - if ((read (0, &c, 1) <= 0) || (c == 3)) - break; - - write (fd, &c, 1); + if (ansi_dispatch(&a,v)) break; } - if (FD_ISSET (fd, &rfd)) + + if (FD_ISSET (t->fd, &rfd)) { + if (vt102_dispatch (v)) break; + } + + if (had_winch) { - if ((read (fd, &c, 1) <= 0)) - break; - //write (1, &c, 1); - vt102_parse_char (&v, c); + had_winch = 0; + ansi_getsize (&a); + ansi_reset (&a); 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"); |