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