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