- /*
- * In tandem mode, check high water mark.
- */
- if ((tp->t_state&TS_TYPEN) == 0 && (iflag&ISTRIP))
- c &= ~0x80;
-
- /*
- * Extensions to POSIX input modes which aren't controlled
- * by ICANON, ISIG, or IXON.
- */
- if (iflag&IEXTEN) {
- if (CCEQ(cc[VLNEXT],c) && (iflag&ISTRIP)) {
- if (lflag&ECHO)
- ttyout("^\b", tp); /*XXX - presumes too much */
- }
- /*
- * Signals.
- */
- if (lflag&ISIG) {
- if (CCEQ(cc[VINTR], c) || CCEQ(cc[VQUIT], c)) {
- if ((lflag&NOFLSH) == 0)
- ttyflush(tp, FREAD|FWRITE);
- ttyecho(c, tp);
- tp->t_lflag |= FLUSHO;
- }
- if (CCEQ(cc[VSUSP], c)) {
- if ((lflag&NOFLSH) == 0)
- ttyflush(tp, FREAD);
- ttyecho(c, tp);
- pgsignal(tp->t_pgrp, SIGTSTP, 1);
- goto endcase;
- }
- }
- if (iflag&IXON) {
- if (CCEQ(cc[VSTOP],c)) {
- if ((tp->t_state&TS_TTSTOP) == 0) {
- tp->t_state |= TS_TTSTOP;
- (*cdevsw[major(tp->t_dev)].d_stop)(tp, 0);
- return;
- }
- if (!CCEQ(cc[VSTART], c))
- return;
- /*
- * if VSTART == VSTOP we toggle
- */
- goto endcase;
- }
- if (CCEQ(cc[VSTART], c))
- goto restartoutput;
- }
- c = unputc(&tp->t_rawq);
- } while (c != ' ' && c != '\t');
- (void) putc(c, &tp->t_rawq);
- goto endcase;
- }
- /*
- * reprint line (^R)
- */
- if (CCEQ(cc[VREPRINT], c)) {
- ttyretype(tp);
- goto endcase;
- }
- /*
- * Check for input buffer overflow
- */
- if (tp->t_rawq.c_cc + tp->t_canq.c_cc >= TTYHOG) {
- if (iflag&IMAXBEL) {
- if (tp->t_outq.c_cc < TTHIWAT(tp))
- (void) ttyoutput(CTRL('g'), tp);
- } else
- ttyflush(tp, FREAD | FWRITE);
- goto endcase;