chiark / gitweb /
serialmgr: Look for things in /usr, not /usr/local
[sympathy.git] / src / keydis.c
1 /* 
2  * keydis.c:
3  *
4  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
5  * All rights reserved.
6  *
7  */
8
9 static char rcsid[] = "$Id: keydis.c,v 1.16 2008/03/10 11:49:33 james Exp $";
10
11 /* 
12  * $Log: keydis.c,v $
13  * Revision 1.16  2008/03/10 11:49:33  james
14  * *** empty log message ***
15  *
16  * Revision 1.15  2008/03/07 13:16:02  james
17  * *** empty log message ***
18  *
19  * Revision 1.14  2008/03/07 12:37:04  james
20  * *** empty log message ***
21  *
22  * Revision 1.13  2008/03/03 18:16:16  james
23  * *** empty log message ***
24  *
25  * Revision 1.12  2008/03/03 18:15:19  james
26  * *** empty log message ***
27  *
28  * Revision 1.11  2008/03/03 06:04:42  james
29  * *** empty log message ***
30  *
31  * Revision 1.10  2008/03/02 10:37:56  james
32  * *** empty log message ***
33  *
34  * Revision 1.9  2008/02/28 22:00:42  james
35  * *** empty log message ***
36  *
37  * Revision 1.8  2008/02/28 16:57:52  james
38  * *** empty log message ***
39  *
40  * Revision 1.7  2008/02/28 16:37:16  james
41  * *** empty log message ***
42  *
43  * Revision 1.6  2008/02/28 12:12:25  james
44  * *** empty log message ***
45  *
46  * Revision 1.5  2008/02/23 11:48:37  james
47  * *** empty log message ***
48  *
49  * Revision 1.4  2008/02/22 17:07:00  james
50  * *** empty log message ***
51  *
52  * Revision 1.3  2008/02/15 23:52:12  james
53  * *** empty log message ***
54  *
55  * Revision 1.2  2008/02/15 03:32:07  james
56  * *** empty log message ***
57  *
58  * Revision 1.1  2008/02/14 02:46:44  james
59  * *** empty log message ***
60  *
61  * Revision 1.1  2008/02/14 01:55:57  james
62  * *** empty log message ***
63  *
64  */
65
66
67 #include "project.h"
68
69 #define CMD_BUFLEN      128
70
71 typedef struct {
72   KEYDIS_SIGNATURE;
73 } KeyDis_VT102;
74
75 typedef struct {
76   KEYDIS_SIGNATURE;
77   Socket *s;
78 } KeyDis_IPC;
79
80
81 static void
82 keydis_close (KeyDis * t)
83 {
84   free (t);
85 }
86
87
88 static int
89 keydis_ipc_key (KeyDis * _t, Context * c, int key)
90 {
91   KeyDis_IPC *t = (KeyDis_IPC *) _t;
92
93   return ipc_msg_send_key (t->s, key);
94 }
95
96 static int
97 keydis_ipc_set_baud (KeyDis * _t, Context * c, int baud)
98 {
99   KeyDis_IPC *t = (KeyDis_IPC *) _t;
100
101   ipc_msg_send_setbaud (t->s, baud);
102
103   return 0;
104 }
105
106 static int
107 keydis_ipc_send_break (KeyDis * _t, Context * c)
108 {
109   KeyDis_IPC *t = (KeyDis_IPC *) _t;
110
111   ipc_msg_send_sendbreak (t->s);
112
113   return 0;
114 }
115
116 static int
117 keydis_ipc_set_flow (KeyDis * _t, Context * c, int flow)
118 {
119   KeyDis_IPC *t = (KeyDis_IPC *) _t;
120
121   ipc_msg_send_setflow (t->s, flow);
122
123   return 0;
124 }
125
126
127 static int
128 keydis_ipc_set_ansi (KeyDis * _t, Context * c, int ansi)
129 {
130   KeyDis_IPC *t = (KeyDis_IPC *) _t;
131
132   vt102_set_ansi (c->v, ansi);
133
134   ipc_msg_send_setansi (t->s, ansi);
135
136   return 0;
137 }
138
139
140 static int
141 keydis_ipc_hangup (KeyDis * _t, Context * c)
142 {
143   KeyDis_IPC *t = (KeyDis_IPC *) _t;
144
145   ipc_msg_send_hangup (t->s);
146
147   return 0;
148 }
149
150
151 static int
152 keydis_ipc_set_size (KeyDis * _t, Context * c, int w, int h)
153 {
154   CRT_Pos p = { w, h };
155
156   KeyDis_IPC *t = (KeyDis_IPC *) _t;
157
158   vt102_resize (c, p);
159   ipc_msg_send_setsize (t->s, p);
160
161   return 0;
162 }
163
164
165 static int
166 keydis_ipc_reset (KeyDis * _t, Context * c)
167 {
168   KeyDis_IPC *t = (KeyDis_IPC *) _t;
169
170   vt102_reset (c);
171   ipc_msg_send_reset (t->s);
172
173   return 0;
174 }
175
176 static int
177 keydis_vt102_key (KeyDis * _t, Context * c, int key)
178 {
179   KeyDis_VT102 *t = (KeyDis_VT102 *) _t;
180
181   vt102_send (c, key);
182   return 0;
183 }
184
185 static int
186 keydis_vt102_set_baud (KeyDis * _t, Context * c, int baud)
187 {
188   KeyDis_VT102 *t = (KeyDis_VT102 *) _t;
189
190   tty_set_baud (c->t, baud);
191   tty_parse_reset (c);
192
193   log_f (c->l, "<baud changed to %d>", baud);
194
195   return 0;
196 }
197
198 static int
199 keydis_vt102_send_break (KeyDis * _t, Context * c)
200 {
201   KeyDis_VT102 *t = (KeyDis_VT102 *) _t;
202
203   log_f (c->l, "<break sent>");
204   tty_send_break (c->t);
205
206   return 0;
207 }
208
209 static int
210 keydis_vt102_set_flow (KeyDis * _t, Context * c, int flow)
211 {
212   KeyDis_VT102 *t = (KeyDis_VT102 *) _t;
213
214   log_f (c->l, "<flow control turned %s>", flow ? "on" : "off");
215   tty_set_flow (c->t, flow);
216
217   return 0;
218 }
219
220 static int
221 keydis_vt102_set_ansi (KeyDis * _t, Context * c, int ansi)
222 {
223   KeyDis_VT102 *t = (KeyDis_VT102 *) _t;
224
225   if (c->v)
226     c->v->xn_glitch = ansi ? 0 : 1;
227   return 0;
228 }
229
230
231 static int
232 keydis_vt102_hangup (KeyDis * _t, Context * c)
233 {
234   KeyDis_VT102 *t = (KeyDis_VT102 *) _t;
235
236   log_f (c->l, "<hangup initiated>");
237   tty_hangup (c->t);
238
239   return 0;
240 }
241
242 static int
243 keydis_vt102_set_size (KeyDis * _t, Context * c, int w, int h)
244 {
245   KeyDis_VT102 *t = (KeyDis_VT102 *) _t;
246   CRT_Pos p = { w, h };
247
248   vt102_resize (c, p);
249
250   return 0;
251 }
252
253 static int
254 keydis_vt102_reset (KeyDis * _t, Context * c)
255 {
256   KeyDis_VT102 *t = (KeyDis_VT102 *) _t;
257
258   vt102_reset (c);
259
260   return 0;
261 }
262
263
264
265 KeyDis *
266 keydis_vt102_new (void)
267 {
268   KeyDis_VT102 *t = xmalloc (sizeof (KeyDis_VT102));
269   t->key = keydis_vt102_key;
270   t->close = keydis_close;
271   t->set_baud = keydis_vt102_set_baud;
272   t->send_break = keydis_vt102_send_break;
273   t->set_flow = keydis_vt102_set_flow;
274   t->set_ansi = keydis_vt102_set_ansi;
275   t->hangup = keydis_vt102_hangup;
276   t->set_size = keydis_vt102_set_size;
277   t->reset = keydis_vt102_reset;
278   return (KeyDis *) t;
279 }
280
281
282 KeyDis *
283 keydis_ipc_new (Socket * s)
284 {
285   KeyDis_IPC *t = xmalloc (sizeof (KeyDis_IPC));
286   t->key = keydis_ipc_key;
287   t->close = keydis_close;
288   t->set_baud = keydis_ipc_set_baud;
289   t->send_break = keydis_ipc_send_break;
290   t->set_flow = keydis_ipc_set_flow;
291   t->set_ansi = keydis_ipc_set_ansi;
292   t->hangup = keydis_ipc_hangup;
293   t->set_size = keydis_ipc_set_size;
294   t->reset = keydis_ipc_reset;
295   t->s = s;
296   return (KeyDis *) t;
297 }
298
299
300
301
302
303
304 #if 0
305 int
306 keydis_key (KeyDis * t, Context * c, int key)
307 {
308
309   if (!c->d)
310     return t->key (t, c, key);
311
312   cmd_show_status (c->d, c);
313
314   if (c->d->active)
315     return cmd_key (c->d, c, key);
316
317   if (key == CMD_KEY)
318     return cmd_activate (c->d, c);
319
320
321   return t->key (t, c, key);
322 }
323 #endif