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