chiark / gitweb /
Change James's email address
[sympathy.git] / src / sympathy.h
1 /*
2  * sympathy.h.head.in:
3  *
4  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
5  * All rights reserved.
6  *
7  */
8
9 /*
10  * $Id: sympathy.h.head.in,v 1.4 2010/07/16 11:06:39 james Exp $
11  */
12
13 /*
14  * $Log: sympathy.h.head.in,v $
15  * Revision 1.4  2010/07/16 11:06:39  james
16  * add missing G2
17  *
18  * Revision 1.3  2008/03/07 14:13:40  james
19  * *** empty log message ***
20  *
21  * Revision 1.2  2008/02/13 18:05:06  james
22  * *** empty log message ***
23  *
24  * Revision 1.1  2008/02/13 16:57:29  james
25  * *** empty log message ***
26  *
27  * Revision 1.1  2008/02/03 16:20:24  james
28  * *** empty log message ***
29  *
30  *
31  */
32
33 /* MAKE ABSOLUTELY SURE THAT YOU ARE EDITING THE sympathy.h.in */
34 /* FILE FROM WHICH THIS IS GENERATED - OTHERWISE YOUR EDITS */
35 /* WILL BE LOST */
36
37 #ifndef __SYMPATHY_H__
38 #define __SYMPATHY_H__
39
40 #ifdef __cplusplus
41 extern "C" { 
42 #endif
43
44 #include <stdio.h>
45 #include <stdlib.h>
46
47 /* the integer constants here are set by configure */
48
49 /* get uint32_t and friends defined */
50 #if 1
51 #include <stdint.h>
52 #elif 0
53 #include <sys/int_types.h>
54 #endif
55 #if 1
56 #include <unistd.h>
57 #endif
58
59 /* If the following is <> then configure failed to find where */
60 /* struct tm was defined - report it as a bug */
61
62 /* get struct tm defined */
63 #include <time.h>
64
65 #if 0
66 #include <sys/time.h>
67 #if 0
68 #include <time.h>
69 #endif
70 #else
71 #if 0
72 #include <sys/time.h>
73 #endif
74 #include <time.h>
75 #endif
76
77
78 #if 1
79 #include <malloc.h>
80 #endif
81
82 #if 1
83 #include <unistd.h>
84 #endif
85
86 #if 1
87 #include <stdint.h>
88 #elif 0
89 #include <sys/int_types.h>
90 #endif
91
92 #include <termio.h>
93 #include <termios.h>
94
95
96 /* 
97  * crt.h:
98  *
99  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
100  * All rights reserved.
101  *
102  */
103
104 /* 
105  * $Id: crt.h,v 1.18 2008/03/10 11:49:33 james Exp $
106  */
107
108 /* 
109  * $Log: crt.h,v $
110  * Revision 1.18  2008/03/10 11:49:33  james
111  * *** empty log message ***
112  *
113  * Revision 1.17  2008/03/07 12:37:04  james
114  * *** empty log message ***
115  *
116  * Revision 1.16  2008/03/03 06:04:42  james
117  * *** empty log message ***
118  *
119  * Revision 1.15  2008/03/02 10:37:56  james
120  * *** empty log message ***
121  *
122  * Revision 1.14  2008/02/28 16:57:51  james
123  * *** empty log message ***
124  *
125  * Revision 1.13  2008/02/27 09:42:22  james
126  * *** empty log message ***
127  *
128  * Revision 1.12  2008/02/26 23:23:17  james
129  * *** empty log message ***
130  *
131  * Revision 1.11  2008/02/26 19:08:27  james
132  * *** empty log message ***
133  *
134  * Revision 1.10  2008/02/24 00:42:53  james
135  * *** empty log message ***
136  *
137  * Revision 1.9  2008/02/20 19:25:09  james
138  * *** empty log message ***
139  *
140  * Revision 1.8  2008/02/13 09:12:21  james
141  * *** empty log message ***
142  *
143  * Revision 1.7  2008/02/13 01:08:18  james
144  * *** empty log message ***
145  *
146  * Revision 1.6  2008/02/07 13:22:51  james
147  * *** empty log message ***
148  *
149  * Revision 1.5  2008/02/07 12:41:06  james
150  * *** empty log message ***
151  *
152  * Revision 1.4  2008/02/07 12:16:04  james
153  * *** empty log message ***
154  *
155  * Revision 1.3  2008/02/06 11:30:37  james
156  * *** empty log message ***
157  *
158  * Revision 1.2  2008/02/04 20:23:55  james
159  * *** empty log message ***
160  *
161  * Revision 1.1  2008/02/03 23:31:25  james
162  * *** empty log message ***
163  *
164  */
165
166 #ifndef __CRT_H__
167 #define __CRT_H__
168
169 #define CRT_ROWS 60
170 #define CRT_COLS 132
171
172 #define CRT_CELS (CRT_ROWS*CRT_COLS)
173 #define CRT_ADDR(r,c) (((r)*CRT_COLS)+(c))
174 #define CRT_ADDR_POS(p) ((((p)->y)*CRT_COLS)+((p)->x))
175
176 #define CRT_ATTR_NORMAL    0x0
177 #define CRT_ATTR_UNDERLINE 0x1
178 #define CRT_ATTR_REVERSE   0x2
179 #define CRT_ATTR_BLINK     0x4
180 #define CRT_ATTR_BOLD      0x8
181
182
183 #define CRT_COLOR_BLACK         0x0
184 #define CRT_COLOR_RED           0x1
185 #define CRT_COLOR_GREEN         0x2
186 #define CRT_COLOR_YELLOW        0x3
187 #define CRT_COLOR_BLUE          0x4
188 #define CRT_COLOR_MAGENTA       0x5
189 #define CRT_COLOR_CYAN          0x6
190 #define CRT_COLOR_WHITE         0x7
191 #define CRT_COLOR_INTENSITY     0x8
192
193 #define CRT_COLOR_FG_MASK       0xf0
194 #define CRT_COLOR_FG_SHIFT      4
195
196 #define CRT_COLOR_BG_MASK       0xf
197 #define CRT_COLOR_BG_SHIFT      0
198
199 #define CRT_COLOR_BG(a)         (((a) & CRT_COLOR_BG_MASK) >> CRT_COLOR_BG_SHIFT)
200 #define CRT_COLOR_FG(a)         (((a) & CRT_COLOR_FG_MASK) >> CRT_COLOR_FG_SHIFT)
201
202 #define CRT_MAKE_COLOR(f,b)     (((f) << CRT_COLOR_FG_SHIFT)|(b))
203
204 #define CRT_BGCOLOR_NORMAL      CRT_COLOR_BLACK
205 #define CRT_FGCOLOR_NORMAL      CRT_COLOR_WHITE
206
207 #define CRT_COLOR_NORMAL        CRT_MAKE_COLOR(CRT_FGCOLOR_NORMAL,CRT_BGCOLOR_NORMAL)
208
209 typedef struct __attribute__ ((packed)) {
210   uint32_t chr;
211   uint8_t attr;
212   uint8_t color;
213 } CRT_CA;
214
215 typedef struct {
216   int x;
217   int y;
218 } CRT_Pos;
219
220
221 typedef struct {
222   CRT_Pos s;
223   CRT_Pos e;
224   int dir;
225 } CRT_ScrollHint;
226
227 typedef struct CRT_struct {
228   CRT_CA screen[CRT_CELS];
229   CRT_Pos pos;
230   int hide_cursor;
231   CRT_Pos size;
232 } CRT;
233
234
235 static inline
236 crt_ca_cmp (CRT_CA a, CRT_CA b)
237 {
238   return memcmp (&a, &b, sizeof (a));
239 }
240
241 static inline
242 crt_pos_cmp (CRT_Pos a, CRT_Pos b)
243 {
244   return memcmp (&a, &b, sizeof (a));
245 }
246
247 #endif /* __CRT_H__ */
248 /* 
249  * utf8.h:
250  *
251  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
252  * All rights reserved.
253  *
254  */
255
256 /* 
257  * $Id: utf8.h,v 1.8 2008/03/10 11:49:33 james Exp $
258  */
259
260 /* 
261  * $Log: utf8.h,v $
262  * Revision 1.8  2008/03/10 11:49:33  james
263  * *** empty log message ***
264  *
265  * Revision 1.7  2008/03/07 12:37:04  james
266  * *** empty log message ***
267  *
268  * Revision 1.6  2008/03/03 06:04:42  james
269  * *** empty log message ***
270  *
271  * Revision 1.5  2008/03/02 10:37:56  james
272  * *** empty log message ***
273  *
274  * Revision 1.4  2008/02/24 00:42:53  james
275  * *** empty log message ***
276  *
277  * Revision 1.3  2008/02/23 11:48:37  james
278  * *** empty log message ***
279  *
280  * Revision 1.2  2008/02/22 23:39:27  james
281  * *** empty log message ***
282  *
283  * Revision 1.1  2008/02/22 19:12:05  james
284  * *** empty log message ***
285  *
286  *
287  */
288
289 #ifndef __UTF8_H__
290 #define __UTF8_H__
291
292
293 typedef struct {
294   int in_utf8;
295
296   uint8_t utf_buf[4];
297   int utf_ptr;
298
299   uint32_t ch;
300   int sh;
301 } UTF8;
302
303 #endif /* __UTF8_H__ */
304 /* 
305  * tty.h:
306  *
307  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
308  * All rights reserved.
309  *
310  */
311
312 /* 
313  * $Id: tty.h,v 1.16 2008/03/10 11:49:33 james Exp $
314  */
315
316 /* 
317  * $Log: tty.h,v $
318  * Revision 1.16  2008/03/10 11:49:33  james
319  * *** empty log message ***
320  *
321  * Revision 1.15  2008/03/07 12:37:04  james
322  * *** empty log message ***
323  *
324  * Revision 1.14  2008/03/03 06:04:42  james
325  * *** empty log message ***
326  *
327  * Revision 1.13  2008/03/02 10:37:56  james
328  * *** empty log message ***
329  *
330  * Revision 1.12  2008/02/28 16:57:52  james
331  * *** empty log message ***
332  *
333  * Revision 1.11  2008/02/23 11:48:37  james
334  * *** empty log message ***
335  *
336  * Revision 1.10  2008/02/22 23:39:27  james
337  * *** empty log message ***
338  *
339  * Revision 1.9  2008/02/22 19:12:05  james
340  * *** empty log message ***
341  *
342  * Revision 1.8  2008/02/15 23:52:12  james
343  * *** empty log message ***
344  *
345  * Revision 1.7  2008/02/14 10:36:18  james
346  * *** empty log message ***
347  *
348  * Revision 1.6  2008/02/14 10:34:30  james
349  * *** empty log message ***
350  *
351  * Revision 1.5  2008/02/13 09:12:21  james
352  * *** empty log message ***
353  *
354  * Revision 1.4  2008/02/13 01:08:18  james
355  * *** empty log message ***
356  *
357  * Revision 1.3  2008/02/09 15:47:28  james
358  * *** empty log message ***
359  *
360  * Revision 1.2  2008/02/07 00:43:27  james
361  * *** empty log message ***
362  *
363  * Revision 1.1  2008/02/06 20:26:58  james
364  * *** empty log message ***
365  *
366  */
367
368 #ifndef __TTY_H__
369 #define __TTY_H__
370
371
372 #define SYM_CHAR_RESET  (-1)
373
374 #define TTY_SIGNATURE \
375         char name[1024]; \
376         int blocked; \
377         CRT_Pos size; \
378         void (*close)(struct TTY_struct *); \
379         int (*recv)(struct TTY_struct *,void *buf,int len); \
380         int (*xmit)(struct TTY_struct *,void *buf,int len); \
381         int rfd; \
382         int wfd; \
383         int hanging_up; \
384         struct timeval hangup_clock; \
385         int displayed_length;
386
387
388 #define TTY_BITFREQ_LEN 10
389
390 typedef struct {
391   int in_dle;
392   int in_errmark;
393
394   int bitfreq[TTY_BITFREQ_LEN];
395   int biterrs;
396
397   struct timeval lasterr;
398   int guessed_baud;
399 } TTY_Parser;
400
401
402 typedef struct TTY_struct {
403   TTY_SIGNATURE;
404 } TTY;
405
406 typedef struct {
407   int lines;
408   int blocked;
409   struct termios termios;
410   int baud;
411 } TTY_Status;
412
413 #endif /* __TTY_H__ */
414 /* 
415  * ansi.h:
416  *
417  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
418  * All rights reserved.
419  *
420  */
421
422 /* 
423  * $Id: ansi.h,v 1.20 2008/03/10 11:49:32 james Exp $
424  */
425
426 /* 
427  * $Log: ansi.h,v $
428  * Revision 1.20  2008/03/10 11:49:32  james
429  * *** empty log message ***
430  *
431  * Revision 1.19  2008/03/07 12:37:04  james
432  * *** empty log message ***
433  *
434  * Revision 1.18  2008/03/06 21:34:09  james
435  * *** empty log message ***
436  *
437  * Revision 1.17  2008/03/06 21:33:02  james
438  * *** empty log message ***
439  *
440  * Revision 1.16  2008/03/06 16:49:05  james
441  * *** empty log message ***
442  *
443  * Revision 1.15  2008/03/03 06:04:42  james
444  * *** empty log message ***
445  *
446  * Revision 1.14  2008/03/02 10:37:56  james
447  * *** empty log message ***
448  *
449  * Revision 1.13  2008/02/24 00:42:53  james
450  * *** empty log message ***
451  *
452  * Revision 1.12  2008/02/23 11:48:37  james
453  * *** empty log message ***
454  *
455  * Revision 1.11  2008/02/20 20:16:07  james
456  * *** empty log message ***
457  *
458  * Revision 1.10  2008/02/20 19:44:37  james
459  * @@
460  *
461  * Revision 1.9  2008/02/20 19:36:06  james
462  * @@
463  *
464  * Revision 1.8  2008/02/20 19:25:09  james
465  * *** empty log message ***
466  *
467  * Revision 1.7  2008/02/13 16:57:29  james
468  * *** empty log message ***
469  *
470  * Revision 1.6  2008/02/13 01:08:18  james
471  * *** empty log message ***
472  *
473  * Revision 1.5  2008/02/07 12:16:04  james
474  * *** empty log message ***
475  *
476  * Revision 1.4  2008/02/07 00:43:27  james
477  * *** empty log message ***
478  *
479  * Revision 1.3  2008/02/07 00:39:13  james
480  * *** empty log message ***
481  *
482  * Revision 1.2  2008/02/06 11:30:37  james
483  * *** empty log message ***
484  *
485  * Revision 1.1  2008/02/03 23:31:25  james
486  * *** empty log message ***
487  *
488  */
489
490 #ifndef __ANSI_H__
491 #define __ANSI_H__
492
493 #define ANSI_INVAL -1
494
495 #define ANSI_ESCAPE_BUF_LEN 10
496 #define ANSI_ESCAPE_TIMEOUT     100000 /* in ms */
497
498 typedef struct {
499   int in_escape;
500   struct timeval last_escape;
501   char escape_buf[ANSI_ESCAPE_BUF_LEN];
502   int escape_ptr;
503 } ANSI_Parser;
504
505 struct CRT_struct;
506 struct Context_struct;
507
508 typedef struct ANSI_struct {
509   ANSI_Parser parser;
510
511   TTY *terminal;
512   int eof;
513
514
515   CRT crt;
516   CRT_Pos pos;
517   CRT_Pos size;
518   int hide_cursor;
519   int attr;
520   int color;
521
522   int utf8;
523
524   int history_ptr;
525   FILE *file;
526
527   int (*dispatch) (struct ANSI_struct *, struct Context_struct *);
528   int (*update) (struct ANSI_struct *, struct Context_struct *);
529   int (*one_shot) (struct ANSI_struct *, struct CRT_struct *);
530   int (*reset) (struct ANSI_struct *, struct CRT_struct *);
531   int (*set_title) (struct ANSI_struct *, char *);
532   void (*terminal_reset) (struct ANSI_struct *);
533   void (*close) (struct ANSI_struct *);
534 } ANSI;
535
536
537 #endif /* __ANSI_H__ */
538 /* 
539  * vt102.h:
540  *
541  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
542  * All rights reserved.
543  *
544  */
545
546 /* 
547  * $Id: vt102.h,v 1.25 2008/03/10 11:49:33 james Exp $
548  */
549
550 /* 
551  * $Log: vt102.h,v $
552  * Revision 1.25  2008/03/10 11:49:33  james
553  * *** empty log message ***
554  *
555  * Revision 1.24  2008/03/07 12:37:04  james
556  * *** empty log message ***
557  *
558  * Revision 1.23  2008/03/03 06:04:42  james
559  * *** empty log message ***
560  *
561  * Revision 1.22  2008/03/02 10:37:56  james
562  * *** empty log message ***
563  *
564  * Revision 1.21  2008/02/28 16:57:52  james
565  * *** empty log message ***
566  *
567  * Revision 1.20  2008/02/27 09:42:22  james
568  * *** empty log message ***
569  *
570  * Revision 1.19  2008/02/26 23:23:17  james
571  * *** empty log message ***
572  *
573  * Revision 1.18  2008/02/26 19:08:27  james
574  * *** empty log message ***
575  *
576  * Revision 1.17  2008/02/26 16:53:24  james
577  * *** empty log message ***
578  *
579  * Revision 1.16  2008/02/24 12:22:42  james
580  * *** empty log message ***
581  *
582  * Revision 1.15  2008/02/24 00:42:53  james
583  * *** empty log message ***
584  *
585  * Revision 1.14  2008/02/23 11:48:37  james
586  * *** empty log message ***
587  *
588  * Revision 1.13  2008/02/22 17:07:00  james
589  * *** empty log message ***
590  *
591  * Revision 1.12  2008/02/22 14:51:54  james
592  * *** empty log message ***
593  *
594  * Revision 1.11  2008/02/08 15:06:42  james
595  * *** empty log message ***
596  *
597  * Revision 1.10  2008/02/07 12:16:04  james
598  * *** empty log message ***
599  *
600  * Revision 1.9  2008/02/07 01:57:46  james
601  * *** empty log message ***
602  *
603  * Revision 1.8  2008/02/07 00:39:13  james
604  * *** empty log message ***
605  *
606  * Revision 1.7  2008/02/06 20:26:58  james
607  * *** empty log message ***
608  *
609  * Revision 1.6  2008/02/06 17:53:28  james
610  * *** empty log message ***
611  *
612  * Revision 1.5  2008/02/06 15:53:22  james
613  * *** empty log message ***
614  *
615  * Revision 1.4  2008/02/06 11:30:37  james
616  * *** empty log message ***
617  *
618  * Revision 1.3  2008/02/04 20:23:55  james
619  * *** empty log message ***
620  *
621  * Revision 1.2  2008/02/04 02:05:06  james
622  * *** empty log message ***
623  *
624  * Revision 1.1  2008/02/03 23:36:41  james
625  * *** empty log message ***
626  *
627  */
628
629 #ifndef __VT102_H__
630 #define __VT102_H__
631
632 #define VT102_CMD_LEN 128
633
634 #define VT102_MAX_ROWS          ((CRT_ROWS) - 1)
635 #define VT102_ROWS_24           24
636 #define VT102_COLS_132          132
637 #define VT102_COLS_80           80
638 #define VT102_MAX_COLS          VT102_COLS_132
639 #define VT102_STATUS_ROW        24
640
641 #define VT102_NMODES            32
642
643
644 typedef struct {
645   int in_escape;
646   int in_cmd;
647
648   int cmd_ptr;
649   int cmd_more_bytes;
650   int cmd_termination;
651   char cmd_buf[VT102_CMD_LEN];
652 } VT102_parser;
653
654 typedef struct {
655   CRT_Pos pos;
656   int attr;
657   int color;
658   int origin_mode;
659 } VT102_State;
660
661
662 typedef struct {
663   CRT_Pos top_margin, bottom_margin;
664   CRT_Pos screen_start, screen_end;
665   VT102_parser parser;
666   int attr;
667   int color;
668   CRT crt;
669
670   int pending_wrap;
671   CRT_Pos pos, current_line;
672
673   VT102_State saved;
674
675   uint8_t modes[VT102_NMODES];
676   uint8_t private_modes[VT102_NMODES];
677
678   uint8_t tabs[VT102_COLS_132];
679
680   int application_keypad_mode;
681
682   int last_reg_char;
683   int xn_glitch;
684
685   CRT_Pos current_size;
686   CRT_Pos original_size;
687
688   int g[2];
689   int cs;
690
691 } VT102;
692
693 #define VT102_PRIVATE_MODE_CURSOR_MODE          1
694 #define VT102_PRIVATE_MODE_VT52                 2
695 #define VT102_PRIVATE_MODE_132COLS              3
696 #define VT102_PRIVATE_MODE_SMOOTH_SCROLL        4
697 #define VT102_PRIVATE_MODE_REVERSE_SCREEN       5
698 #define VT102_PRIVATE_MODE_ORIGIN_MODE          6
699 #define VT102_PRIVATE_MODE_AUTO_WRAP            7
700 #define VT102_PRIVATE_MODE_AUTO_REPEAT          8
701 #define VT102_PRIVATE_MODE_SHOW_CURSOR          25
702
703 #define VT102_MODE_KEYBOARD_DISABLE             2
704 #define VT102_MODE_INSERT                       4
705 #define VT102_MODE_LOCAL_ECHO_OFF               12
706 #define VT102_MODE_NEWLINE_MODE                 20
707
708 #endif /* __VT102_H__ */
709 /* 
710  * src/keys.h:
711  *
712  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
713  * All rights reserved.
714  *
715  */
716
717 /* 
718  * $Id: keys.h,v 1.10 2008/03/07 14:16:44 james Exp $
719  */
720
721 /* 
722  * $Log: keys.h,v $
723  * Revision 1.10  2008/03/07 14:16:44  james
724  * *** empty log message ***
725  *
726  * Revision 1.9  2008/03/07 14:13:40  james
727  * *** empty log message ***
728  *
729  * Revision 1.8  2008/03/07 12:37:04  james
730  * *** empty log message ***
731  *
732  * Revision 1.7  2008/03/06 16:49:39  james
733  * *** empty log message ***
734  *
735  * Revision 1.6  2008/03/06 01:49:19  james
736  * *** empty log message ***
737  *
738  * Revision 1.5  2008 /03 /06 01:41:48  james
739  * *** empty log message ***
740  *
741  * Revision 1.4  2008 /02 /07 00:44:07  james
742  * *** empty log message ***
743  *
744  */
745
746 #ifndef __KEYS_H__
747 #define __KEYS_H__
748
749 #define KEY_UP          128             /* A */
750 #define KEY_DOWN        129            /* B */
751 #define KEY_RIGHT       130           /* C */
752 #define KEY_LEFT        131            /* D */
753 #define KEY_MIDDLE      132          /* E */
754 #define KEY_END         133            /* F */
755 #define KEY_134         134            /* G */
756 #define KEY_HOME        135            /* H */
757 #define KEY_136         136            /* I */
758 #define KEY_137         137            /* J */
759 #define KEY_138         138            /* K */
760 #define KEY_139         139            /* L */
761 #define KEY_ENTER       140           /* M */
762 #define KEY_141         141            /* N */
763 #define KEY_142         142            /* O */
764 #define KEY_PF1         143     /* P */    /* Also F1 */
765 #define KEY_PF2         144     /* Q */    /* Also F2 */
766 #define KEY_PF3         145     /* R */    /* Also F3 */
767 #define KEY_PF4         146     /* S */    /* Also F4 */
768 #define KEY_147         147            /* T */
769 #define KEY_148         148            /* U */
770 #define KEY_149         149            /* V */
771 #define KEY_150         150            /* W */
772 #define KEY_151         151            /* X */
773 #define KEY_152         152            /* Y */
774 #define KEY_153         153            /* Z */
775 #define KEY_154         154            /* a */
776 #define KEY_155         155            /* b */
777 #define KEY_156         156            /* c */
778 #define KEY_157         157            /* d */
779 #define KEY_158         158            /* e */
780 #define KEY_159         159            /* f */
781 #define KEY_160         160            /* g */
782 #define KEY_161         161            /* h */
783 #define KEY_162         162            /* i */
784 #define KEY_STAR        163            /* j */
785 #define KEY_PLUS        164            /* k */
786 #define KEY_COMMA       165           /* l */
787 #define KEY_MINUS       166           /* m */
788 #define KEY_PERIOD      167          /* n */
789 #define KEY_DIVIDE      168          /* o */
790 #define KEY_0           169              /* p */
791 #define KEY_1           170              /* q */
792 #define KEY_2           171              /* r */
793 #define KEY_3           172              /* s */
794 #define KEY_4           173              /* t */
795 #define KEY_5           174              /* u */
796 #define KEY_6           175              /* v */
797 #define KEY_7           176              /* w */
798 #define KEY_8           177              /* x */
799 #define KEY_9           178              /* y */
800 #define KEY_179         179            /* z */
801 #define KEY_180         180            /* 0 */
802 #define KEY_VT220_HOME  181      /* 1 */
803 #define KEY_INSERT      182          /* 2 */
804 #define KEY_DELETE      183          /* 3 */
805 #define KEY_VT220_END   184       /* 4 */
806 #define KEY_PGUP        185            /* 5 */
807 #define KEY_PGDN        186            /* 6 */
808 #define KEY_187         187            /* 7 */
809 #define KEY_188         188            /* 8 */
810 #define KEY_189         189            /* 9 */
811 #define KEY_190         190            /* 10 */
812 #define KEY_F1          191             /* 11 */
813 #define KEY_F2          192             /* 12 */
814 #define KEY_F3          193             /* 13 */
815 #define KEY_F4          194             /* 14 */
816 #define KEY_F5          195             /* 15 */
817 #define KEY_196         196            /* 16 */
818 #define KEY_F6          197             /* 17 */
819 #define KEY_F7          198             /* 18 */
820 #define KEY_F8          199             /* 19 */
821 #define KEY_F9          200             /* 20 */
822 #define KEY_F10         201            /* 21 */
823 #define KEY_202         202            /* 22 */
824 #define KEY_F11         203            /* 23 */
825 #define KEY_F12         204            /* 24 */
826 #define KEY_F13         205            /* 25 */
827 #define KEY_F14         206            /* 26 */
828 #define KEY_207         207            /* 27 */
829 #define KEY_F15         208            /* 28 */
830 #define KEY_F16         209            /* 29 */
831 #define KEY_210         210            /* 30 */
832 #define KEY_F17         211            /* 31 */
833 #define KEY_F18         212            /* 32 */
834 #define KEY_F19         213            /* 33 */
835 #define KEY_F20         214            /* 34 */
836 #define KEY_NUM         215
837 #endif /* __KEYS_H__ */
838 /* 
839  * history.h:
840  *
841  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
842  * All rights reserved.
843  *
844  */
845
846 /* 
847  * $Id: history.h,v 1.7 2008/03/10 11:49:33 james Exp $
848  */
849
850 /* 
851  * $Log: history.h,v $
852  * Revision 1.7  2008/03/10 11:49:33  james
853  * *** empty log message ***
854  *
855  * Revision 1.6  2008/03/07 12:37:04  james
856  * *** empty log message ***
857  *
858  * Revision 1.5  2008/03/03 06:04:42  james
859  * *** empty log message ***
860  *
861  * Revision 1.4  2008/03/02 10:37:56  james
862  * *** empty log message ***
863  *
864  * Revision 1.3  2008/02/13 16:57:29  james
865  * *** empty log message ***
866  *
867  * Revision 1.2  2008/02/12 22:36:46  james
868  * *** empty log message ***
869  *
870  * Revision 1.1  2008/02/08 15:06:42  james
871  * *** empty log message ***
872  *
873  */
874
875 #ifndef __HISTORY_H__
876 #define __HISTORY_H__
877
878 typedef struct {
879   int valid;
880   time_t t;
881   CRT_CA line[CRT_COLS];
882 } History_ent;
883
884 typedef struct {
885   History_ent *lines;
886   int nlines;
887   int wptr;
888 } History;
889
890 #define HISTORY_INC(h,a) do { (a)++; if ((a)==((h)->nlines)) { (a)=0; }; } while (0)
891
892 #endif /* __HISTORY_H__ */
893 /* 
894  * ring.h:
895  *
896  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
897  * All rights reserved.
898  *
899  */
900
901 /* 
902  * $Id: ring.h,v 1.6 2008/03/10 11:49:33 james Exp $
903  */
904
905 /* 
906  * $Log: ring.h,v $
907  * Revision 1.6  2008/03/10 11:49:33  james
908  * *** empty log message ***
909  *
910  * Revision 1.5  2008/03/07 12:37:04  james
911  * *** empty log message ***
912  *
913  * Revision 1.4  2008/03/03 06:04:42  james
914  * *** empty log message ***
915  *
916  * Revision 1.3  2008/03/02 10:37:56  james
917  * *** empty log message ***
918  *
919  * Revision 1.2  2008/02/12 22:36:46  james
920  * *** empty log message ***
921  *
922  * Revision 1.1  2008/02/08 15:06:42  james
923  * *** empty log message ***
924  *
925  */
926
927 #ifndef __RING_H__
928 #define __RING_H__
929
930 typedef struct {
931   uint8_t *ring;
932   int wptr;
933   int rptr;
934   int size;
935 } Ring;
936
937 #define RING_NEXT(r,a) (((a)+1) % ((r)->size))
938 #define RING_NEXT_R(r) RING_NEXT(r,r->rptr)
939 #define RING_NEXT_W(r) RING_NEXT(r,r->wptr)
940
941 #define RING_EMPTY(r) (((r)->wptr) == ((r)->rptr))
942 #define RING_FULL(r) (RING_NEXT_W(r) == ((r)->rptr))
943
944 static inline int
945 ring_write_one (Ring * r, uint8_t * c)
946 {
947   if (RING_FULL (r))
948     return 0;
949
950   r->ring[r->wptr++] = *c;
951
952   if (r->wptr == r->size)
953     r->wptr = 0;
954
955   return 1;
956 }
957
958 static inline int
959 ring_read_one (Ring * r, uint8_t * c)
960 {
961   if (RING_EMPTY (r))
962     return 0;
963
964   *c = r->ring[r->rptr++];
965
966   if (r->rptr == r->size)
967     r->rptr = 0;
968
969   return 1;
970 }
971
972
973
974 #endif /* __RING_H__ */
975 /* 
976  * ring.h:
977  *
978  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
979  * All rights reserved.
980  *
981  */
982
983 /* 
984  * $Id: slide.h,v 1.5 2008/03/10 11:49:33 james Exp $
985  */
986
987 /* 
988  * $Log: slide.h,v $
989  * Revision 1.5  2008/03/10 11:49:33  james
990  * *** empty log message ***
991  *
992  * Revision 1.4  2008/03/07 12:37:04  james
993  * *** empty log message ***
994  *
995  * Revision 1.3  2008/03/03 06:04:42  james
996  * *** empty log message ***
997  *
998  * Revision 1.2  2008/03/02 10:37:56  james
999  * *** empty log message ***
1000  *
1001  * Revision 1.1  2008/02/13 16:57:29  james
1002  * *** empty log message ***
1003  *
1004  * Revision 1.2  2008/02/12 22:36:46  james
1005  * *** empty log message ***
1006  *
1007  * Revision 1.1  2008/02/08 15:06:42  james
1008  * *** empty log message ***
1009  *
1010  */
1011
1012 #ifndef __SLIDE_H__
1013 #define __SLIDE_H__
1014
1015 typedef struct {
1016   uint8_t *slide;
1017   int nbytes;
1018   int target_size;
1019   int size;
1020 } Slide;
1021
1022 #define SLIDE_FULL(s) ((s)->nbytes==(s)->size)
1023 #define SLIDE_EMPTY(s) (!((s)->nbytes))
1024 #define SLIDE_SPACE(s) (((s)->size)-((s)->nbytes))
1025 #define SLIDE_BYTES(s) ((s)->nbytes)
1026 #define SLIDE_RPTR(s) ((s)->slide)
1027 #define SLIDE_WPTR(s) (((s)->slide)+((s)->nbytes))
1028
1029 #endif /* __SLIDE_H__ */
1030 /* 
1031  * log.h:
1032  *
1033  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
1034  * All rights reserved.
1035  *
1036  */
1037
1038 /* 
1039  * $Id: log.h,v 1.7 2010/07/27 14:49:35 james Exp $
1040  */
1041
1042 /* 
1043  * $Log: log.h,v $
1044  * Revision 1.7  2010/07/27 14:49:35  james
1045  * add support for byte logging
1046  *
1047  * Revision 1.6  2008/03/10 11:49:33  james
1048  * *** empty log message ***
1049  *
1050  * Revision 1.5  2008/03/07 12:37:04  james
1051  * *** empty log message ***
1052  *
1053  * Revision 1.4  2008/03/03 06:04:42  james
1054  * *** empty log message ***
1055  *
1056  * Revision 1.3  2008/03/02 10:37:56  james
1057  * *** empty log message ***
1058  *
1059  * Revision 1.2  2008/02/23 11:48:37  james
1060  * *** empty log message ***
1061  *
1062  * Revision 1.1  2008/02/14 12:14:50  james
1063  * *** empty log message ***
1064  *
1065  */
1066
1067 #ifndef __LOG_H__
1068 #define __LOG_H__
1069
1070 #define LOG_SIGNATURE \
1071         struct Log_struct *next; \
1072         void (*log)(struct Log_struct *,char *); \
1073         void (*log_bytes)(struct Log_struct *,void *,int); \
1074         void (*sighup)(struct Log_struct *); \
1075         void (*close)(struct Log_struct *)
1076
1077 typedef struct Log_struct {
1078   LOG_SIGNATURE;
1079 } Log;
1080
1081
1082 #endif /* __LOG_H__ */
1083 /* 
1084  * ipc.h:
1085  *
1086  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
1087  * All rights reserved.
1088  *
1089  */
1090
1091 /* 
1092  * $Id: ipc.h,v 1.12 2008/03/10 11:49:33 james Exp $
1093  */
1094
1095 /* 
1096  * $Log: ipc.h,v $
1097  * Revision 1.12  2008/03/10 11:49:33  james
1098  * *** empty log message ***
1099  *
1100  * Revision 1.11  2008/03/07 14:13:40  james
1101  * *** empty log message ***
1102  *
1103  * Revision 1.10  2008/03/07 13:16:02  james
1104  * *** empty log message ***
1105  *
1106  * Revision 1.9  2008/03/07 12:37:04  james
1107  * *** empty log message ***
1108  *
1109  * Revision 1.8  2008/03/03 06:04:42  james
1110  * *** empty log message ***
1111  *
1112  * Revision 1.7  2008/03/02 10:37:56  james
1113  * *** empty log message ***
1114  *
1115  * Revision 1.6  2008/02/28 11:27:48  james
1116  * *** empty log message ***
1117  *
1118  * Revision 1.5  2008/02/23 11:48:37  james
1119  * *** empty log message ***
1120  *
1121  * Revision 1.4  2008/02/22 17:07:00  james
1122  * *** empty log message ***
1123  *
1124  * Revision 1.3  2008/02/15 23:52:12  james
1125  * *** empty log message ***
1126  *
1127  * Revision 1.2  2008/02/15 03:32:07  james
1128  * *** empty log message ***
1129  *
1130  * Revision 1.1  2008/02/14 12:17:42  james
1131  * *** empty log message ***
1132  *
1133  */
1134
1135 #ifndef __IPC_H__
1136 #define __IPC_H__
1137
1138 #define IPC_MAX_BUF 1024
1139
1140 #define IPC_MSG_TYPE_NOOP  0
1141 #define IPC_MSG_TYPE_DEBUG 1
1142 #define IPC_MSG_TYPE_INITIALIZE 2
1143 #define IPC_MSG_TYPE_VT102 3
1144 #define IPC_MSG_TYPE_HISTORY 4
1145 #define IPC_MSG_TYPE_KEY 5
1146 #define IPC_MSG_TYPE_TERM 6
1147 #define IPC_MSG_TYPE_STATUS 7
1148 #define IPC_MSG_TYPE_SETBAUD 8
1149 #define IPC_MSG_TYPE_SENDBREAK 9
1150 #define IPC_MSG_TYPE_SETFLOW 10
1151 #define IPC_MSG_TYPE_SETANSI 11
1152 #define IPC_MSG_TYPE_HANGUP 12
1153 #define IPC_MSG_TYPE_SETSIZE 13
1154 #define IPC_MSG_TYPE_RESET 14
1155 #define IPC_MSG_TYPE_KILLME 15
1156
1157 typedef struct {
1158   int32_t size;
1159   int32_t type;
1160   uint8_t payload[0];
1161 } IPC_Msg_hdr;
1162
1163
1164 typedef struct {
1165   int32_t size;
1166   int32_t type;
1167 } IPC_Msg_noop;
1168
1169
1170 typedef struct {
1171   int32_t size;
1172   int32_t type;
1173   char msg[0];
1174 } IPC_Msg_debug;
1175
1176 typedef struct {
1177   int32_t size;
1178   int32_t type;
1179   char msg[0];
1180 } IPC_Msg_initialize;
1181
1182 typedef struct {
1183   int32_t size;
1184   int32_t type;
1185   History_ent history;
1186 } IPC_Msg_history;
1187
1188 typedef struct {
1189   int32_t size;
1190   int32_t type;
1191   int32_t len;
1192   VT102 vt102;
1193 } IPC_Msg_VT102;
1194
1195
1196 typedef struct {
1197   int32_t size;
1198   int32_t type;
1199   int32_t key;
1200 } IPC_Msg_key;
1201
1202 typedef struct {
1203   int32_t size;
1204   int32_t type;
1205   int32_t len;
1206   uint8_t term[0];
1207 } IPC_Msg_term;
1208
1209
1210 typedef struct {
1211   int32_t size;
1212   int32_t type;
1213   char status[0];
1214 } IPC_Msg_status;
1215
1216 typedef struct {
1217   int32_t size;
1218   int32_t type;
1219   int32_t baud;
1220 } IPC_Msg_setbaud;
1221
1222
1223 typedef struct {
1224   int32_t size;
1225   int32_t type;
1226 } IPC_Msg_sendbreak;
1227
1228
1229 typedef struct {
1230   int32_t size;
1231   int32_t type;
1232   int32_t flow;
1233 } IPC_Msg_setflow;
1234
1235
1236 typedef struct {
1237   int32_t size;
1238   int32_t type;
1239   int32_t ansi;
1240 } IPC_Msg_setansi;
1241
1242
1243 typedef struct {
1244   int32_t size;
1245   int32_t type;
1246 } IPC_Msg_hangup;
1247
1248
1249 typedef struct {
1250   int32_t size;
1251   int32_t type;
1252   CRT_Pos winsize;
1253 } IPC_Msg_setsize;
1254
1255
1256 typedef struct {
1257   int32_t size;
1258   int32_t type;
1259 } IPC_Msg_reset;
1260
1261
1262 typedef struct {
1263   int32_t size;
1264   int32_t type;
1265 } IPC_Msg_killme;
1266
1267
1268
1269 typedef union {
1270   IPC_Msg_hdr hdr;
1271   IPC_Msg_noop noop;
1272   IPC_Msg_debug debug;
1273   IPC_Msg_initialize initialize;
1274   IPC_Msg_history history;
1275   IPC_Msg_VT102 vt102;
1276   IPC_Msg_key key;
1277   IPC_Msg_term term;
1278   IPC_Msg_status status;
1279   IPC_Msg_setbaud setbaud;
1280   IPC_Msg_sendbreak sendbreak;
1281   IPC_Msg_setflow setflow;
1282   IPC_Msg_setansi setansi;
1283   IPC_Msg_hangup hangup;
1284   IPC_Msg_setsize setsize;
1285   IPC_Msg_reset reset;
1286   IPC_Msg_killme killme;
1287 } IPC_Msg;
1288
1289
1290
1291 #endif /* __IPC_H__ */
1292 /* 
1293  * symsocket.h:
1294  *
1295  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
1296  * All rights reserved.
1297  *
1298  */
1299
1300 /* 
1301  * $Id: symsocket.h,v 1.6 2008/03/10 11:49:33 james Exp $
1302  */
1303
1304 /* 
1305  * $Log: symsocket.h,v $
1306  * Revision 1.6  2008/03/10 11:49:33  james
1307  * *** empty log message ***
1308  *
1309  * Revision 1.5  2008/03/07 12:37:04  james
1310  * *** empty log message ***
1311  *
1312  * Revision 1.4  2008/03/03 06:04:42  james
1313  * *** empty log message ***
1314  *
1315  * Revision 1.3  2008/03/02 10:37:56  james
1316  * *** empty log message ***
1317  *
1318  * Revision 1.2  2008/02/20 18:31:53  james
1319  * *** empty log message ***
1320  *
1321  * Revision 1.1  2008/02/13 18:05:06  james
1322  * *** empty log message ***
1323  *
1324  */
1325
1326 #ifndef __SYMSOCKET_H__
1327 #define __SYMSOCKET_H__
1328
1329 typedef struct {
1330   int fd;
1331
1332   Slide *read_buf;
1333   Slide *write_buf;
1334
1335   IPC_Msg *msg;
1336
1337   char *path_to_unlink;
1338
1339 } Socket;
1340
1341 #define SOCKET_IS_LISTENER(s) (!((s)->read_buf))
1342
1343 #endif /* __SYMSOCKET_H__ */
1344 /* 
1345  * keydis.h:
1346  *
1347  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
1348  * All rights reserved.
1349  *
1350  */
1351
1352 /* 
1353  * $Id: keydis.h,v 1.10 2008/03/10 11:49:33 james Exp $
1354  */
1355
1356 /* 
1357  * $Log: keydis.h,v $
1358  * Revision 1.10  2008/03/10 11:49:33  james
1359  * *** empty log message ***
1360  *
1361  * Revision 1.9  2008/03/07 12:37:04  james
1362  * *** empty log message ***
1363  *
1364  * Revision 1.8  2008/03/03 06:04:42  james
1365  * *** empty log message ***
1366  *
1367  * Revision 1.7  2008/03/02 10:37:56  james
1368  * *** empty log message ***
1369  *
1370  * Revision 1.6  2008/02/28 11:27:48  james
1371  * *** empty log message ***
1372  *
1373  * Revision 1.5  2008/02/23 11:48:37  james
1374  * *** empty log message ***
1375  *
1376  * Revision 1.4  2008/02/22 17:07:00  james
1377  * *** empty log message ***
1378  *
1379  * Revision 1.3  2008/02/15 23:52:12  james
1380  * *** empty log message ***
1381  *
1382  * Revision 1.2  2008/02/15 03:32:07  james
1383  * *** empty log message ***
1384  *
1385  * Revision 1.1  2008/02/14 02:46:44  james
1386  * *** empty log message ***
1387  *
1388  * Revision 1.1  2008/02/14 01:55:57  james
1389  * *** empty log message ***
1390  *
1391  */
1392
1393 #ifndef __KEYDIS_H__
1394 #define __KEYDIS_H__
1395
1396
1397 struct Context_struct;
1398
1399 #define KEYDIS_SIGNATURE \
1400         void (*close)(struct KeyDis_struct *); \
1401         int (*key)(struct KeyDis_struct *,struct Context_struct *,int key); \
1402         int (*set_baud)(struct KeyDis_struct *,struct Context_struct *,int rate); \
1403         int (*send_break)(struct KeyDis_struct *,struct Context_struct *); \
1404         int (*set_flow)(struct KeyDis_struct *,struct Context_struct *,int flow); \
1405         int (*set_ansi)(struct KeyDis_struct *,struct Context_struct *,int ansi); \
1406         int (*hangup)(struct KeyDis_struct *,struct Context_struct *); \
1407         int (*reset)(struct KeyDis_struct *,struct Context_struct *); \
1408         int (*set_size)(struct KeyDis_struct *,struct Context_struct *,int width, int height)
1409
1410
1411
1412 typedef struct KeyDis_struct {
1413   KEYDIS_SIGNATURE;
1414 } KeyDis;
1415
1416
1417 #endif /* __KEYDIS_H__ */
1418 /* 
1419  * cmd.h:
1420  *
1421  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
1422  * All rights reserved.
1423  *
1424  */
1425
1426 /* 
1427  * $Id: cmd.h,v 1.8 2008/03/10 11:49:32 james Exp $
1428  */
1429
1430 /* 
1431  * $Log: cmd.h,v $
1432  * Revision 1.8  2008/03/10 11:49:32  james
1433  * *** empty log message ***
1434  *
1435  * Revision 1.7  2008/03/07 12:37:04  james
1436  * *** empty log message ***
1437  *
1438  * Revision 1.6  2008/03/03 06:04:42  james
1439  * *** empty log message ***
1440  *
1441  * Revision 1.5  2008/03/02 12:30:54  staffcvs
1442  * *** empty log message ***
1443  *
1444  * Revision 1.4  2008/03/02 10:37:56  james
1445  * *** empty log message ***
1446  *
1447  * Revision 1.3  2008/02/28 11:27:48  james
1448  * *** empty log message ***
1449  *
1450  * Revision 1.2  2008/02/23 11:48:37  james
1451  * *** empty log message ***
1452  *
1453  * Revision 1.1  2008/02/15 15:14:19  james
1454  * *** empty log message ***
1455  *
1456  */
1457
1458 #ifndef __CMD_H__
1459 #define __CMD_H__
1460
1461 #define CMD_KEY 2               /* CTRL B */
1462 #define CMD_CANCEL_KEY 3        /* CTRL C */
1463
1464 typedef struct {
1465   int active;
1466   int error;
1467   int disconnect;
1468   char csl[128];
1469   char buf[128];
1470   int ptr;
1471 } Cmd;
1472
1473 #endif /* __CMD_H__ */
1474 /* 
1475  * lockfile.h:
1476  *
1477  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
1478  * All rights reserved.
1479  *
1480  */
1481
1482 /* 
1483  * $Id: lockfile.h,v 1.11 2008/03/10 11:49:33 james Exp $
1484  */
1485
1486 /* 
1487  * $Log: lockfile.h,v $
1488  * Revision 1.11  2008/03/10 11:49:33  james
1489  * *** empty log message ***
1490  *
1491  * Revision 1.10  2008/03/07 12:37:04  james
1492  * *** empty log message ***
1493  *
1494  * Revision 1.9  2008/03/03 06:04:42  james
1495  * *** empty log message ***
1496  *
1497  * Revision 1.8  2008/03/02 10:37:56  james
1498  * *** empty log message ***
1499  *
1500  * Revision 1.7  2008/02/23 11:48:37  james
1501  * *** empty log message ***
1502  *
1503  * Revision 1.6  2008/02/15 23:52:12  james
1504  * *** empty log message ***
1505  *
1506  * Revision 1.5  2008/02/15 20:52:36  james
1507  * *** empty log message ***
1508  *
1509  * Revision 1.4  2008/02/15 19:51:30  james
1510  * *** empty log message ***
1511  *
1512  * Revision 1.3  2008/02/15 18:16:36  james
1513  * *** empty log message ***
1514  *
1515  * Revision 1.2  2008/02/15 16:48:56  james
1516  * *** empty log message ***
1517  *
1518  * Revision 1.1  2008/02/15 15:09:17  james
1519  * *** empty log message ***
1520  *
1521  */
1522
1523 #ifndef __LOCKFILE_H__
1524 #define __LOCKFILE_H__
1525
1526 #define SERIAL_LOCK_PASSIVE 0
1527 #define SERIAL_LOCK_ACTIVE  1
1528
1529 #define FILE_LIST_MAX_LEN 1024
1530
1531 typedef struct Filelist_ent {
1532   char name[FILE_LIST_MAX_LEN];
1533   struct Filelist_ent *next;
1534 } Filelist_ent;
1535
1536 typedef struct {
1537   Filelist_ent *head;
1538 } Filelist;
1539
1540
1541 typedef struct {
1542   int mode;
1543   int i;
1544   struct timeval last_stale_purge;
1545   Filelist *locks_to_check;
1546   Filelist *locks_held;
1547 } Serial_lock;
1548
1549
1550
1551 #endif /* __LOCKFILE_H__ */
1552 /* 
1553  * rx.h:
1554  *
1555  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
1556  * All rights reserved.
1557  *
1558  */
1559
1560 /* 
1561  * $Id: rx.h,v 1.5 2008/03/10 11:49:33 james Exp $
1562  */
1563
1564 /* 
1565  * $Log: rx.h,v $
1566  * Revision 1.5  2008/03/10 11:49:33  james
1567  * *** empty log message ***
1568  *
1569  * Revision 1.4  2008/03/07 12:37:04  james
1570  * *** empty log message ***
1571  *
1572  * Revision 1.3  2008/03/06 16:49:39  james
1573  * *** empty log message ***
1574  *
1575  * Revision 1.2  2008/03/06 16:49:05  james
1576  * *** empty log message ***
1577  *
1578  * Revision 1.1  2008/03/06 15:17:26  james
1579  * *** empty log message ***
1580  *
1581  *
1582  */
1583
1584 #ifndef __RX_H__
1585 #define __RX_H__
1586 #define RX_SIGNATURE \
1587   int (*rx)(struct RX_struct *,int); \
1588   void (*close)(struct RX_struct *);
1589
1590
1591 typedef struct RX_struct {
1592   RX_SIGNATURE;
1593 } RX;
1594
1595
1596 #endif /* __RX_H__ */
1597 /* 
1598  * context.h:
1599  *
1600  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
1601  * All rights reserved.
1602  *
1603  */
1604
1605 /* 
1606  * $Id: context.h,v 1.14 2010/07/27 14:49:35 james Exp $
1607  */
1608
1609 /* 
1610  * $Log: context.h,v $
1611  * Revision 1.14  2010/07/27 14:49:35  james
1612  * add support for byte logging
1613  *
1614  * Revision 1.13  2008/03/10 11:49:32  james
1615  * *** empty log message ***
1616  *
1617  * Revision 1.12  2008/03/07 12:37:04  james
1618  * *** empty log message ***
1619  *
1620  * Revision 1.11  2008/03/06 16:49:05  james
1621  * *** empty log message ***
1622  *
1623  * Revision 1.10  2008/03/03 06:04:42  james
1624  * *** empty log message ***
1625  *
1626  * Revision 1.9  2008/03/02 10:37:56  james
1627  * *** empty log message ***
1628  *
1629  * Revision 1.8  2008/02/23 11:48:37  james
1630  * *** empty log message ***
1631  *
1632  * Revision 1.7  2008/02/22 23:39:27  james
1633  * *** empty log message ***
1634  *
1635  * Revision 1.6  2008/02/15 03:32:07  james
1636  * *** empty log message ***
1637  *
1638  * Revision 1.5  2008/02/14 02:46:44  james
1639  * *** empty log message ***
1640  *
1641  * Revision 1.4  2008/02/14 01:55:57  james
1642  * *** empty log message ***
1643  *
1644  * Revision 1.3  2008/02/13 09:12:21  james
1645  * *** empty log message ***
1646  *
1647  * Revision 1.2  2008/02/12 22:36:46  james
1648  * *** empty log message ***
1649  *
1650  * Revision 1.1  2008/02/09 15:47:28  james
1651  * *** empty log message ***
1652  *
1653  */
1654
1655 #ifndef __CONTEXT_H__
1656 #define __CONTEXT_H__
1657
1658 typedef struct Context_struct {
1659   VT102 *v;
1660   TTY *t;
1661   TTY_Parser *tp;
1662   History *h;
1663   Log *l;
1664   KeyDis *k;
1665   Cmd *d;
1666   UTF8 *u;
1667   RX *r;
1668   int byte_logging;
1669 } Context;
1670
1671 #endif /* __CONTEXT_H__ */
1672 /* 
1673  * vt102_charset.h:
1674  *
1675  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
1676  * All rights reserved.
1677  *
1678  */
1679
1680 /* 
1681  * $Id: vt102_charset.h,v 1.2 2008/03/07 12:37:04 james Exp $
1682  */
1683
1684 /* 
1685  * $Log: vt102_charset.h,v $
1686  * Revision 1.2  2008/03/07 12:37:04  james
1687  * *** empty log message ***
1688  *
1689  * Revision 1.1  2008/02/27 01:32:41  james
1690  * *** empty log message ***
1691  *
1692  */
1693
1694 #ifndef __VT102_CHARSET_H__
1695 #define __VT102_CHARSET_H__
1696
1697 #define VT102_CHARSET_SIZE 128
1698
1699 #define VT102_CSID_US   0
1700 #define VT102_CSID_UK   1
1701 #define VT102_CSID_GL   2
1702 #define VT102_CSID_VT52 3
1703
1704 #endif /* __VT102_CHARSET_H__ */
1705 /* ansi.c */
1706 extern ANSI *ansi_new_from_terminal (TTY * t, int utf8);
1707 /* crt.c */
1708 extern void crt_erase (CRT * c, CRT_Pos s, CRT_Pos e, int ea, int color);
1709 extern void crt_cls (CRT * c);
1710 extern void crt_scroll_up (CRT * c, CRT_Pos s, CRT_Pos e, int ea, int color);
1711 extern void crt_scroll_down (CRT * c, CRT_Pos s, CRT_Pos e, int ea,
1712                              int color);
1713 extern void crt_reset (CRT * c);
1714 extern void crt_insert (CRT * c, CRT_CA ca);
1715 /* html.c */
1716 extern ANSI *ansi_new_html (FILE * f);
1717 /* libsympathy.c */
1718 /* render.c */
1719 /* version.c */
1720 extern char *libsympathy_version (void);
1721 /* vt102.c */
1722 extern int vt102_cmd_length[128];
1723 extern int vt102_cmd_termination[128];
1724 extern void vt102_crt_update (Context * c);
1725 extern void vt102_do_resize (Context * c);
1726 extern void vt102_log_line (Context * c, int line);
1727 extern void vt102_history (Context * c, CRT_Pos t, CRT_Pos b);
1728 extern void vt102_clip_cursor (VT102 * v, CRT_Pos tl, CRT_Pos br);
1729 extern void vt102_cursor_normalize (VT102 * v);
1730 extern void vt102_cursor_carriage_return (VT102 * v);
1731 extern void vt102_cursor_advance_line (Context * c);
1732 extern void vt102_cursor_retreat_line (Context * c);
1733 extern void vt102_do_pending_wrap (Context * c);
1734 extern void vt102_cursor_advance (Context * c);
1735 extern void vt102_cursor_retreat (VT102 * v);
1736 extern void vt102_reset_tabs (VT102 * v);
1737 extern void vt102_cursor_advance_tab (VT102 * v);
1738 extern void vt102_cursor_retreat_tab (VT102 * v);
1739 extern int vt102_cursor_home (VT102 * v);
1740 extern int vt102_cursor_absolute (VT102 * v, int x, int y);
1741 extern int vt102_cursor_relative (VT102 * v, int x, int y);
1742 extern void vt102_delete_from_line (VT102 * v, CRT_Pos p);
1743 extern void vt102_insert_into_line (VT102 * v, CRT_Pos p);
1744 extern void vt102_change_mode (Context * c, int private, char *ns, int set);
1745 extern void vt102_parse_mode_string (Context * c, char *buf, int len);
1746 extern void vt102_change_attr (VT102 * v, char *na);
1747 extern void vt102_parse_attr_string (VT102 * v, char *buf, int len);
1748 extern void vt102_save_state (VT102 * v);
1749 extern void vt102_restore_state (VT102 * v);
1750 extern void vt102_regular_char (Context * c, VT102 * v, uint32_t ch);
1751 extern int vt102_send_id (Context * c, char *buf);
1752 extern void vt102_scs (Context * c, int g, int s);
1753 extern void vt102_status_line (VT102 * v, char *str);
1754 extern void vt102_parser_reset (VT102_parser * p);
1755 extern void vt102_reset_state (Context * c);
1756 extern int vt102_rx_hook (Context * c, int ch);
1757 extern int vt102_parse_char (Context * c, int ch);
1758 extern void vt102_send (Context * c, uint8_t key);
1759 extern void vt102_reset (Context * c);
1760 extern VT102 *vt102_new (CRT_Pos * size);
1761 extern void vt102_set_ansi (VT102 * v, int ansi);
1762 extern void vt102_resize (Context * c, CRT_Pos size);
1763 extern void vt102_free (VT102 * v);
1764 /* tty.c */
1765 extern void tty_pre_select (TTY * t, fd_set * rfds, fd_set * wfds);
1766 extern int tty_get_status (TTY * t, TTY_Status * s);
1767 extern int tty_get_baud (TTY * t);
1768 extern void tty_set_baud (TTY * t, int rate);
1769 extern void tty_send_break (TTY * t);
1770 extern void tty_set_flow (TTY * t, int flow);
1771 extern void tty_hangup (TTY * t);
1772 extern void tty_length (TTY * t, int l);
1773 extern void tty_winch (TTY * t, CRT_Pos size);
1774 extern void tty_parse_reset (Context * c);
1775 extern void tty_analyse (Context * c);
1776 extern TTY_Parser *tty_parser_new (void);
1777 extern int tty_parse (Context * c, uint8_t * buf, int len);
1778 /* keydis.c */
1779 extern KeyDis *keydis_vt102_new (void);
1780 extern KeyDis *keydis_ipc_new (Socket * s);
1781 /* history.c */
1782 extern History *history_new (int n);
1783 extern void history_free (History * h);
1784 extern void history_add (History * h, CRT_CA * c);
1785 /* ring.c */
1786 extern int ring_read (Ring * r, void *b, int n);
1787 extern int ring_write (Ring * r, void *b, int n);
1788 extern int ring_space (Ring * r);
1789 extern int ring_bytes (Ring * r);
1790 extern Ring *ring_new (int n);
1791 /* ptty.c */
1792 extern TTY *ptty_open (char *path, char *argv[], CRT_Pos * size);
1793 /* terminal.c */
1794 extern int terminal_winches;
1795 extern void terminal_atexit (void);
1796 extern void terminal_getsize (TTY * _t);
1797 extern void terminal_dispatch (void);
1798 extern void terminal_register_handlers (void);
1799 extern TTY *terminal_open (int rfd, int wfd);
1800 /* util.c */
1801 extern int wrap_read (int fd, void *buf, int len);
1802 extern int wrap_write (int fd, void *buf, int len);
1803 extern void set_nonblocking (int fd);
1804 extern void set_blocking (int fd);
1805 extern void default_termios (struct termios *termios);
1806 extern void client_termios (struct termios *termios);
1807 extern int fput_cp (FILE * f, uint32_t ch);
1808 extern void crash_out (char *why);
1809 extern void *xmalloc (size_t s);
1810 extern void *xrealloc (void *p, size_t s);
1811 extern char *xstrdup (const char *s);
1812 /* log.c */
1813 extern Log *file_log_new (char *fn, int rotate);
1814 extern void log_f (Log * log, char *fmt, ...);
1815 /* ipc.c */
1816 extern IPC_Msg *ipc_check_for_message_in_slide (Slide * s);
1817 extern void ipc_consume_message_in_slide (Slide * s);
1818 extern int ipc_msg_send (Socket * s, IPC_Msg * m);
1819 extern int ipc_msg_send_debug (Socket * s, char *msg);
1820 extern int ipc_msg_send_initialize (Socket * s);
1821 extern int ipc_msg_send_history (Socket * s, History_ent * l);
1822 extern int ipc_msg_send_vt102 (Socket * s, VT102 * v);
1823 extern int ipc_msg_send_key (Socket * s, int key);
1824 extern int ipc_msg_send_term (Socket * s, void *buf, int len);
1825 extern int ipc_msg_send_status (Socket * s, char *buf);
1826 extern int ipc_msg_send_setbaud (Socket * s, int baud);
1827 extern int ipc_msg_send_sendbreak (Socket * s);
1828 extern int ipc_msg_send_setflow (Socket * s, int flow);
1829 extern int ipc_msg_send_setansi (Socket * s, int ansi);
1830 extern int ipc_msg_send_hangup (Socket * s);
1831 extern int ipc_msg_send_setsize (Socket * s, CRT_Pos size);
1832 extern int ipc_msg_send_reset (Socket * s);
1833 /* slide.c */
1834 extern void slide_free (Slide * s);
1835 extern void slide_consume (Slide * s, int n);
1836 extern void slide_added (Slide * s, int n);
1837 extern Slide *slide_new (int n);
1838 extern void slide_expand (Slide * s, int n);
1839 /* symsocket.c */
1840 extern int wrap_recv (int fd, void *buf, int len);
1841 extern int wrap_send (int fd, void *buf, int len);
1842 extern void socket_free (Socket * s);
1843 extern void socket_free_parent (Socket * s);
1844 extern Socket *socket_listen (char *path);
1845 extern Socket *socket_accept (Socket * l);
1846 extern Socket *socket_connect (char *path);
1847 extern void socket_consume_msg (Socket * s);
1848 extern void socket_pre_select (Socket * s, fd_set * rfds, fd_set * wfds);
1849 extern int socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds);
1850 extern int socket_write (Socket * s, void *buf, int len);
1851 /* serial.c */
1852 extern TTY *serial_open (char *path, int lock_mode);
1853 /* cmd.c */
1854 extern int cmd_parse (Cmd * c, Context * ctx, ANSI * a, char *buf);
1855 extern void cmd_show_status (Cmd * c, Context * ctx);
1856 extern int cmd_key (Cmd * c, Context * ctx, ANSI * a, int key);
1857 extern int cmd_deactivate (Cmd * c, Context * ctx);
1858 extern int cmd_activate (Cmd * c, Context * ctx);
1859 extern void cmd_new_status (Cmd * c, Context * ctx, char *msg);
1860 extern Cmd *cmd_new (void);
1861 /* lockfile.c */
1862 extern Filelist *filelist_new (void);
1863 extern void filelist_remove (Filelist * fl, Filelist_ent * fle);
1864 extern void filelist_add (Filelist * fl, char *fn);
1865 extern void filelist_free (Filelist * fl);
1866 extern void filelist_print (Filelist * fl, FILE * f);
1867 extern int lockfile_make (char *name);
1868 extern void lockfile_add_places (Filelist * fl, char *leaf);
1869 extern void lockfile_regularize_and_add (Filelist * fl, char *leaf);
1870 extern void lockfile_add_name_from_path (Filelist * fl, char *file);
1871 extern void lockfile_add_name_from_dev (Filelist * fl, dev_t dev);
1872 extern void lockfile_check_dir_for_dev (Filelist * fl, char *dir, dev_t dev);
1873 extern Filelist *lockfile_make_list (char *device);
1874 extern void lockfile_remove_stale (Filelist * fl);
1875 extern Filelist *lockfile_lock (Filelist * fl);
1876 extern void lockfile_unlock (Filelist * fl);
1877 extern int serial_lock_check (Serial_lock * l);
1878 extern void serial_lock_free (Serial_lock * l);
1879 extern Serial_lock *serial_lock_new (char *dev, int mode);
1880 /* utf8.c */
1881 extern int utf8_flush (Context * c);
1882 extern int utf8_parse (Context * c, uint32_t ch);
1883 extern UTF8 *utf8_new (void);
1884 extern int utf8_encode (char *ptr, int ch);
1885 extern int utf8_emit (TTY * t, int ch);
1886 /* vt102_charset.c */
1887 extern uint32_t vt102_charset_c0[128];
1888 extern uint32_t vt102_charset_us[128];
1889 extern uint32_t vt102_charset_uk[128];
1890 extern uint32_t vt102_charset_vt52[128];
1891 extern uint32_t vt102_charset_gl[128];
1892 extern uint32_t *charset_from_csid[];
1893 /* rotate.c */
1894 extern void rotate_gzip (char *file);
1895 extern void rotate (char *file);
1896 extern int rotate_check (char *file);
1897 /* raw.c */
1898 extern RX *rx_new_raw (int rfd, int wfd);
1899 extern TTY *terminal_new_raw (int rfd, int wfd);
1900 extern ANSI *ansi_new_raw (int rfd, int wfd);
1901 #ifdef __cplusplus
1902 }
1903 #endif
1904
1905 #endif /* __SYMPATHY_H__ */