chiark / gitweb /
*** empty log message ***
[sympathy.git] / src / libsympathy.c
1 /*
2  * libsympathy.c:
3  *
4  * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
5  * All rights reserved.
6  *
7  */
8
9 static char rcsid[] =
10   "$Id$";
11
12 /*
13  * $Log$
14  * Revision 1.6  2008/02/06 20:26:58  james
15  * *** empty log message ***
16  *
17  * Revision 1.5  2008/02/06 17:53:28  james
18  * *** empty log message ***
19  *
20  * Revision 1.4  2008/02/04 20:23:55  james
21  * *** empty log message ***
22  *
23  * Revision 1.3  2008/02/04 05:45:55  james
24  * ::
25  *
26  * Revision 1.2  2008/02/04 02:05:06  james
27  * *** empty log message ***
28  *
29  * Revision 1.1  2008/02/03 16:20:24  james
30  * *** empty log message ***
31  *
32  *
33  */
34
35 #include "project.h"
36
37 struct termios old = { 0 };
38 static int had_winch = 0;
39
40 static void
41 quit (int not)
42 {
43   tcsetattr (0, TCSANOW, &old);
44   exit (1);
45 }
46
47 static void
48 winch (int not)
49 {
50   had_winch++;
51 }
52
53
54 void
55 testy (void)
56 {
57   struct termios raw = { 0 };
58   ANSI a = { 0 };
59   fd_set rfd;
60   int fd;
61   char c;
62   TTY *y;
63   VT102 *v;
64
65
66   signal (SIGINT, quit);
67   {
68     struct sigaction sa = { 0 };
69
70     sa.sa_handler = winch;
71     sa.sa_flags = SA_RESTART;
72     sigaction (SIGWINCH, &sa, NULL);
73   }
74
75
76   tcgetattr (0, &old);
77   tcgetattr (0, &raw);
78   cfmakeraw (&raw);
79   tcsetattr (0, TCSANOW, &raw);
80
81   a.fd = 0;
82   ansi_reset (&a);
83
84
85   t=tty_new_test();  
86   v=vt102_new(t);
87
88   FD_ZERO (&rfd);
89   for (;;)
90     {
91       struct timeval tv = { 0, 100000 };
92
93       FD_SET (t->fd, &rfd);
94       FD_SET (a.fd, &rfd);
95       if (select (t->fd + 1, &rfd, NULL, NULL, &tv) < 0)
96         continue;
97
98       if (FD_ISSET (a.fd, &rfd))
99         {
100         if (ansi_dispatch(&a,v)) break;
101         }
102
103       if (FD_ISSET (t->fd, &rfd)) {
104           if (vt102_dispatch (v)) break;
105       }
106
107       if (had_winch)
108         {
109           had_winch = 0;
110           ansi_getsize (&a);
111           ansi_reset (&a);
112           ansi_draw (&a, &v.crt);
113         }
114     }
115   tcsetattr (0, TCSANOW, &old);
116   printf ("QUAT\n");
117 }