/* * Copyright (c) 1982, 1986 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * * @(#)tty.h 7.1.2 (2.11BSD GTE) 1997/4/10 */ #ifdef KERNEL #include "ttychars.h" #include "ttydev.h" #else #include #include #endif /* * A clist structure is the head of a linked list queue * of characters. The characters are stored in blocks * containing a link and CBSIZE (param.h) characters. * The routines in tty_subr.c manipulate these structures. */ struct clist { int c_cc; /* character count */ char *c_cf; /* pointer to first char */ char *c_cl; /* pointer to last char */ }; /* * Per-tty structure. * * Should be split in two, into device and tty drivers. * Glue could be masks of what to echo and circular buffer * (low, high, timeout). */ struct tty { union { struct { struct clist T_rawq; struct clist T_canq; } t_t; #define t_rawq t_nu.t_t.T_rawq /* raw characters or partial line */ #define t_canq t_nu.t_t.T_canq /* raw characters or partial line */ struct { struct buf *T_bufp; char *T_cp; int T_inbuf; int T_rec; } t_n; #define t_bufp t_nu.t_n.T_bufp /* buffer allocated to protocol */ #define t_cp t_nu.t_n.T_cp /* pointer into the ripped off buffer */ #define t_inbuf t_nu.t_n.T_inbuf /* number chars in the buffer */ #define t_rec t_nu.t_n.T_rec /* have a complete record */ } t_nu; struct clist t_outq; /* device */ int (*t_oproc)(); /* device */ struct proc *t_rsel; /* tty */ struct proc *t_wsel; caddr_t T_LINEP; /* ### */ caddr_t t_addr; /* ??? */ dev_t t_dev; /* device */ long t_flags; /* some of both */ long t_state; /* some of both */ short t_pgrp; /* tty */ char t_delct; /* tty */ char t_line; /* glue */ char t_col; /* tty */ char t_ispeed, t_ospeed; /* device */ char t_rocount, t_rocol; /* tty */ struct ttychars t_chars; /* tty */ struct winsize t_winsize; /* window size */ /* be careful of tchars & co. */ #define t_erase t_chars.tc_erase #define t_kill t_chars.tc_kill #define t_intrc t_chars.tc_intrc #define t_quitc t_chars.tc_quitc #define t_startc t_chars.tc_startc #define t_stopc t_chars.tc_stopc #define t_eofc t_chars.tc_eofc #define t_brkc t_chars.tc_brkc #define t_suspc t_chars.tc_suspc #define t_dsuspc t_chars.tc_dsuspc #define t_rprntc t_chars.tc_rprntc #define t_flushc t_chars.tc_flushc #define t_werasc t_chars.tc_werasc #define t_lnextc t_chars.tc_lnextc }; #define TTIPRI 28 #define TTOPRI 29 /* limits */ #define NSPEEDS 16 #define TTMASK 15 #define OBUFSIZ 100 #if defined(KERNEL) && !defined(SUPERVISOR) short tthiwat[NSPEEDS], ttlowat[NSPEEDS]; #define TTHIWAT(tp) tthiwat[(tp)->t_ospeed&TTMASK] #define TTLOWAT(tp) ttlowat[(tp)->t_ospeed&TTMASK] extern struct ttychars ttydefaults; #endif /* internal state bits */ #define TS_TIMEOUT 0x000001L /* delay timeout in progress */ #define TS_WOPEN 0x000002L /* waiting for open to complete */ #define TS_ISOPEN 0x000004L /* device is open */ #define TS_FLUSH 0x000008L /* outq has been flushed during DMA */ #define TS_CARR_ON 0x000010L /* software copy of carrier-present */ #define TS_BUSY 0x000020L /* output in progress */ #define TS_ASLEEP 0x000040L /* wakeup when output done */ #define TS_XCLUDE 0x000080L /* exclusive-use flag against open */ #define TS_TTSTOP 0x000100L /* output stopped by ctl-s */ #define TS_HUPCLS 0x000200L /* hang up upon last close */ #define TS_TBLOCK 0x000400L /* tandem queue blocked */ #define TS_RCOLL 0x000800L /* collision in read select */ #define TS_WCOLL 0x001000L /* collision in write select */ #define TS_ASYNC 0x004000L /* tty in async i/o mode */ /* state for intra-line fancy editing work */ #define TS_ERASE 0x040000L /* within a \.../ for PRTRUB */ #define TS_LNCH 0x080000L /* next character is literal */ #define TS_TYPEN 0x100000L /* retyping suspended input (PENDIN) */ #define TS_CNTTB 0x200000L /* counting tab width; leave FLUSHO alone */ #define TS_LOCAL (TS_ERASE|TS_LNCH|TS_TYPEN|TS_CNTTB) /* define partab character types */ #define ORDINARY 0 #define CONTROL 1 #define BACKSPACE 2 #define NEWLINE 3 #define TAB 4 #define VTAB 5 #define RETURN 6