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