|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 1986 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: *
6: * @(#)tty.h 7.1 (Berkeley) 6/4/86
7: */
8:
9: #ifdef KERNEL
10: #include "ttychars.h"
11: #include "ttydev.h"
12: #else
13: #include <sys/ttychars.h>
14: #include <sys/ttydev.h>
15: #endif
16:
17: /*
18: * A clist structure is the head of a linked list queue
19: * of characters. The characters are stored in blocks
20: * containing a link and CBSIZE (param.h) characters.
21: * The routines in tty_subr.c manipulate these structures.
22: */
23: struct clist {
24: int c_cc; /* character count */
25: char *c_cf; /* pointer to first char */
26: char *c_cl; /* pointer to last char */
27: };
28:
29: /*
30: * Per-tty structure.
31: *
32: * Should be split in two, into device and tty drivers.
33: * Glue could be masks of what to echo and circular buffer
34: * (low, high, timeout).
35: */
36: struct tty {
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 /* raw characters or partial line */
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; /* device */
56: int (*t_oproc)(); /* device */
57: struct proc *t_rsel; /* tty */
58: struct proc *t_wsel;
59: caddr_t T_LINEP; /* ### */
60: caddr_t t_addr; /* ??? */
61: dev_t t_dev; /* device */
62: int t_flags; /* some of both */
63: int t_state; /* some of both */
64: short t_pgrp; /* tty */
65: char t_delct; /* tty */
66: char t_line; /* glue */
67: char t_col; /* tty */
68: char t_ispeed, t_ospeed; /* device */
69: char t_rocount, t_rocol; /* tty */
70: struct ttychars t_chars; /* tty */
71: struct winsize t_winsize; /* window size */
72: /* be careful of tchars & co. */
73: #define t_erase t_chars.tc_erase
74: #define t_kill t_chars.tc_kill
75: #define t_intrc t_chars.tc_intrc
76: #define t_quitc t_chars.tc_quitc
77: #define t_startc t_chars.tc_startc
78: #define t_stopc t_chars.tc_stopc
79: #define t_eofc t_chars.tc_eofc
80: #define t_brkc t_chars.tc_brkc
81: #define t_suspc t_chars.tc_suspc
82: #define t_dsuspc t_chars.tc_dsuspc
83: #define t_rprntc t_chars.tc_rprntc
84: #define t_flushc t_chars.tc_flushc
85: #define t_werasc t_chars.tc_werasc
86: #define t_lnextc t_chars.tc_lnextc
87: };
88:
89: #define TTIPRI 28
90: #define TTOPRI 29
91:
92: /* limits */
93: #define NSPEEDS 16
94: #define TTMASK 15
95: #define OBUFSIZ 100
96: #define TTYHOG 255
97: #ifdef KERNEL
98: short tthiwat[NSPEEDS], ttlowat[NSPEEDS];
99: #define TTHIWAT(tp) tthiwat[(tp)->t_ospeed&TTMASK]
100: #define TTLOWAT(tp) ttlowat[(tp)->t_ospeed&TTMASK]
101: extern struct ttychars ttydefaults;
102: #endif
103:
104: /* internal state bits */
105: #define TS_TIMEOUT 0x000001 /* delay timeout in progress */
106: #define TS_WOPEN 0x000002 /* waiting for open to complete */
107: #define TS_ISOPEN 0x000004 /* device is open */
108: #define TS_FLUSH 0x000008 /* outq has been flushed during DMA */
109: #define TS_CARR_ON 0x000010 /* software copy of carrier-present */
110: #define TS_BUSY 0x000020 /* output in progress */
111: #define TS_ASLEEP 0x000040 /* wakeup when output done */
112: #define TS_XCLUDE 0x000080 /* exclusive-use flag against open */
113: #define TS_TTSTOP 0x000100 /* output stopped by ctl-s */
114: #define TS_HUPCLS 0x000200 /* hang up upon last close */
115: #define TS_TBLOCK 0x000400 /* tandem queue blocked */
116: #define TS_RCOLL 0x000800 /* collision in read select */
117: #define TS_WCOLL 0x001000 /* collision in write select */
118: #define TS_NBIO 0x002000 /* tty in non-blocking mode */
119: #define TS_ASYNC 0x004000 /* tty in async i/o mode */
120: /* state for intra-line fancy editing work */
121: #define TS_BKSL 0x010000 /* state for lowercase \ work */
122: #define TS_QUOT 0x020000 /* last character input was \ */
123: #define TS_ERASE 0x040000 /* within a \.../ for PRTRUB */
124: #define TS_LNCH 0x080000 /* next character is literal */
125: #define TS_TYPEN 0x100000 /* retyping suspended input (PENDIN) */
126: #define TS_CNTTB 0x200000 /* counting tab width; leave FLUSHO alone */
127:
128: #define TS_LOCAL (TS_BKSL|TS_QUOT|TS_ERASE|TS_LNCH|TS_TYPEN|TS_CNTTB)
129:
130: /* define partab character types */
131: #define ORDINARY 0
132: #define CONTROL 1
133: #define BACKSPACE 2
134: #define NEWLINE 3
135: #define TAB 4
136: #define VTAB 5
137: #define RETURN 6
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.