|
|
1.1 root 1: /* tty.h 4.5 81/06/11 */
2:
3: #ifdef KERNEL
4: #include "../h/ioctl.h"
5: #else
6: #include <sys/ioctl.h>
7: #endif
8: #include <sgtty.h>
9:
10: /*
11: * A clist structure is the head
12: * of a linked list queue of characters.
13: * The characters are stored in
14: * blocks containing a link and CBSIZE (param.h)
15: * characters. The routines getc, putc, ... in prim.c
16: * manipulate these structures.
17: */
18: struct clist
19: {
20: int c_cc; /* character count */
21: char *c_cf; /* pointer to first char */
22: char *c_cl; /* pointer to last char */
23: };
24:
25: /*
26: * A tty structure is needed for
27: * each UNIX character device that
28: * is used for normal terminal IO.
29: * The routines in tty.c handle the
30: * common code associated with
31: * these structures. The definition
32: * and device dependent code is in
33: * each driver. (cons.c, dh.c, dz.c, kl.c)
34: */
35: struct tty
36: {
37: union {
38: struct {
39: struct clist T_rawq;
40: struct clist T_canq;
41: } t_t;
42: #define t_rawq t_nu.t_t.T_rawq /* raw characters or partial line */
43: #define t_canq t_nu.t_t.T_canq /* complete input lines */
44: struct {
45: struct buf *T_bufp;
46: char *T_cp;
47: int T_inbuf;
48: int T_rec;
49: } t_n;
50: #define t_bufp t_nu.t_n.T_bufp /* buffer allocated to protocol */
51: #define t_cp t_nu.t_n.T_cp /* pointer into the ripped off buffer */
52: #define t_inbuf t_nu.t_n.T_inbuf /* number chars in the buffer */
53: #define t_rec t_nu.t_n.T_rec /* have a complete record */
54: } t_nu;
55: struct clist t_outq; /* output list to device */
56: int (*t_oproc)(); /* routine to start output */
57: int (*t_iproc)(); /* routine to start input */
58: struct chan *t_chan; /* destination channel */
59: caddr_t t_linep; /* aux line discipline pointer */
60: caddr_t t_addr; /* device address */
61: dev_t t_dev; /* device number */
62: short t_flags; /* mode, settable by ioctl call */
63: short t_state; /* internal state, not visible externally */
64: short t_pgrp; /* process group name */
65: char t_delct; /* number of delimiters in raw q */
66: char t_line; /* line discipline */
67: char t_col; /* printing column of device */
68: char t_erase; /* erase character */
69: char t_kill; /* kill character */
70: char t_char; /* character temporary */
71: char t_ispeed; /* input speed */
72: char t_ospeed; /* output speed */
73: /* begin local */
74: char t_rocount; /* chars input since a ttwrite() */
75: char t_rocol; /* t_col when first input this line */
76: struct ltchars t_lchr; /* local special characters */
77: short t_local; /* local mode word */
78: short t_lstate; /* local state bits */
79: /* end local */
80: union {
81: struct tchars t_chr;
82: struct clist t_ctlq;
83: } t_un;
84: };
85:
86: #define tun tp->t_un.t_chr
87: #define tlun tp->t_lchr
88:
89: #define TTIPRI 28
90: #define TTOPRI 29
91:
92: #define CTRL(c) ('c'&037)
93:
94: /* default special characters */
95: #define CERASE '#'
96: #define CEOT CTRL(d)
97: #define CKILL '@'
98: #define CQUIT 034 /* FS, cntl shift L */
99: #define CINTR 0177 /* DEL */
100: #define CSTOP CTRL(s)
101: #define CSTART CTRL(q)
102: #define CBRK 0377
103:
104: /* limits */
105: #define NSPEEDS 16
106: #define TTMASK 15
107: #ifdef KERNEL
108: short tthiwat[NSPEEDS], ttlowat[NSPEEDS];
109: #define TTHIWAT(tp) tthiwat[(tp)->t_ospeed&TTMASK]
110: #define TTLOWAT(tp) ttlowat[(tp)->t_ospeed&TTMASK]
111: #endif
112: #define TTYHOG 255
113:
114: /* hardware bits */
115: #define DONE 0200
116: #define IENABLE 0100
117:
118: /* internal state bits */
119: #define TIMEOUT 01 /* delay timeout in progress */
120: #define WOPEN 02 /* waiting for open to complete */
121: #define ISOPEN 04 /* device is open */
122: #define FLUSH 010 /* outq has been flushed during DMA */
123: #define CARR_ON 020 /* software copy of carrier-present */
124: #define BUSY 040 /* output in progress */
125: #define ASLEEP 0100 /* wakeup when output done */
126: #define XCLUDE 0200 /* exclusive-use flag against open */
127: #define TTSTOP 0400 /* output stopped by ctl-s */
128: #define HUPCLS 01000 /* hang up upon last close */
129: #define TBLOCK 02000 /* tandem queue blocked */
130: #define SPEEDS 04000 /* t_ispeed and t_ospeed used by driver */
131: #define NDQB 010000
132: #define EXTPROC 020000 /* external processor (kmc) */
133: #define FSLEEP 040000 /* Wakeup on input framing */
134: #define BEXT 0100000 /* use (external) system buffers */
135:
136: /* define partab character types */
137: #define ORDINARY 0
138: #define CONTROL 1
139: #define BACKSPACE 2
140: #define NEWLINE 3
141: #define TAB 4
142: #define VTAB 5
143: #define RETURN 6
144:
145: /* define dmctl actions */
146: #define DMSET 0
147: #define DMBIS 1
148: #define DMBIC 2
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.