/* * A clist structure is the head * of a linked list queue of characters. * The characters are stored in 4-word * blocks containing a link and several characters. * The routines getc and putc * manipulate these structures. */ struct clist { int c_cc; /* character count */ char *c_cf; /* pointer to first char */ char *c_cl; /* pointer to last char */ }; /* * A tty structure is needed for * each UNIX character device that * is used for normal terminal IO. * The routines in tty.c handle the * common code associated with * these structures. * The definition and device dependent * code is in each driver. (kl.c dc.c dh.c) */ struct tc { char t_intrc; /* interrupt */ char t_quitc; /* quit */ char t_startc; /* start output */ char t_stopc; /* stop output */ char t_eofc; /* end-of-file */ char t_brkc; /* input delimiter (like nl) */ }; struct tty { struct clist t_rawq; /* input chars right off device */ struct clist t_canq; /* input chars after erase and kill */ struct clist t_outq; /* output list to device */ int (* t_oproc)(); /* routine to start output */ int (* t_iproc)(); /* routine to start input */ struct chan *t_chan; /* destination channel */ caddr_t t_linep; /* aux line discipline pointer */ caddr_t t_addr; /* device address */ dev_t t_dev; /* device number */ short t_flags; /* mode, settable by ioctl call */ short t_state; /* internal state, not visible externally */ short t_pgrp; /* process group name */ char t_delct; /* number of delimiters in raw q */ char t_line; /* line discipline */ char t_col; /* printing column of device */ char t_erase; /* erase character */ char t_kill; /* kill character */ char t_char; /* character temporary */ char t_ispeed; /* input speed */ char t_ospeed; /* output speed */ char t_lno; /* line number within page */ char t_pagelen; /* page length in lines */ union { struct tc; struct clist t_ctlq; } t_un; }; #define tun tp->t_un /* * structure of arg for ioctl */ struct ttiocb { char ioc_ispeed; char ioc_ospeed; char ioc_erase; char ioc_kill; int ioc_flags; }; #define TTIPRI 28 #define TTOPRI 29 #define CERASE '\b' /* default special characters */ #define CEOT 004 #define CKILL '@' #define CQUIT 034 /* FS, cntl shift L */ #define CINTR 0177 /* DEL */ #define CSTOP 023 /* Stop output: ctl-s */ #define CSTART 021 /* Start output: ctl-q */ #define CBRK 0377 /* limits */ #define TTHIWAT 200 #define TTLOWAT 50 #define TTYHOG 256 /* modes */ #define TANDEM 01 #define CBREAK 02 #define LCASE 04 #define ECHO 010 #define CRMOD 020 #define RAW 040 #define ODDP 0100 #define EVENP 0200 #define NLDELAY 001400 #define TBDELAY 006000 #define XTABS 006000 #define CRDELAY 030000 #define VTDELAY 040000 #define ESCAPE 0100000 /* Hardware bits */ #define DONE 0200 #define IENABLE 0100 /* Internal state bits */ #define TIMEOUT 01 /* Delay timeout in progress */ #define WOPEN 02 /* Waiting for open to complete */ #define ISOPEN 04 /* Device is open */ #define FLUSH 010 /* outq has been flushed during DMA */ #define CARR_ON 020 /* Software copy of carrier-present */ #define BUSY 040 /* Output in progress */ #define ASLEEP 0100 /* Wakeup when output done */ #define XCLUDE 0200 /* exclusive-use flag against open */ #define TTSTOP 0400 /* Output stopped by ctl-s */ #define HUPCLS 01000 /* Hang up upon last close */ #define TBLOCK 02000 /* tandem queue blocked */ #define DKCMD 04000 /* datakit command channel */ #define DKMPX 010000 /* datakit user-multiplexed mode */ #define DKCALL 020000 /* datakit dial mode */ #define DKLINGR 040000 /* datakit lingering close mode */ #define PAGING DKCMD /* page pause in progress */ #define PAGED DKCALL /* paged output in effect */ #define CNTLQ 0100000 /* interpret t_un as clist */ /* * tty ioctl commands */ #define TIOCGETD (('t'<<8)|0) #define TIOCSETD (('t'<<8)|1) #define TIOCHPCL (('t'<<8)|2) #define TIOCMODG (('t'<<8)|3) #define TIOCMODS (('t'<<8)|4) #define TIOCGETP (('t'<<8)|8) #define TIOCSETP (('t'<<8)|9) #define TIOCSETN (('t'<<8)|10) #define TIOCEXCL (('t'<<8)|13) #define TIOCNXCL (('t'<<8)|14) #define TIOCFLUSH (('t'<<8)|16) #define TIOCSETC (('t'<<8)|17) #define TIOCGETC (('t'<<8)|18) #define TIOPAGE (('t'<<8)|19) #define TIOCQSIZ (('t'<<8)|65) #define DIOCLSTN (('d'<<8)|1) #define DIOCNTRL (('d'<<8)|2) #define DIOCMPX (('d'<<8)|3) #define DIOCNMPX (('d'<<8)|4) #define DIOCSCALL (('d'<<8)|5) #define DIOCRCALL (('d'<<8)|6) #define DIOCPGRP (('d'<<8)|7) #define DIOCGETP (('d'<<8)|8) #define DIOCSETP (('d'<<8)|9) #define DIOCLOSE (('d'<<8)|10) #define DIOCTIME (('d'<<8)|11) #define DIOCRESET (('d'<<8)|12) #define FIOCLEX (('f'<<8)|1) #define FIONCLEX (('f'<<8)|2) #define MXLSTN (('x'<<8)|1) #define MXNBLK (('x'<<8)|2)