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