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.11  2008/02/07 13:22:51  james
15  * *** empty log message ***
16  *
17  * Revision 1.10  2008/02/07 11:32:41  james
18  * *** empty log message ***
19  *
20  * Revision 1.9  2008/02/07 11:11:14  staffcvs
21  * *** empty log message ***
22  *
23  * Revision 1.8  2008/02/07 00:43:27  james
24  * *** empty log message ***
25  *
26  * Revision 1.7  2008/02/07 00:39:13  james
27  * *** empty log message ***
28  *
29  * Revision 1.6  2008/02/06 20:26:58  james
30  * *** empty log message ***
31  *
32  * Revision 1.5  2008/02/06 17:53:28  james
33  * *** empty log message ***
34  *
35  * Revision 1.4  2008/02/04 20:23:55  james
36  * *** empty log message ***
37  *
38  * Revision 1.3  2008/02/04 05:45:55  james
39  * ::
40  *
41  * Revision 1.2  2008/02/04 02:05:06  james
42  * *** empty log message ***
43  *
44  * Revision 1.1  2008/02/03 16:20:24  james
45  * *** empty log message ***
46  *
47  *
48  */
49
50 #include "project.h"
51
52 struct termios old = { 0 };
53 static int had_winch = 0;
54
55 static void
56 quit (int not)
57 {
58   tcsetattr (0, TCSANOW, &old);
59   exit (1);
60 }
61
62 static void
63 winch (int not)
64 {
65   had_winch++;
66 }
67
68
69 void
70 testy (void)
71 {
72   struct termios raw = { 0 };
73   ANSI a = { 0 };
74   fd_set rfd;
75   int fd;
76   char c;
77   TTY *t;
78   VT102 *v;
79   int i;
80
81
82   signal (SIGINT, quit);
83   {
84     struct sigaction sa = { 0 };
85
86     sa.sa_handler = winch;
87     sa.sa_flags = SA_RESTART;
88     sigaction (SIGWINCH, &sa, NULL);
89   }
90
91
92   tcgetattr (0, &old);
93   tcgetattr (0, &raw);
94   cfmakeraw (&raw);
95   tcsetattr (0, TCSANOW, &raw);
96
97   a.fd = 0;
98   ansi_reset (&a);
99
100
101   t = tty_new_test ();
102   v = vt102_new ();
103
104   FD_ZERO (&rfd);
105   for (;;)
106     {
107       struct timeval tv = { 0, 100000 };
108
109       FD_SET (t->fd, &rfd);
110       FD_SET (a.fd, &rfd);
111       select (t->fd + 1, &rfd, NULL, NULL, &tv);
112
113 #if 0
114       if (FD_ISSET (a.fd, &rfd))
115         {
116         }
117 #endif
118
119       switch (ansi_dispatch (&a, v, t))
120         {
121         case -1:
122           break;
123         case 1:
124           ansi_getsize (&a);
125           ansi_reset (&a);
126           ansi_draw (&a, &v->crt);
127           break;
128         }
129
130       if (FD_ISSET (t->fd, &rfd))
131         {
132           if (vt102_dispatch (v, t))
133             break;
134         }
135
136       if (had_winch)
137         {
138           had_winch = 0;
139           ansi_getsize (&a);
140           ansi_reset (&a);
141           ansi_draw (&a, &v->crt);
142         }
143       ansi_draw (&a, &v->crt);
144     }
145   tcsetattr (0, TCSANOW, &old);
146   printf ("QUAT\n");
147 }