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