Commit | Line | Data |
---|---|---|
94e24573 C |
1 | /* tty.h 6.1 83/07/29 */ |
2 | ||
3 | #ifdef KERNEL | |
4 | #include "../h/ttychars.h" | |
5 | #include "../h/ttydev.h" | |
6 | #else | |
7 | #include <sys/ttychars.h> | |
8 | #include <sys/ttydev.h> | |
9 | #endif | |
10 | ||
11 | /* | |
12 | * A clist structure is the head of a linked list queue | |
13 | * of characters. The characters are stored in blocks | |
14 | * containing a link and CBSIZE (param.h) characters. | |
15 | * The routines in tty_subr.c manipulate these structures. | |
16 | */ | |
17 | struct clist { | |
18 | int c_cc; /* character count */ | |
19 | char *c_cf; /* pointer to first char */ | |
20 | char *c_cl; /* pointer to last char */ | |
21 | }; | |
22 | ||
23 | /* | |
24 | * Per-tty structure. | |
25 | * | |
26 | * Should be split in two, into device and tty drivers. | |
27 | * Glue could be masks of what to echo and circular buffer | |
28 | * (low, high, timeout). | |
29 | */ | |
30 | struct tty { | |
31 | union { | |
32 | struct { | |
33 | struct clist T_rawq; | |
34 | struct clist T_canq; | |
35 | } t_t; | |
36 | #define t_rawq t_nu.t_t.T_rawq /* raw characters or partial line */ | |
37 | #define t_canq t_nu.t_t.T_canq /* raw characters or partial line */ | |
38 | struct { | |
39 | struct buf *T_bufp; | |
40 | char *T_cp; | |
41 | int T_inbuf; | |
42 | int T_rec; | |
43 | } t_n; | |
44 | #define t_bufp t_nu.t_n.T_bufp /* buffer allocated to protocol */ | |
45 | #define t_cp t_nu.t_n.T_cp /* pointer into the ripped off buffer */ | |
46 | #define t_inbuf t_nu.t_n.T_inbuf /* number chars in the buffer */ | |
47 | #define t_rec t_nu.t_n.T_rec /* have a complete record */ | |
48 | } t_nu; | |
49 | struct clist t_outq; /* device */ | |
50 | int (*t_oproc)(); /* device */ | |
51 | struct proc *t_rsel; /* tty */ | |
52 | struct proc *t_wsel; | |
53 | caddr_t T_LINEP; /* ### */ | |
54 | caddr_t t_addr; /* ??? */ | |
55 | dev_t t_dev; /* device */ | |
56 | int t_flags; /* some of both */ | |
57 | int t_state; /* some of both */ | |
58 | short t_pgrp; /* tty */ | |
59 | char t_delct; /* tty */ | |
60 | char t_line; /* glue */ | |
61 | char t_col; /* tty */ | |
62 | char t_ispeed, t_ospeed; /* device */ | |
63 | char t_rocount, t_rocol; /* tty */ | |
64 | struct ttychars t_chars; /* tty */ | |
65 | /* be careful of tchars & co. */ | |
66 | #define t_erase t_chars.tc_erase | |
67 | #define t_kill t_chars.tc_kill | |
68 | #define t_intrc t_chars.tc_intrc | |
69 | #define t_quitc t_chars.tc_quitc | |
70 | #define t_startc t_chars.tc_startc | |
71 | #define t_stopc t_chars.tc_stopc | |
72 | #define t_eofc t_chars.tc_eofc | |
73 | #define t_brkc t_chars.tc_brkc | |
74 | #define t_suspc t_chars.tc_suspc | |
75 | #define t_dsuspc t_chars.tc_dsuspc | |
76 | #define t_rprntc t_chars.tc_rprntc | |
77 | #define t_flushc t_chars.tc_flushc | |
78 | #define t_werasc t_chars.tc_werasc | |
79 | #define t_lnextc t_chars.tc_lnextc | |
80 | }; | |
81 | ||
82 | #define TTIPRI 28 | |
83 | #define TTOPRI 29 | |
84 | ||
85 | /* limits */ | |
86 | #define NSPEEDS 16 | |
87 | #define TTMASK 15 | |
88 | #define OBUFSIZ 100 | |
89 | #define TTYHOG 255 | |
90 | #ifdef KERNEL | |
91 | short tthiwat[NSPEEDS], ttlowat[NSPEEDS]; | |
92 | #define TTHIWAT(tp) tthiwat[(tp)->t_ospeed&TTMASK] | |
93 | #define TTLOWAT(tp) ttlowat[(tp)->t_ospeed&TTMASK] | |
94 | extern struct ttychars ttydefaults; | |
95 | #endif | |
96 | ||
97 | /* internal state bits */ | |
98 | #define TS_TIMEOUT 0x000001 /* delay timeout in progress */ | |
99 | #define TS_WOPEN 0x000002 /* waiting for open to complete */ | |
100 | #define TS_ISOPEN 0x000004 /* device is open */ | |
101 | #define TS_FLUSH 0x000008 /* outq has been flushed during DMA */ | |
102 | #define TS_CARR_ON 0x000010 /* software copy of carrier-present */ | |
103 | #define TS_BUSY 0x000020 /* output in progress */ | |
104 | #define TS_ASLEEP 0x000040 /* wakeup when output done */ | |
105 | #define TS_XCLUDE 0x000080 /* exclusive-use flag against open */ | |
106 | #define TS_TTSTOP 0x000100 /* output stopped by ctl-s */ | |
107 | #define TS_HUPCLS 0x000200 /* hang up upon last close */ | |
108 | #define TS_TBLOCK 0x000400 /* tandem queue blocked */ | |
109 | #define TS_RCOLL 0x000800 /* collision in read select */ | |
110 | #define TS_WCOLL 0x001000 /* collision in write select */ | |
111 | #define TS_NBIO 0x002000 /* tty in non-blocking mode */ | |
112 | #define TS_ASYNC 0x004000 /* tty in async i/o mode */ | |
113 | /* state for intra-line fancy editing work */ | |
114 | #define TS_BKSL 0x010000 /* state for lowercase \ work */ | |
115 | #define TS_QUOT 0x020000 /* last character input was \ */ | |
116 | #define TS_ERASE 0x040000 /* within a \.../ for PRTRUB */ | |
117 | #define TS_LNCH 0x080000 /* next character is literal */ | |
118 | #define TS_TYPEN 0x100000 /* retyping suspended input (PENDIN) */ | |
119 | #define TS_CNTTB 0x200000 /* counting tab width; leave FLUSHO alone */ | |
120 | ||
121 | #define TS_LOCAL (TS_BKSL|TS_QUOT|TS_ERASE|TS_LNCH|TS_TYPEN|TS_CNTTB) | |
122 | ||
123 | /* define partab character types */ | |
124 | #define ORDINARY 0 | |
125 | #define CONTROL 1 | |
126 | #define BACKSPACE 2 | |
127 | #define NEWLINE 3 | |
128 | #define TAB 4 | |
129 | #define VTAB 5 | |
130 | #define RETURN 6 |