Lines Matching refs:tp

443 					ldtermstd_state_t *tp);
670 ldtermstd_state_t *tp; in ldtermopen() local
681 tp = (ldtermstd_state_t *)kmem_zalloc(sizeof (ldtermstd_state_t), in ldtermopen()
691 tp->t_modes = *termiosp; in ldtermopen()
692 tp->t_amodes = *termiosp; in ldtermopen()
700 bzero(&tp->t_dmodes, sizeof (struct termios)); in ldtermopen()
702 tp->t_state = 0; in ldtermopen()
704 tp->t_line = 0; in ldtermopen()
705 tp->t_col = 0; in ldtermopen()
707 tp->t_rocount = 0; in ldtermopen()
708 tp->t_rocol = 0; in ldtermopen()
710 tp->t_message = NULL; in ldtermopen()
711 tp->t_endmsg = NULL; in ldtermopen()
712 tp->t_msglen = 0; in ldtermopen()
713 tp->t_rd_request = 0; in ldtermopen()
715 tp->t_echomp = NULL; in ldtermopen()
716 tp->t_iocid = 0; in ldtermopen()
717 tp->t_wbufcid = 0; in ldtermopen()
718 tp->t_vtid = 0; in ldtermopen()
720 q->q_ptr = (caddr_t)tp; in ldtermopen()
721 WR(q)->q_ptr = (caddr_t)tp; in ldtermopen()
725 tp->t_codeset = tp->t_eucleft = tp->t_eucign = tp->t_scratch_len = 0; in ldtermopen()
726 bzero(&tp->eucwioc, EUCSIZE); in ldtermopen()
727 tp->eucwioc.eucw[0] = 1; /* ASCII mem & screen width */ in ldtermopen()
728 tp->eucwioc.scrw[0] = 1; in ldtermopen()
729 tp->t_maxeuc = 1; /* the max len in bytes of an EUC char */ in ldtermopen()
730 tp->t_eucp = NULL; in ldtermopen()
731 tp->t_csmethods = cs_methods[LDTERM_CS_TYPE_EUC]; in ldtermopen()
732 tp->t_csdata = default_cs_data; in ldtermopen()
738 if ((tp->t_eucp_mp = allocb(_TTY_BUFSIZ, BPRI_HI)) != NULL) { in ldtermopen()
739 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldtermopen()
740 tp->t_state = TS_MEUC; /* Multibyte mode. */ in ldtermopen()
741 tp->t_maxeuc = 4; /* the max len in bytes of an UTF-8 char */ in ldtermopen()
742 tp->t_csdata.codeset_type = LDTERM_CS_TYPE_UTF8; in ldtermopen()
743 tp->t_csdata.csinfo_num = 4; in ldtermopen()
745 tp->t_csdata.locale_name = (char *)kmem_alloc(6, KM_SLEEP); in ldtermopen()
746 (void) strcpy(tp->t_csdata.locale_name, "UTF-8"); in ldtermopen()
747 tp->t_csmethods = cs_methods[LDTERM_CS_TYPE_UTF8]; in ldtermopen()
749 tp->t_eucwarn = 0; /* no bad chars seen yet */ in ldtermopen()
772 tp->t_drainmsg = qryp; in ldtermopen()
797 tp->t_closeopts = bp; in ldtermopen()
823 freemsg(tp->t_closeopts); in ldtermopen()
824 freemsg(tp->t_drainmsg); in ldtermopen()
826 kmem_free(tp, sizeof (ldtermstd_state_t)); in ldtermopen()
832 ldtermstd_state_t *tp; member
841 ctp->tp->t_state &= ~TS_IOCWAIT; in drain_timed_out()
848 ldtermstd_state_t *tp = (ldtermstd_state_t *)q->q_ptr; in ldtermclose() local
856 tp->t_state |= TS_CLOSE; in ldtermclose()
857 if (tp->t_vtid != 0) in ldtermclose()
858 (void) quntimeout(q, tp->t_vtid); in ldtermclose()
859 tp->t_vtid = 0; in ldtermclose()
864 if (tp->t_wbufcid != 0) in ldtermclose()
865 qunbufcall(q, tp->t_wbufcid); in ldtermclose()
872 bp = tp->t_closeopts; in ldtermclose()
881 freemsg(tp->t_drainmsg); in ldtermclose()
882 } else if ((bp = tp->t_drainmsg) != NULL) { in ldtermclose()
895 tp->t_state |= TS_IOCWAIT; in ldtermclose()
896 tp->t_iocid = iocb->ioc_id; in ldtermclose()
907 cltimer.tp = tp; in ldtermclose()
917 while (tp->t_state & TS_IOCWAIT) { in ldtermclose()
932 freemsg(tp->t_message); in ldtermclose()
933 freemsg(tp->t_eucp_mp); in ldtermclose()
936 if (tp->t_csdata.locale_name != NULL) in ldtermclose()
937 kmem_free(tp->t_csdata.locale_name, in ldtermclose()
938 strlen(tp->t_csdata.locale_name) + 1); in ldtermclose()
939 kmem_free(tp, sizeof (ldtermstd_state_t)); in ldtermclose()
951 ldtermstd_state_t *tp; in ldtermrput() local
962 tp = (ldtermstd_state_t *)q->q_ptr; in ldtermrput()
969 (tp->t_state & (TS_CLOSE|TS_IOCWAIT)) == (TS_CLOSE|TS_IOCWAIT)) { in ldtermrput()
972 if (iocp->ioc_id == tp->t_iocid) { in ldtermrput()
973 tp->t_state &= ~TS_IOCWAIT; in ldtermrput()
1014 if (!(tp->t_amodes.c_iflag & IGNPAR)) { in ldtermrput()
1016 if (tp->t_amodes.c_iflag & PARMRK) { in ldtermrput()
1051 if (!(tp->t_amodes.c_iflag & IGNBRK)) { in ldtermrput()
1052 if (tp->t_amodes.c_iflag & BRKINT) { in ldtermrput()
1055 } else if (tp->t_amodes.c_iflag & PARMRK) { in ldtermrput()
1119 bcopy(emodes, &tp->t_dmodes, in ldtermrput()
1121 ldterm_adjust_modes(tp); in ldtermrput()
1129 tp->t_state |= TS_NOCANON; in ldtermrput()
1135 if (tp->t_message != NULL) { in ldtermrput()
1136 freemsg(tp->t_message); in ldtermrput()
1137 tp->t_message = NULL; in ldtermrput()
1138 tp->t_endmsg = NULL; in ldtermrput()
1139 tp->t_msglen = 0; in ldtermrput()
1140 tp->t_rocount = 0; in ldtermrput()
1141 tp->t_rocol = 0; in ldtermrput()
1142 if (tp->t_state & TS_MEUC) { in ldtermrput()
1143 ASSERT(tp->t_eucp_mp); in ldtermrput()
1144 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldtermrput()
1145 tp->t_codeset = 0; in ldtermrput()
1146 tp->t_eucleft = 0; in ldtermrput()
1152 tp->t_state &= ~TS_NOCANON; in ldtermrput()
1158 freemsg(tp->t_drainmsg); in ldtermrput()
1159 tp->t_drainmsg = NULL; in ldtermrput()
1175 if ((tp->t_state & TS_ISPTSTTY) && (*mp->b_rptr & FLUSHBAND)) in ldtermrput()
1183 freemsg(tp->t_message); in ldtermrput()
1184 tp->t_message = NULL; in ldtermrput()
1185 tp->t_endmsg = NULL; in ldtermrput()
1186 tp->t_msglen = 0; in ldtermrput()
1187 tp->t_rocount = 0; in ldtermrput()
1188 tp->t_rocol = 0; in ldtermrput()
1189 if (tp->t_state & TS_MEUC) { /* EUC multi-byte */ in ldtermrput()
1190 ASSERT(tp->t_eucp_mp); in ldtermrput()
1191 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldtermrput()
1198 if ((tp->t_modes.c_iflag & IXOFF) && in ldtermrput()
1199 (tp->t_state & TS_TBLOCK) && in ldtermrput()
1200 !(tp->t_state & TS_IFBLOCK) && q->q_count <= TTXOLO) { in ldtermrput()
1201 tp->t_state &= ~TS_TBLOCK; in ldtermrput()
1216 if ((tp->t_modes.c_iflag & IXOFF) && (tp->t_state & TS_TBLOCK) && in ldtermrput()
1217 !(tp->t_state & TS_IFBLOCK) && q->q_count <= TTXOLO) { in ldtermrput()
1218 tp->t_state &= ~TS_TBLOCK; in ldtermrput()
1227 if (tp->t_state & TS_NOCANON) { in ldtermrput()
1236 if (tp->t_modes.c_iflag & (INLCR|IGNCR|ICRNL|IUCLC|IXON) || in ldtermrput()
1237 tp->t_modes.c_lflag & (ISIG|ICANON)) { in ldtermrput()
1246 if (tp->t_modes.c_iflag & ISTRIP) in ldtermrput()
1254 if (tp->t_state & TS_PLNCH) { in ldtermrput()
1255 tp->t_state &= ~TS_PLNCH; in ldtermrput()
1256 tp->t_modes.c_lflag &= ~FLUSHO; in ldtermrput()
1269 if (tp->t_modes.c_iflag & IXON && in ldtermrput()
1270 tp->t_state & TS_TTSTOP && in ldtermrput()
1271 tp->t_modes.c_lflag & IEXTEN && in ldtermrput()
1272 tp->t_modes.c_iflag & IXANY) { in ldtermrput()
1273 tp->t_state &= in ldtermrput()
1277 tp->t_modes.c_lflag &= ~FLUSHO; in ldtermrput()
1285 if (tp->t_modes.c_iflag & IXON) { in ldtermrput()
1286 if (tp->t_state & TS_TTSTOP) { in ldtermrput()
1288 tp->t_modes.c_cc[VSTART] || in ldtermrput()
1289 (tp->t_modes.c_lflag & in ldtermrput()
1291 tp->t_modes.c_iflag & in ldtermrput()
1293 tp->t_state &= in ldtermrput()
1301 tp->t_modes.c_cc[VSTOP]) { in ldtermrput()
1302 tp->t_state |= in ldtermrput()
1308 if (c == tp->t_modes.c_cc[VSTOP] || in ldtermrput()
1309 c == tp->t_modes.c_cc[VSTART]) in ldtermrput()
1319 if (tp->t_modes.c_lflag & IEXTEN) { in ldtermrput()
1320 if (c == tp->t_modes.c_cc[VLNEXT]) { in ldtermrput()
1329 tp->t_state |= TS_PLNCH; in ldtermrput()
1330 tp->t_modes.c_lflag &= ~FLUSHO; in ldtermrput()
1334 if (c == tp->t_modes.c_cc[VDISCARD]) { in ldtermrput()
1335 ldterm_flush_output(c, wrq, tp); in ldtermrput()
1339 tp->t_modes.c_lflag &= ~FLUSHO; in ldtermrput()
1345 if (tp->t_modes.c_lflag & ISIG) { in ldtermrput()
1346 if (c == tp->t_modes.c_cc[VINTR]) { in ldtermrput()
1351 if (c == tp->t_modes.c_cc[VQUIT]) { in ldtermrput()
1356 if (c == tp->t_modes.c_cc[VSWTCH]) { in ldtermrput()
1363 if (c == tp->t_modes.c_cc[VSUSP]) { in ldtermrput()
1368 if ((tp->t_modes.c_lflag & IEXTEN) && in ldtermrput()
1369 (c == tp->t_modes.c_cc[VDSUSP])) { in ldtermrput()
1380 if (c == tp->t_modes.c_cc[VSTATUS]) { in ldtermrput()
1391 if (tp->t_modes.c_iflag & IGNCR) in ldtermrput()
1393 if (tp->t_modes.c_iflag & ICRNL) in ldtermrput()
1401 tp->t_modes.c_iflag & INLCR) in ldtermrput()
1409 if (tp->t_modes.c_iflag & IUCLC && in ldtermrput()
1434 if (tp->t_modes.c_iflag & ISTRIP) { in ldtermrput()
1438 tp->t_modes.c_lflag &= ~FLUSHO; in ldtermrput()
1450 (tp->t_state & TS_RESCAN)) in ldtermrput()
1465 if ((tp->t_modes.c_iflag & IXOFF) && !(tp->t_state & TS_TBLOCK) && in ldtermrput()
1470 tp->t_state |= TS_TBLOCK; in ldtermrput()
1486 ldtermstd_state_t *tp; in ldtermrsrv() local
1489 tp = (ldtermstd_state_t *)q->q_ptr; in ldtermrsrv()
1491 if (tp->t_state & TS_RESCAN) { in ldtermrsrv()
1497 if (tp->t_message != NULL) { in ldtermrsrv()
1499 if (tp->t_msglen != 0) in ldtermrsrv()
1500 (void) putbq(q, tp->t_message); in ldtermrsrv()
1502 freemsg(tp->t_message); in ldtermrsrv()
1503 tp->t_message = NULL; in ldtermrsrv()
1504 tp->t_endmsg = NULL; in ldtermrsrv()
1505 tp->t_msglen = 0; in ldtermrsrv()
1507 if (tp->t_state & TS_MEUC) { in ldtermrsrv()
1508 ASSERT(tp->t_eucp_mp); in ldtermrsrv()
1509 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldtermrsrv()
1510 tp->t_codeset = 0; in ldtermrsrv()
1511 tp->t_eucleft = 0; in ldtermrsrv()
1513 tp->t_state &= ~TS_RESCAN; in ldtermrsrv()
1525 if ((tp->t_modes.c_iflag & IXOFF) && (tp->t_state & TS_TBLOCK) && in ldtermrsrv()
1526 !(tp->t_state & TS_IFBLOCK) && q->q_count <= TTXOLO) { in ldtermrsrv()
1527 tp->t_state &= ~TS_TBLOCK; in ldtermrsrv()
1547 ldtermstd_state_t *tp; in ldtermrmsg() local
1551 tp = (ldtermstd_state_t *)q->q_ptr; in ldtermrmsg()
1568 if (tp->t_modes.c_lflag & ECHO) { in ldtermrmsg()
1569 if ((tp->t_modes.c_iflag & IMAXBEL) && in ldtermrmsg()
1570 (tp->t_modes.c_lflag & ICANON)) { in ldtermrmsg()
1573 ldterm_outchar(CTRL('g'), WR(q), 4, tp); in ldtermrmsg()
1600 freemsg(tp->t_message); in ldtermrmsg()
1601 tp->t_message = NULL; in ldtermrmsg()
1602 tp->t_endmsg = NULL; in ldtermrmsg()
1603 tp->t_msglen = 0; in ldtermrmsg()
1608 tp->t_rocount = 0; /* if it hasn't been typed */ in ldtermrmsg()
1609 tp->t_rocol = 0; /* it hasn't been echoed :-) */ in ldtermrmsg()
1610 if (tp->t_state & TS_MEUC) { in ldtermrmsg()
1611 ASSERT(tp->t_eucp_mp); in ldtermrmsg()
1612 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldtermrmsg()
1619 if (tp->t_state & TS_TTSTOP) { in ldtermrmsg()
1620 tp->t_state &= ~(TS_TTSTOP|TS_OFBLOCK); in ldtermrmsg()
1670 if (tp->t_state & TS_NOCANON) { in ldtermrmsg()
1676 if ((bpt = newmsg(tp)) != NULL) { in ldtermrmsg()
1701 bpt, ebsize, q, tp, &dofree)) == in ldtermrmsg()
1715 bpt = ldterm_dononcanon(bp, bpt, ebsize, q, tp); in ldtermrmsg()
1728 if (tp->t_echomp != NULL) { in ldtermrmsg()
1730 putnext(WR(q), tp->t_echomp); in ldtermrmsg()
1732 freemsg(tp->t_echomp); in ldtermrmsg()
1733 tp->t_echomp = NULL; in ldtermrmsg()
1749 ldtermstd_state_t *tp, int *dofreep) in ldterm_docanon() argument
1758 if (tp->t_state & TS_SLNCH) in ldterm_docanon()
1767 tp->t_state &= ~TS_QUOT; in ldterm_docanon()
1774 if ((tp->t_modes.c_lflag & IEXTEN) && c == tp->t_modes.c_cc[VLNEXT]) { in ldterm_docanon()
1775 if (tp->t_modes.c_lflag & ECHO) in ldterm_docanon()
1777 ebsize, tp); in ldterm_docanon()
1778 tp->t_state |= TS_SLNCH; in ldterm_docanon()
1788 if (c == tp->t_modes.c_cc[VERASE] || c == tp->t_modes.c_cc[VERASE2]) { in ldterm_docanon()
1789 if (tp->t_state & TS_QUOT) { in ldterm_docanon()
1794 ldterm_erase(wrq, ebsize, tp); in ldterm_docanon()
1795 bpt = tp->t_endmsg; in ldterm_docanon()
1798 if ((tp->t_state & TS_MEUC) && tp->t_msglen && in ldterm_docanon()
1799 (*(tp->t_eucp - 1) != 1 && in ldterm_docanon()
1800 *(tp->t_eucp - 1) <= UNKNOWN_WIDTH)) in ldterm_docanon()
1801 ldterm_csi_erase(wrq, ebsize, tp); in ldterm_docanon()
1803 ldterm_erase(wrq, ebsize, tp); in ldterm_docanon()
1804 bpt = tp->t_endmsg; in ldterm_docanon()
1808 if ((tp->t_modes.c_lflag & IEXTEN) && c == tp->t_modes.c_cc[VWERASE]) { in ldterm_docanon()
1812 if (tp->t_state & TS_MEUC) in ldterm_docanon()
1813 ldterm_csi_werase(wrq, ebsize, tp); in ldterm_docanon()
1815 ldterm_werase(wrq, ebsize, tp); in ldterm_docanon()
1816 bpt = tp->t_endmsg; in ldterm_docanon()
1819 if (c == tp->t_modes.c_cc[VKILL]) { in ldterm_docanon()
1820 if (tp->t_state & TS_QUOT) { in ldterm_docanon()
1825 ldterm_erase(wrq, ebsize, tp); in ldterm_docanon()
1826 bpt = tp->t_endmsg; in ldterm_docanon()
1829 ldterm_kill(wrq, ebsize, tp); in ldterm_docanon()
1830 bpt = tp->t_endmsg; in ldterm_docanon()
1834 if ((tp->t_modes.c_lflag & IEXTEN) && c == tp->t_modes.c_cc[VREPRINT]) { in ldterm_docanon()
1835 ldterm_reprint(wrq, ebsize, tp); in ldterm_docanon()
1846 if (tp->t_state & TS_QUOT) { in ldterm_docanon()
1847 tp->t_state &= ~TS_QUOT; in ldterm_docanon()
1848 if (c == tp->t_modes.c_cc[VEOF]) { in ldterm_docanon()
1854 ldterm_erase(wrq, ebsize, tp); in ldterm_docanon()
1855 bpt = tp->t_endmsg; in ldterm_docanon()
1864 if ((tp->t_modes.c_lflag & XCASE) && in ldterm_docanon()
1866 ldterm_erase(wrq, ebsize, tp); in ldterm_docanon()
1867 bpt = tp->t_endmsg; in ldterm_docanon()
1876 if (c == tp->t_modes.c_cc[VEOF]) { in ldterm_docanon()
1883 if ((tp->t_modes.c_lflag & ECHOCTL) && in ldterm_docanon()
1884 (tp->t_modes.c_lflag & IEXTEN) && in ldterm_docanon()
1885 (tp->t_modes.c_lflag & ECHO)) { in ldterm_docanon()
1886 i = ldterm_echo(c, wrq, ebsize, tp); in ldterm_docanon()
1888 ldterm_outchar('\b', wrq, ebsize, tp); in ldterm_docanon()
1893 ldterm_msg_upstream(q, tp); in ldterm_docanon()
1898 bpt = newmsg(tp); in ldterm_docanon()
1915 if ((tp->t_msglen > ((_TTY_BUFSIZ + 1) - (int)tp->t_maxeuc)) && in ldterm_docanon()
1916 !((tp->t_state & TS_MEUC) && tp->t_eucleft)) { in ldterm_docanon()
1923 if (tp->t_modes.c_iflag & IMAXBEL) { in ldterm_docanon()
1925 ldterm_outchar(CTRL('g'), wrq, ebsize, tp); in ldterm_docanon()
1934 freemsg(tp->t_message); in ldterm_docanon()
1935 tp->t_message = NULL; in ldterm_docanon()
1936 tp->t_endmsg = NULL; in ldterm_docanon()
1937 tp->t_msglen = 0; in ldterm_docanon()
1938 tp->t_rocount = 0; /* if it hasn't been type */ in ldterm_docanon()
1939 tp->t_rocol = 0; /* it hasn't been echoed :-) */ in ldterm_docanon()
1940 if (tp->t_state & TS_MEUC) { in ldterm_docanon()
1941 ASSERT(tp->t_eucp_mp); in ldterm_docanon()
1942 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldterm_docanon()
1944 tp->t_state &= ~TS_SLNCH; in ldterm_docanon()
1945 bpt = newmsg(tp); in ldterm_docanon()
1964 tp->t_endmsg->b_cont = bpt; in ldterm_docanon()
1965 tp->t_endmsg = bpt; in ldterm_docanon()
1968 tp->t_msglen++; /* message length in BYTES */ in ldterm_docanon()
1981 if (tp->t_state & TS_MEUC) { in ldterm_docanon()
1982 if (tp->t_eucleft) { /* if in a multi-byte char already */ in ldterm_docanon()
1983 --tp->t_eucleft; in ldterm_docanon()
1984 *tp->t_eucp++ = 0; /* is a subsequent byte */ in ldterm_docanon()
1986 ldterm_eucwarn(tp); in ldterm_docanon()
1989 *tp->t_eucp++ = in ldterm_docanon()
1990 tp->t_csmethods.ldterm_dispwidth(c, in ldterm_docanon()
1991 (void *)tp, tp->t_modes.c_lflag & ECHOCTL); in ldterm_docanon()
1992 tp->t_codeset = 0; in ldterm_docanon()
1994 *tp->t_eucp++ = in ldterm_docanon()
1995 tp->t_csmethods.ldterm_dispwidth(c, in ldterm_docanon()
1996 (void *)tp, tp->t_modes.c_lflag & ECHOCTL); in ldterm_docanon()
1997 tp->t_eucleft = in ldterm_docanon()
1998 tp->t_csmethods.ldterm_memwidth(c, in ldterm_docanon()
1999 (void *)tp) - 1; in ldterm_docanon()
2000 tp->t_codeset = ldterm_codeset( in ldterm_docanon()
2001 tp->t_csdata.codeset_type, c); in ldterm_docanon()
2014 if (!(tp->t_state & TS_SLNCH) && in ldterm_docanon()
2015 (c == '\n' || (c != '\0' && (c == tp->t_modes.c_cc[VEOL] || in ldterm_docanon()
2016 (c == tp->t_modes.c_cc[VEOL2]))))) { in ldterm_docanon()
2026 ldterm_msg_upstream(q, tp); in ldterm_docanon()
2027 if (tp->t_state & TS_MEUC) { in ldterm_docanon()
2028 ASSERT(tp->t_eucp_mp); in ldterm_docanon()
2029 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldterm_docanon()
2031 if ((bpt = newmsg(tp)) == NULL) in ldterm_docanon()
2037 if (tp->t_rocount++ == 0) in ldterm_docanon()
2038 tp->t_rocol = tp->t_col; in ldterm_docanon()
2039 tp->t_state &= ~(TS_SLNCH|TS_QUOT); in ldterm_docanon()
2045 if ((c == '\\') && (tp->t_modes.c_lflag & IEXTEN) && in ldterm_docanon()
2046 (!(tp->t_state & TS_MEUC) || in ldterm_docanon()
2047 ((tp->t_state & TS_MEUC) && (!tp->t_eucleft)))) in ldterm_docanon()
2048 tp->t_state |= TS_QUOT; in ldterm_docanon()
2054 if (tp->t_state & TS_ERASE) { in ldterm_docanon()
2055 tp->t_state &= ~TS_ERASE; in ldterm_docanon()
2056 if (tp->t_modes.c_lflag & ECHO) in ldterm_docanon()
2057 ldterm_outchar('/', wrq, ebsize, tp); in ldterm_docanon()
2059 if (tp->t_modes.c_lflag & ECHO) in ldterm_docanon()
2060 (void) ldterm_echo(c, wrq, ebsize, tp); in ldterm_docanon()
2066 if (c == '\n' && (tp->t_modes.c_lflag & ECHONL)) in ldterm_docanon()
2067 ldterm_outchar(c, wrq, ebsize, tp); in ldterm_docanon()
2077 ldterm_unget(ldtermstd_state_t *tp) in ldterm_unget() argument
2081 if ((bpt = tp->t_endmsg) == NULL) in ldterm_unget()
2085 tp->t_msglen--; /* one fewer character */ in ldterm_unget()
2091 ldterm_trim(ldtermstd_state_t *tp) in ldterm_trim() argument
2096 ASSERT(tp->t_endmsg); in ldterm_trim()
2097 bpt = tp->t_endmsg; in ldterm_trim()
2104 bp = tp->t_message; in ldterm_trim()
2112 tp->t_endmsg = bp; /* point to that mblk */ in ldterm_trim()
2126 ldterm_rubout(uchar_t c, queue_t *q, size_t ebsize, ldtermstd_state_t *tp) in ldterm_rubout() argument
2133 if (!(tp->t_modes.c_lflag & ECHO)) in ldterm_rubout()
2135 if (tp->t_modes.c_lflag & ECHOE) { in ldterm_rubout()
2139 if (tp->t_rocount == 0) { in ldterm_rubout()
2147 ldterm_reprint(q, ebsize, tp); in ldterm_rubout()
2156 if ((tp->t_modes.c_lflag & XCASE) && in ldterm_rubout()
2159 tp); in ldterm_rubout()
2160 ldterm_outstring(RUBOUT1, 3, q, ebsize, tp); in ldterm_rubout()
2168 if ((tp->t_modes.c_lflag & ECHOCTL) && in ldterm_rubout()
2169 (tp->t_modes.c_lflag & IEXTEN)) in ldterm_rubout()
2171 tp); in ldterm_rubout()
2175 if (tp->t_rocount < tp->t_msglen) { in ldterm_rubout()
2184 ldterm_reprint(q, ebsize, tp); in ldterm_rubout()
2187 tabcols = ldterm_tabcols(tp); in ldterm_rubout()
2189 ldterm_outchar('\b', q, ebsize, tp); in ldterm_rubout()
2193 } else if ((tp->t_modes.c_lflag & ECHOPRT) && in ldterm_rubout()
2194 (tp->t_modes.c_lflag & IEXTEN)) { in ldterm_rubout()
2198 if (!(tp->t_state & TS_ERASE)) { in ldterm_rubout()
2199 ldterm_outchar('\\', q, ebsize, tp); in ldterm_rubout()
2200 tp->t_state |= TS_ERASE; in ldterm_rubout()
2202 (void) ldterm_echo(c, q, ebsize, tp); in ldterm_rubout()
2204 (void) ldterm_echo(tp->t_modes.c_cc[VERASE], q, ebsize, tp); in ldterm_rubout()
2205 tp->t_rocount--; /* we "unechoed" this character */ in ldterm_rubout()
2215 ldterm_tabcols(ldtermstd_state_t *tp) in ldterm_tabcols() argument
2226 col = tp->t_rocol; in ldterm_tabcols()
2232 if (tp->t_state & TS_MEUC) { in ldterm_tabcols()
2233 ASSERT(tp->t_eucp_mp); in ldterm_tabcols()
2234 bp = tp->t_message; in ldterm_tabcols()
2236 readp = tp->t_eucp_mp->b_rptr; in ldterm_tabcols()
2237 endp = tp->t_eucp; in ldterm_tabcols()
2250 if (tp->t_modes.c_oflag & ONLRET) in ldterm_tabcols()
2257 if (tp->t_csdata.codeset_type != in ldterm_tabcols()
2319 bp = tp->t_message; in ldterm_tabcols()
2324 if ((tp->t_modes.c_lflag & ECHOCTL) && in ldterm_tabcols()
2325 (tp->t_modes.c_lflag & IEXTEN)) { in ldterm_tabcols()
2360 if (tp->t_modes.c_oflag & ONLRET) in ldterm_tabcols()
2389 col = tp->t_col - col; in ldterm_tabcols()
2402 ldterm_erase(queue_t *q, size_t ebsize, ldtermstd_state_t *tp) in ldterm_erase() argument
2406 if ((c = ldterm_unget(tp)) != -1) { in ldterm_erase()
2407 ldterm_rubout((unsigned char) c, q, ebsize, tp); in ldterm_erase()
2408 ldterm_trim(tp); in ldterm_erase()
2409 if (tp->t_state & TS_MEUC) in ldterm_erase()
2410 --tp->t_eucp; in ldterm_erase()
2419 ldterm_werase(queue_t *q, size_t ebsize, ldtermstd_state_t *tp) in ldterm_werase() argument
2426 while ((c = ldterm_unget(tp)) == ' ' || c == '\t') { in ldterm_werase()
2427 ldterm_rubout((unsigned char) c, q, ebsize, tp); in ldterm_werase()
2428 ldterm_trim(tp); in ldterm_werase()
2435 ldterm_rubout((unsigned char) c, q, ebsize, tp); in ldterm_werase()
2436 ldterm_trim(tp); in ldterm_werase()
2437 c = ldterm_unget(tp); in ldterm_werase()
2444 tp->t_endmsg->b_wptr++; /* put 'c' back */ in ldterm_werase()
2445 tp->t_msglen++; in ldterm_werase()
2465 ldterm_csi_werase(queue_t *q, size_t ebsize, ldtermstd_state_t *tp) in ldterm_csi_werase() argument
2477 ip = tp->t_eucp - 1; in ldterm_csi_werase()
2481 while ((c = ldterm_unget(tp)) == ' ' || c == '\t') { in ldterm_csi_werase()
2482 tp->t_eucp--; in ldterm_csi_werase()
2483 ldterm_rubout((unsigned char) c, q, ebsize, tp); in ldterm_csi_werase()
2484 ldterm_trim(tp); in ldterm_csi_werase()
2498 tp->t_eucp--; in ldterm_csi_werase()
2517 ldterm_rubout((unsigned char) c, q, ebsize, tp); in ldterm_csi_werase()
2521 if (tp->t_csdata.codeset_type == in ldterm_csi_werase()
2536 ldterm_rubout(' ', q, ebsize, tp); in ldterm_csi_werase()
2539 ldterm_trim(tp); in ldterm_csi_werase()
2541 c = ldterm_unget(tp); in ldterm_csi_werase()
2548 tp->t_endmsg->b_wptr++; /* put 'c' back */ in ldterm_csi_werase()
2549 tp->t_msglen++; in ldterm_csi_werase()
2561 ldterm_kill(queue_t *q, size_t ebsize, ldtermstd_state_t *tp) in ldterm_kill() argument
2569 if ((tp->t_modes.c_lflag & ECHOKE) && in ldterm_kill()
2570 (tp->t_modes.c_lflag & IEXTEN) && in ldterm_kill()
2571 (tp->t_msglen == tp->t_rocount)) { in ldterm_kill()
2572 if (tp->t_state & TS_MEUC) { in ldterm_kill()
2573 ip = tp->t_eucp - 1; in ldterm_kill()
2578 while ((c = ldterm_unget(tp)) != (-1)) { in ldterm_kill()
2579 tp->t_eucp--; in ldterm_kill()
2586 ebsize, tp); in ldterm_kill()
2590 if (tp->t_csdata.codeset_type in ldterm_kill()
2604 tp); in ldterm_kill()
2607 ldterm_trim(tp); in ldterm_kill()
2611 while ((c = ldterm_unget(tp)) != -1) { in ldterm_kill()
2612 ldterm_rubout((unsigned char) c, q, ebsize, tp); in ldterm_kill()
2613 ldterm_trim(tp); in ldterm_kill()
2617 (void) ldterm_echo(tp->t_modes.c_cc[VKILL], q, ebsize, tp); in ldterm_kill()
2618 if (tp->t_modes.c_lflag & ECHOK) in ldterm_kill()
2619 (void) ldterm_echo('\n', q, ebsize, tp); in ldterm_kill()
2620 while (ldterm_unget(tp) != -1) { in ldterm_kill()
2621 if (tp->t_state & TS_MEUC) in ldterm_kill()
2622 --tp->t_eucp; in ldterm_kill()
2623 ldterm_trim(tp); in ldterm_kill()
2625 tp->t_rocount = 0; in ldterm_kill()
2626 if (tp->t_state & TS_MEUC) in ldterm_kill()
2627 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldterm_kill()
2629 tp->t_state &= ~(TS_QUOT|TS_ERASE|TS_SLNCH); in ldterm_kill()
2639 ldterm_reprint(queue_t *q, size_t ebsize, ldtermstd_state_t *tp) in ldterm_reprint() argument
2644 if (tp->t_modes.c_cc[VREPRINT] != (unsigned char) 0) in ldterm_reprint()
2645 (void) ldterm_echo(tp->t_modes.c_cc[VREPRINT], q, ebsize, tp); in ldterm_reprint()
2646 ldterm_outchar('\n', q, ebsize, tp); in ldterm_reprint()
2648 bp = tp->t_message; in ldterm_reprint()
2652 (void) ldterm_echo(*readp++, q, ebsize, tp); in ldterm_reprint()
2655 tp->t_state &= ~TS_ERASE; in ldterm_reprint()
2656 tp->t_rocount = tp->t_msglen; /* we reechoed the entire line */ in ldterm_reprint()
2657 tp->t_rocol = 0; in ldterm_reprint()
2667 ldtermstd_state_t *tp) in ldterm_dononcanon() argument
2676 if (tp->t_modes.c_lflag & (ECHO|ECHONL|IEXTEN)) { in ldterm_dononcanon()
2701 if ((tp->t_modes.c_lflag & IEXTEN) && in ldterm_dononcanon()
2702 !(tp->t_state & TS_SLNCH) && in ldterm_dononcanon()
2704 c == tp->t_modes.c_cc[VLNEXT]) { in ldterm_dononcanon()
2705 if (tp->t_modes.c_lflag & ECHO) in ldterm_dononcanon()
2708 2, wrq, ebsize, tp); in ldterm_dononcanon()
2709 tp->t_state |= TS_SLNCH; in ldterm_dononcanon()
2718 tp->t_state &= ~TS_SLNCH; in ldterm_dononcanon()
2720 if (tp->t_modes.c_lflag & ECHO) { in ldterm_dononcanon()
2724 (void) ldterm_echo(c, wrq, ebsize, tp); in ldterm_dononcanon()
2725 } else if (tp->t_modes.c_lflag & ECHONL) { in ldterm_dononcanon()
2731 ldterm_outchar('\n', wrq, 1, tp); in ldterm_dononcanon()
2742 tp->t_state &= ~TS_SLNCH; in ldterm_dononcanon()
2765 tp->t_endmsg->b_cont = bpt; in ldterm_dononcanon()
2766 tp->t_endmsg = bpt; in ldterm_dononcanon()
2770 roomleft, bytes_in_bp, tp->t_rd_request)); in ldterm_dononcanon()
2778 if (tp->t_rd_request == 0) in ldterm_dononcanon()
2782 MIN(MIN(roomleft, bytes_in_bp), tp->t_rd_request); in ldterm_dononcanon()
2789 tp->t_msglen += bytes_to_move; in ldterm_dononcanon()
2799 tid = %d\n", V_MIN, V_TIME, tp->t_msglen, tp->t_vtid)); in ldterm_dononcanon()
2820 if (tp->t_msglen) in ldterm_dononcanon()
2821 vmin_satisfied(q, tp, 1); in ldterm_dononcanon()
2831 if (tp->t_msglen >= (int)V_MIN) in ldterm_dononcanon()
2832 vmin_satisfied(q, tp, 1); in ldterm_dononcanon()
2841 if (tp->t_msglen >= (int)V_MIN) in ldterm_dononcanon()
2842 vmin_satisfied(q, tp, 1); in ldterm_dononcanon()
2851 vmin_satisfied(q, tp, 1); in ldterm_dononcanon()
2858 return (newmsg(tp)); in ldterm_dononcanon()
2868 ldterm_echo(uchar_t c, queue_t *q, size_t ebsize, ldtermstd_state_t *tp) in ldterm_echo() argument
2872 if (!(tp->t_modes.c_lflag & ECHO)) in ldterm_echo()
2881 if ((tp->t_modes.c_lflag & ECHOCTL) && in ldterm_echo()
2882 (tp->t_modes.c_lflag & IEXTEN)) { in ldterm_echo()
2884 ldterm_outchar('^', q, ebsize, tp); in ldterm_echo()
2886 if (tp->t_modes.c_oflag & OLCUC) in ldterm_echo()
2891 ldterm_outchar('^', q, ebsize, tp); in ldterm_echo()
2895 ldterm_outchar(c, q, ebsize, tp); in ldterm_echo()
2900 c == tp->t_modes.c_cc[VKILL]) { in ldterm_echo()
2901 ldterm_outchar(c, q, ebsize, tp); in ldterm_echo()
2912 ldterm_outchar(uchar_t c, queue_t *q, size_t bsize, ldtermstd_state_t *tp) in ldterm_outchar() argument
2920 if ((tp->t_modes.c_oflag & OPOST) || in ldterm_outchar()
2921 ((tp->t_modes.c_lflag & XCASE) && in ldterm_outchar()
2922 (tp->t_modes.c_lflag & ICANON))) { in ldterm_outchar()
2931 mp = ldterm_output_msg(q, mp, &tp->t_echomp, tp, bsize, 1); in ldterm_outchar()
2936 if ((curbp = tp->t_echomp) != NULL) { in ldterm_outchar()
2956 tp->t_echomp = curbp; in ldterm_outchar()
2968 ldtermstd_state_t *tp) in ldterm_outstring() argument
2971 ldterm_outchar(*cp++, q, bsize, tp); in ldterm_outstring()
2978 newmsg(ldtermstd_state_t *tp) in newmsg() argument
2985 if ((bp = tp->t_endmsg) == NULL) { in newmsg()
2991 tp->t_message = bp; in newmsg()
2992 tp->t_endmsg = bp; in newmsg()
2999 ldterm_msg_upstream(queue_t *q, ldtermstd_state_t *tp) in ldterm_msg_upstream() argument
3004 bp = tp->t_message; in ldterm_msg_upstream()
3007 putnext(q, tp->t_message); in ldterm_msg_upstream()
3014 tp->t_message = NULL; in ldterm_msg_upstream()
3015 tp->t_endmsg = NULL; in ldterm_msg_upstream()
3016 tp->t_msglen = 0; in ldterm_msg_upstream()
3017 tp->t_rocount = 0; in ldterm_msg_upstream()
3018 tp->t_rd_request = 0; in ldterm_msg_upstream()
3019 if (tp->t_state & TS_MEUC) { in ldterm_msg_upstream()
3020 ASSERT(tp->t_eucp_mp); in ldterm_msg_upstream()
3021 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldterm_msg_upstream()
3037 ldtermstd_state_t *tp; in ldterm_wenable() local
3039 tp = (ldtermstd_state_t *)q->q_ptr; in ldterm_wenable()
3043 tp->t_wbufcid = 0; in ldterm_wenable()
3058 ldtermstd_state_t *tp; in ldtermwput() local
3061 tp = (ldtermstd_state_t *)q->q_ptr; in ldtermwput()
3075 if ((tp->t_state & TS_FLUSHWAIT) && in ldtermwput()
3077 tp->t_state &= ~TS_FLUSHWAIT; in ldtermwput()
3089 if ((tp->t_state & TS_ISPTSTTY) && in ldtermwput()
3104 if (tp->t_state & TS_MREAD) in ldtermwput()
3105 vmin_satisfied(RD(q), tp, 0); in ldtermwput()
3121 tp->t_rd_request = *(unsigned int *)mp->b_rptr; in ldtermwput()
3124 if (newmsg(tp) != NULL) { in ldtermwput()
3147 if (tp->t_state & TS_MREAD) { in ldtermwput()
3149 tp, 0); in ldtermwput()
3151 tp->t_state |= TS_MREAD; in ldtermwput()
3158 if (tp->t_msglen) in ldtermwput()
3160 tp, 1); in ldtermwput()
3172 if (tp->t_msglen >= (int)V_MIN) in ldtermwput()
3174 tp, 1); in ldtermwput()
3186 if (tp->t_msglen >= (int)V_MIN) in ldtermwput()
3188 tp, 1); in ldtermwput()
3189 else if (tp->t_msglen) in ldtermwput()
3197 vmin_satisfied(RD(q), tp, 1); in ldtermwput()
3314 ldtermstd_state_t *tp; in ldtermwmsg() local
3318 tp = (ldtermstd_state_t *)q->q_ptr; in ldtermwmsg()
3330 if ((tp->t_modes.c_lflag & FLUSHO) && in ldtermwmsg()
3331 (tp->t_modes.c_lflag & IEXTEN)) { in ldtermwmsg()
3335 tp->t_rocount = 0; in ldtermwmsg()
3340 if (((tp->t_modes.c_oflag & OPOST) || in ldtermwmsg()
3341 ((tp->t_modes.c_lflag & XCASE) && in ldtermwmsg()
3342 (tp->t_modes.c_lflag & ICANON))) && in ldtermwmsg()
3343 (msgdsize(mp) || !(tp->t_state & TS_ISPTSTTY))) { in ldtermwmsg()
3348 tp, OBSIZE, 0); in ldtermwmsg()
3392 if (tp->t_wbufcid) in ldtermwmsg()
3393 qunbufcall(q, tp->t_wbufcid); in ldtermwmsg()
3394 tp->t_wbufcid = qbufcall(q, size, BPRI_MED, ldterm_wenable, q); in ldtermwmsg()
3406 ldtermstd_state_t *tp, size_t bsize, int echoing) in ldterm_output_msg() argument
3469 if ((bytes_left < (int)tp->t_maxeuc)) { in ldterm_output_msg()
3478 if ((tp->t_modes.c_lflag & XCASE) && in ldterm_output_msg()
3479 (tp->t_modes.c_lflag & ICANON)) { in ldterm_output_msg()
3492 if ((tp->t_state & TS_MEUC) && in ldterm_output_msg()
3493 tp->t_eucign == 0 && NOTASCII(c)) { in ldterm_output_msg()
3494 tp->t_eucign = in ldterm_output_msg()
3495 tp->t_csmethods.ldterm_memwidth( in ldterm_output_msg()
3496 c, (void *)tp); in ldterm_output_msg()
3497 tp->t_scratch_len = tp->t_eucign; in ldterm_output_msg()
3499 if (tp->t_csdata.codeset_type != in ldterm_output_msg()
3501 tp->t_col += in ldterm_output_msg()
3502 tp-> in ldterm_output_msg()
3505 (void *)tp, in ldterm_output_msg()
3506 tp->t_modes.c_lflag & in ldterm_output_msg()
3516 if (tp->t_eucign == 0 && omaptab[c] != 0 && in ldterm_output_msg()
3519 tp->t_col++; in ldterm_output_msg()
3533 tp->t_col--; in ldterm_output_msg()
3544 if (!(tp->t_modes.c_oflag & OPOST)) { in ldterm_output_msg()
3545 if (tp->t_eucign > 0) { in ldterm_output_msg()
3546 --tp->t_eucign; in ldterm_output_msg()
3548 tp->t_col++; in ldterm_output_msg()
3560 if (tp->t_eucign == 0 && in ldterm_output_msg()
3561 (tp->t_modes.c_oflag & OLCUC) && in ldterm_output_msg()
3594 if (tp->t_state & TS_MEUC) { in ldterm_output_msg()
3597 (tp->t_modes.c_oflag & OLCUC ? in ldterm_output_msg()
3602 (tp->t_modes.c_oflag & OLCUC ? in ldterm_output_msg()
3612 tp->t_col += bytes_moved; in ldterm_output_msg()
3639 if ((tp->t_state & TS_MEUC) && tp->t_eucign == 0 && in ldterm_output_msg()
3641 tp->t_eucign = tp->t_csmethods.ldterm_memwidth( in ldterm_output_msg()
3642 c, (void *)tp); in ldterm_output_msg()
3643 tp->t_scratch_len = tp->t_eucign; in ldterm_output_msg()
3645 if (tp->t_csdata.codeset_type != in ldterm_output_msg()
3647 tp->t_col += in ldterm_output_msg()
3648 tp->t_csmethods.ldterm_dispwidth(c, in ldterm_output_msg()
3649 (void *)tp, in ldterm_output_msg()
3650 tp->t_modes.c_lflag & ECHOCTL); in ldterm_output_msg()
3684 if (c == '\r' && (tp->t_modes.c_oflag & OCRNL)) { in ldterm_output_msg()
3690 if (tp->t_csdata.codeset_type == LDTERM_CS_TYPE_EUC) { in ldterm_output_msg()
3699 if (tp->t_eucign == 0) in ldterm_output_msg()
3709 if (c == '\n' && (tp->t_modes.c_oflag & ONLCR)) { in ldterm_output_msg()
3710 if (!(tp->t_state & TS_TTCR)) { in ldterm_output_msg()
3711 tp->t_state |= TS_TTCR; in ldterm_output_msg()
3716 tp->t_state &= ~TS_TTCR; in ldterm_output_msg()
3744 if (tp->t_state & TS_MEUC) { in ldterm_output_msg()
3745 if (tp->t_eucign) { in ldterm_output_msg()
3749 tp->t_scratch[tp->t_scratch_len in ldterm_output_msg()
3750 - tp->t_eucign] = c; in ldterm_output_msg()
3752 --tp->t_eucign; in ldterm_output_msg()
3754 if (tp->t_csdata.codeset_type in ldterm_output_msg()
3756 tp->t_eucign <= 0) { in ldterm_output_msg()
3757 tp->t_col += in ldterm_output_msg()
3759 tp->t_scratch, in ldterm_output_msg()
3760 tp->t_scratch_len); in ldterm_output_msg()
3763 if (tp->t_modes.c_oflag & OLCUC) in ldterm_output_msg()
3769 tp->t_col++; in ldterm_output_msg()
3774 if (tp->t_modes.c_oflag & OLCUC) in ldterm_output_msg()
3780 tp->t_col++; in ldterm_output_msg()
3805 if (tp->t_col) in ldterm_output_msg()
3806 tp->t_col--; in ldterm_output_msg()
3807 if (tp->t_modes.c_oflag & BSDLY) { in ldterm_output_msg()
3808 if (tp->t_modes.c_oflag & OFILL) in ldterm_output_msg()
3816 if (tp->t_modes.c_oflag & ONLRET) in ldterm_output_msg()
3818 if ((tp->t_modes.c_oflag & NLDLY) == NL1) in ldterm_output_msg()
3833 if ((tp->t_modes.c_oflag & TABDLY) == XTABS) { in ldterm_output_msg()
3837 tp->t_col++; in ldterm_output_msg()
3838 if ((tp->t_col & 07) == 0) in ldterm_output_msg()
3856 tp->t_col |= 07; in ldterm_output_msg()
3857 tp->t_col++; in ldterm_output_msg()
3858 if (tp->t_modes.c_oflag & OFILL) { in ldterm_output_msg()
3859 if (tp->t_modes.c_oflag & in ldterm_output_msg()
3863 switch (tp->t_modes.c_oflag & in ldterm_output_msg()
3870 count = 1 + (tp->t_col | in ldterm_output_msg()
3883 if ((tp->t_modes.c_oflag & VTDLY) && in ldterm_output_msg()
3884 !(tp->t_modes.c_oflag & OFILL)) in ldterm_output_msg()
3895 if (tp->t_col == 0 && in ldterm_output_msg()
3896 (tp->t_modes.c_oflag & ONOCR)) in ldterm_output_msg()
3900 switch (tp->t_modes.c_oflag & CRDLY) { in ldterm_output_msg()
3903 if (tp->t_modes.c_oflag & OFILL) in ldterm_output_msg()
3906 count = tp->t_col % 2; in ldterm_output_msg()
3910 if (tp->t_modes.c_oflag & OFILL) in ldterm_output_msg()
3917 if (tp->t_modes.c_oflag & OFILL) in ldterm_output_msg()
3923 tp->t_col = 0; in ldterm_output_msg()
3930 if (tp->t_modes.c_oflag & OFILL) { in ldterm_output_msg()
3936 if (tp->t_modes.c_oflag & OFDEL) in ldterm_output_msg()
3943 if ((tp->t_modes.c_lflag & FLUSHO) && in ldterm_output_msg()
3944 (tp->t_modes.c_lflag & IEXTEN)) { in ldterm_output_msg()
4008 ldterm_flush_output(uchar_t c, queue_t *q, ldtermstd_state_t *tp) in ldterm_flush_output() argument
4011 if (tp->t_modes.c_lflag & FLUSHO) in ldterm_flush_output()
4012 tp->t_modes.c_lflag &= ~FLUSHO; in ldterm_flush_output()
4017 if ((tp->t_echomp = allocb(EBSIZE, BPRI_HI)) != NULL) { in ldterm_flush_output()
4018 (void) ldterm_echo(c, q, 1, tp); in ldterm_flush_output()
4019 if (tp->t_msglen != 0) in ldterm_flush_output()
4020 ldterm_reprint(q, EBSIZE, tp); in ldterm_flush_output()
4021 if (tp->t_echomp != NULL) { in ldterm_flush_output()
4022 putnext(q, tp->t_echomp); in ldterm_flush_output()
4023 tp->t_echomp = NULL; in ldterm_flush_output()
4026 tp->t_modes.c_lflag |= FLUSHO; in ldterm_flush_output()
4037 ldtermstd_state_t *tp = (ldtermstd_state_t *)q->q_ptr; in ldterm_dosig() local
4044 if ((!(tp->t_modes.c_lflag & NOFLSH)) || (c == '\0')) { in ldterm_dosig()
4046 if (tp->t_state & TS_TTSTOP) { in ldterm_dosig()
4057 if (tp->t_state & (TS_TBLOCK|TS_IFBLOCK)) { in ldterm_dosig()
4059 tp->t_state &= ~(TS_TBLOCK|TS_IFBLOCK); in ldterm_dosig()
4075 tp->t_state |= TS_FLUSHWAIT; in ldterm_dosig()
4077 if (tp->t_state & TS_TTSTOP) { in ldterm_dosig()
4079 tp->t_state &= ~(TS_TTSTOP|TS_OFBLOCK); in ldterm_dosig()
4084 tp->t_state &= ~TS_QUOT; in ldterm_dosig()
4089 if ((tp->t_echomp = allocb(4, BPRI_HI)) != NULL) { in ldterm_dosig()
4090 if (ldterm_echo(c, WR(q), 4, tp) > 0 || in ldterm_dosig()
4091 (tp->t_state & TS_ISPTSTTY)) in ldterm_dosig()
4092 putnext(WR(q), tp->t_echomp); in ldterm_dosig()
4094 freemsg(tp->t_echomp); in ldterm_dosig()
4095 tp->t_echomp = NULL; in ldterm_dosig()
4109 ldtermstd_state_t *tp; in ldterm_do_ioctl() local
4120 tp = (ldtermstd_state_t *)q->q_ptr; in ldterm_do_ioctl()
4143 oldmodes = tp->t_amodes; in ldterm_do_ioctl()
4144 tp->t_amodes = *cb; in ldterm_do_ioctl()
4145 if ((tp->t_amodes.c_lflag & PENDIN) && in ldterm_do_ioctl()
4146 (tp->t_modes.c_lflag & IEXTEN)) { in ldterm_do_ioctl()
4152 if (tp->t_message != NULL) { in ldterm_do_ioctl()
4153 tp->t_state |= TS_RESCAN; in ldterm_do_ioctl()
4156 tp->t_amodes.c_lflag &= ~PENDIN; in ldterm_do_ioctl()
4158 bcopy(tp->t_amodes.c_cc, tp->t_modes.c_cc, NCCS); in ldterm_do_ioctl()
4164 tp->t_modes.c_cflag = tp->t_amodes.c_cflag; in ldterm_do_ioctl()
4166 ldterm_adjust_modes(tp); in ldterm_do_ioctl()
4167 if (chgstropts(&oldmodes, tp, RD(q)) == (-1)) { in ldterm_do_ioctl()
4200 oldmodes = tp->t_amodes; in ldterm_do_ioctl()
4201 tp->t_amodes.c_iflag = in ldterm_do_ioctl()
4202 (tp->t_amodes.c_iflag & 0xffff0000 | cb->c_iflag); in ldterm_do_ioctl()
4203 tp->t_amodes.c_oflag = in ldterm_do_ioctl()
4204 (tp->t_amodes.c_oflag & 0xffff0000 | cb->c_oflag); in ldterm_do_ioctl()
4205 tp->t_amodes.c_cflag = in ldterm_do_ioctl()
4206 (tp->t_amodes.c_cflag & 0xffff0000 | cb->c_cflag); in ldterm_do_ioctl()
4207 tp->t_amodes.c_lflag = in ldterm_do_ioctl()
4208 (tp->t_amodes.c_lflag & 0xffff0000 | cb->c_lflag); in ldterm_do_ioctl()
4210 bcopy(cb->c_cc, tp->t_modes.c_cc, NCC); in ldterm_do_ioctl()
4212 bcopy(cb->c_cc, tp->t_amodes.c_cc, NCC); in ldterm_do_ioctl()
4216 tp->t_modes.c_cflag = tp->t_amodes.c_cflag; in ldterm_do_ioctl()
4218 ldterm_adjust_modes(tp); in ldterm_do_ioctl()
4219 if (chgstropts(&oldmodes, tp, RD(q)) == (-1)) { in ldterm_do_ioctl()
4253 tp->t_state |= TS_FLUSHWAIT; in ldterm_do_ioctl()
4260 tp->t_state |= TS_FLUSHWAIT; in ldterm_do_ioctl()
4280 if (!(tp->t_state & TS_TTSTOP)) { in ldterm_do_ioctl()
4282 tp->t_state |= (TS_TTSTOP|TS_OFBLOCK); in ldterm_do_ioctl()
4287 if (tp->t_state & TS_TTSTOP) { in ldterm_do_ioctl()
4289 tp->t_state &= ~(TS_TTSTOP|TS_OFBLOCK); in ldterm_do_ioctl()
4295 tp->t_state |= (TS_TBLOCK|TS_IFBLOCK); in ldterm_do_ioctl()
4300 tp->t_state &= ~(TS_TBLOCK|TS_IFBLOCK); in ldterm_do_ioctl()
4378 cp_eucwioc(euciocp, &tp->eucwioc, EUCIN); in ldterm_do_ioctl()
4379 tp->eucwioc.eucw[0] = tp->eucwioc.scrw[0] = 1; in ldterm_do_ioctl()
4389 tp->t_maxeuc = 0; /* reset to say we're NOT */ in ldterm_do_ioctl()
4391 tp->t_state &= ~TS_MEUC; in ldterm_do_ioctl()
4401 if (tp->eucwioc.eucw[i] > tp->t_maxeuc) in ldterm_do_ioctl()
4402 tp->t_maxeuc = tp->eucwioc.eucw[i]; in ldterm_do_ioctl()
4403 if (tp->eucwioc.scrw[i] > 1) in ldterm_do_ioctl()
4404 tp->t_state |= TS_MEUC; in ldterm_do_ioctl()
4406 if ((tp->t_maxeuc > 1) || (tp->t_state & TS_MEUC)) { in ldterm_do_ioctl()
4407 if (!tp->t_eucp_mp) { in ldterm_do_ioctl()
4408 if ((tp->t_eucp_mp = allocb(_TTY_BUFSIZ, in ldterm_do_ioctl()
4410 tp->t_maxeuc = 1; in ldterm_do_ioctl()
4411 tp->t_state &= ~TS_MEUC; in ldterm_do_ioctl()
4429 if (tp->t_msglen) { in ldterm_do_ioctl()
4430 tp->t_eucp = in ldterm_do_ioctl()
4431 tp->t_eucp_mp->b_rptr; in ldterm_do_ioctl()
4432 for (i = tp->t_msglen; i; i--) in ldterm_do_ioctl()
4433 *tp->t_eucp++ = 1; in ldterm_do_ioctl()
4435 tp->t_eucp = in ldterm_do_ioctl()
4436 tp->t_eucp_mp->b_rptr; in ldterm_do_ioctl()
4440 tp->t_state |= TS_MEUC; in ldterm_do_ioctl()
4442 } else if (tp->t_eucp_mp) { in ldterm_do_ioctl()
4443 freemsg(tp->t_eucp_mp); in ldterm_do_ioctl()
4444 tp->t_eucp_mp = NULL; in ldterm_do_ioctl()
4445 tp->t_eucp = NULL; in ldterm_do_ioctl()
4454 bzero(&tp->t_csdata.eucpc_data, in ldterm_do_ioctl()
4457 tp->t_csdata.eucpc_data[0].byte_length = in ldterm_do_ioctl()
4458 tp->eucwioc.eucw[1]; in ldterm_do_ioctl()
4459 tp->t_csdata.eucpc_data[0].screen_width = in ldterm_do_ioctl()
4460 tp->eucwioc.scrw[1]; in ldterm_do_ioctl()
4461 tp->t_csdata.eucpc_data[1].byte_length = in ldterm_do_ioctl()
4462 tp->eucwioc.eucw[2]; in ldterm_do_ioctl()
4463 tp->t_csdata.eucpc_data[1].screen_width = in ldterm_do_ioctl()
4464 tp->eucwioc.scrw[2]; in ldterm_do_ioctl()
4465 tp->t_csdata.eucpc_data[2].byte_length = in ldterm_do_ioctl()
4466 tp->eucwioc.eucw[3]; in ldterm_do_ioctl()
4467 tp->t_csdata.eucpc_data[2].screen_width = in ldterm_do_ioctl()
4468 tp->eucwioc.scrw[3]; in ldterm_do_ioctl()
4469 tp->t_csdata.version = LDTERM_DATA_VERSION; in ldterm_do_ioctl()
4470 tp->t_csdata.codeset_type = LDTERM_CS_TYPE_EUC; in ldterm_do_ioctl()
4476 tp->t_csdata.csinfo_num = in ldterm_do_ioctl()
4478 if (tp->t_csdata.locale_name != (char *)NULL) { in ldterm_do_ioctl()
4479 kmem_free(tp->t_csdata.locale_name, in ldterm_do_ioctl()
4480 strlen(tp->t_csdata.locale_name) + 1); in ldterm_do_ioctl()
4481 tp->t_csdata.locale_name = (char *)NULL; in ldterm_do_ioctl()
4483 tp->t_csmethods = cs_methods[LDTERM_CS_TYPE_EUC]; in ldterm_do_ioctl()
4531 cp_eucwioc(&tp->eucwioc, euciocp, EUCOUT); in ldterm_do_ioctl()
4632 tp->t_maxeuc = maxbytelen; in ldterm_do_ioctl()
4633 tp->t_state &= ~TS_MEUC; in ldterm_do_ioctl()
4635 if (!tp->t_eucp_mp) { in ldterm_do_ioctl()
4636 if (!(tp->t_eucp_mp = allocb(_TTY_BUFSIZ, in ldterm_do_ioctl()
4651 if (tp->t_msglen) { in ldterm_do_ioctl()
4652 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldterm_do_ioctl()
4653 for (i = tp->t_msglen; i; i--) in ldterm_do_ioctl()
4654 *tp->t_eucp++ = 1; in ldterm_do_ioctl()
4656 tp->t_eucp = tp->t_eucp_mp->b_rptr; in ldterm_do_ioctl()
4664 tp->t_state |= TS_MEUC; in ldterm_do_ioctl()
4666 tp->t_csdata.version = csdp->version; in ldterm_do_ioctl()
4667 tp->t_csdata.codeset_type = csdp->codeset_type; in ldterm_do_ioctl()
4668 tp->t_csdata.csinfo_num = csdp->csinfo_num; in ldterm_do_ioctl()
4669 bcopy(csdp->eucpc_data, tp->t_csdata.eucpc_data, in ldterm_do_ioctl()
4672 tp->t_csmethods = cs_methods[csdp->codeset_type]; in ldterm_do_ioctl()
4675 tp->eucwioc.eucw[0] = 1; in ldterm_do_ioctl()
4676 tp->eucwioc.scrw[0] = 1; in ldterm_do_ioctl()
4678 tp->eucwioc.eucw[1] = in ldterm_do_ioctl()
4680 tp->eucwioc.scrw[1] = in ldterm_do_ioctl()
4683 tp->eucwioc.eucw[2] = in ldterm_do_ioctl()
4685 tp->eucwioc.scrw[2] = in ldterm_do_ioctl()
4688 tp->eucwioc.eucw[3] = in ldterm_do_ioctl()
4690 tp->eucwioc.scrw[3] = in ldterm_do_ioctl()
4699 bzero(&tp->eucwioc, EUCSIZE); in ldterm_do_ioctl()
4709 if (tp->t_eucp_mp) { in ldterm_do_ioctl()
4710 freemsg(tp->t_eucp_mp); in ldterm_do_ioctl()
4711 tp->t_eucp_mp = NULL; in ldterm_do_ioctl()
4712 tp->t_eucp = NULL; in ldterm_do_ioctl()
4715 bzero(&tp->eucwioc, EUCSIZE); in ldterm_do_ioctl()
4716 tp->eucwioc.eucw[0] = 1; in ldterm_do_ioctl()
4717 tp->eucwioc.scrw[0] = 1; in ldterm_do_ioctl()
4718 if (tp->t_csdata.locale_name != (char *)NULL) { in ldterm_do_ioctl()
4719 kmem_free(tp->t_csdata.locale_name, in ldterm_do_ioctl()
4720 strlen(tp->t_csdata.locale_name) + 1); in ldterm_do_ioctl()
4722 tp->t_csdata = default_cs_data; in ldterm_do_ioctl()
4723 tp->t_csmethods = cs_methods[LDTERM_CS_TYPE_EUC]; in ldterm_do_ioctl()
4727 if (tp->t_csdata.locale_name != (char *)NULL) { in ldterm_do_ioctl()
4728 kmem_free(tp->t_csdata.locale_name, in ldterm_do_ioctl()
4729 strlen(tp->t_csdata.locale_name) + 1); in ldterm_do_ioctl()
4732 tp->t_csdata.locale_name = (char *)kmem_alloc( in ldterm_do_ioctl()
4734 (void) strcpy(tp->t_csdata.locale_name, in ldterm_do_ioctl()
4737 tp->t_csdata.locale_name = (char *)NULL; in ldterm_do_ioctl()
4756 csdp->version = tp->t_csdata.version; in ldterm_do_ioctl()
4757 csdp->codeset_type = tp->t_csdata.codeset_type; in ldterm_do_ioctl()
4758 csdp->csinfo_num = tp->t_csdata.csinfo_num; in ldterm_do_ioctl()
4759 csdp->pad = tp->t_csdata.pad; in ldterm_do_ioctl()
4760 if (tp->t_csdata.locale_name) { in ldterm_do_ioctl()
4762 tp->t_csdata.locale_name); in ldterm_do_ioctl()
4766 bcopy(tp->t_csdata.eucpc_data, csdp->eucpc_data, in ldterm_do_ioctl()
4786 tp->t_state |= TS_ISPTSTTY; in ldterm_do_ioctl()
4801 chgstropts(struct termios *oldmodep, ldtermstd_state_t *tp, queue_t *q) in chgstropts() argument
4807 if ((oldmodep->c_lflag ^ tp->t_modes.c_lflag) & ICANON) { in chgstropts()
4815 if (tp->t_modes.c_lflag & ICANON) { in chgstropts()
4828 vmin_satisfied(q, tp, 0); in chgstropts()
4835 if ((oldmodep->c_lflag ^ tp->t_modes.c_lflag) & TOSTOP) { in chgstropts()
4839 if (tp->t_modes.c_lflag & TOSTOP) in chgstropts()
4867 ldtermstd_state_t *tp; in ldterm_ioctl_reply() local
4871 tp = (ldtermstd_state_t *)q->q_ptr; in ldterm_ioctl_reply()
4890 *cb = tp->t_amodes; in ldterm_ioctl_reply()
4906 cb->c_iflag = tp->t_amodes.c_iflag; /* all except the */ in ldterm_ioctl_reply()
4907 cb->c_oflag = tp->t_amodes.c_oflag; /* cb->c_cflag */ in ldterm_ioctl_reply()
4908 cb->c_lflag = tp->t_amodes.c_lflag; in ldterm_ioctl_reply()
4911 cb->c_cflag = tp->t_amodes.c_cflag; in ldterm_ioctl_reply()
4914 bcopy(tp->t_amodes.c_cc, cb->c_cc, NCC); in ldterm_ioctl_reply()
4928 vmin_satisfied(queue_t *q, ldtermstd_state_t *tp, int sendup) in vmin_satisfied() argument
4931 if (tp->t_vtid != 0) { in vmin_satisfied()
4932 DEBUG4(("vmin_satisfied: cancelled timer id %d\n", tp->t_vtid)); in vmin_satisfied()
4933 (void) quntimeout(q, tp->t_vtid); in vmin_satisfied()
4934 tp->t_vtid = 0; in vmin_satisfied()
4937 if (tp->t_msglen == 0 && V_MIN) { in vmin_satisfied()
4943 (tp->t_msglen >= LDCHUNK)) { in vmin_satisfied()
4944 ldterm_msg_upstream(q, tp); in vmin_satisfied()
4952 tp->t_state &= ~TS_MREAD; in vmin_satisfied()
4958 ldtermstd_state_t *tp; in vmin_settimer() local
4960 tp = (ldtermstd_state_t *)q->q_ptr; in vmin_settimer()
4965 if (tp->t_state & TS_CLOSE) in vmin_settimer()
4972 if (tp->t_vtid) { in vmin_settimer()
4976 tp->t_vtid)); in vmin_settimer()
4980 tp->t_vtid)); in vmin_settimer()
4982 (void) quntimeout(q, tp->t_vtid); in vmin_settimer()
4983 tp->t_vtid = 0; in vmin_settimer()
4985 tp->t_vtid = qtimeout(q, vmin_timed_out, q, in vmin_settimer()
4987 DEBUG4(("vmin_settimer: timer started, tid = %d\n", tp->t_vtid)); in vmin_settimer()
4998 ldtermstd_state_t *tp; in vmin_timed_out() local
5000 tp = (ldtermstd_state_t *)q->q_ptr; in vmin_timed_out()
5002 DEBUG4(("vmin_timed_out: tid = %d\n", tp->t_vtid)); in vmin_timed_out()
5004 tp->t_vtid = 0; in vmin_timed_out()
5005 vmin_satisfied(q, tp, 1); in vmin_timed_out()
5023 ldterm_adjust_modes(ldtermstd_state_t *tp) in ldterm_adjust_modes() argument
5026 DEBUG6(("original iflag = %o\n", tp->t_modes.c_iflag)); in ldterm_adjust_modes()
5027 tp->t_modes.c_iflag = tp->t_amodes.c_iflag & ~(tp->t_dmodes.c_iflag); in ldterm_adjust_modes()
5028 tp->t_modes.c_oflag = tp->t_amodes.c_oflag & ~(tp->t_dmodes.c_oflag); in ldterm_adjust_modes()
5029 tp->t_modes.c_lflag = tp->t_amodes.c_lflag & ~(tp->t_dmodes.c_lflag); in ldterm_adjust_modes()
5030 DEBUG6(("driver iflag = %o\n", tp->t_dmodes.c_iflag)); in ldterm_adjust_modes()
5031 DEBUG6(("apparent iflag = %o\n", tp->t_amodes.c_iflag)); in ldterm_adjust_modes()
5032 DEBUG6(("effective iflag = %o\n", tp->t_modes.c_iflag)); in ldterm_adjust_modes()
5051 ldterm_csi_erase(queue_t *q, size_t ebsize, ldtermstd_state_t *tp) in ldterm_csi_erase() argument
5060 if (tp->t_eucleft) { in ldterm_csi_erase()
5063 ldterm_eucwarn(tp); in ldterm_csi_erase()
5066 bottom = tp->t_eucp_mp->b_rptr; in ldterm_csi_erase()
5067 p = tp->t_eucp - 1; /* previous byte */ in ldterm_csi_erase()
5096 if ((c = ldterm_unget(tp)) != (-1)) { in ldterm_csi_erase()
5097 ldterm_trim(tp); in ldterm_csi_erase()
5103 if (tp->t_csdata.codeset_type == LDTERM_CS_TYPE_UTF8) { in ldterm_csi_erase()
5110 ldterm_rubout(' ', q, ebsize, tp); in ldterm_csi_erase()
5115 tp->t_eucp = p; in ldterm_csi_erase()
5128 ldterm_eucwarn(ldtermstd_state_t *tp) in ldterm_eucwarn() argument
5130 ++tp->t_eucwarn; in ldterm_eucwarn()
5132 if ((tp->t_eucwarn > EUC_WARNCNT) && !(tp->t_state & TS_WARNED)) { in ldterm_eucwarn()
5135 (void *)tp); in ldterm_eucwarn()
5138 tp->t_state |= TS_WARNED; in ldterm_eucwarn()
5222 ldtermstd_state_t *tp = (ldtermstd_state_t *)p; in __ldterm_dispwidth_euc() local
5243 return (tp->eucwioc.scrw[2]); in __ldterm_dispwidth_euc()
5245 return (tp->eucwioc.scrw[3]); in __ldterm_dispwidth_euc()
5247 return (tp->eucwioc.scrw[1]); in __ldterm_dispwidth_euc()
5264 ldtermstd_state_t *tp = (ldtermstd_state_t *)p; in __ldterm_memwidth_euc() local
5270 return (tp->eucwioc.eucw[2]); in __ldterm_memwidth_euc()
5272 return (tp->eucwioc.eucw[3]); in __ldterm_memwidth_euc()
5274 return (tp->eucwioc.eucw[1]); in __ldterm_memwidth_euc()
5283 ldtermstd_state_t *tp = (ldtermstd_state_t *)p; in __ldterm_dispwidth_pccs() local
5304 for (i = 0; i < tp->t_csdata.csinfo_num; i++) { in __ldterm_dispwidth_pccs()
5305 if (c >= tp->t_csdata.eucpc_data[i].msb_start && in __ldterm_dispwidth_pccs()
5306 c <= tp->t_csdata.eucpc_data[i].msb_end) in __ldterm_dispwidth_pccs()
5307 return (tp->t_csdata.eucpc_data[i].screen_width); in __ldterm_dispwidth_pccs()
5321 ldtermstd_state_t *tp = (ldtermstd_state_t *)p; in __ldterm_memwidth_pccs() local
5324 for (i = 0; i < tp->t_csdata.csinfo_num; i++) { in __ldterm_memwidth_pccs()
5325 if (c >= tp->t_csdata.eucpc_data[i].msb_start && in __ldterm_memwidth_pccs()
5326 c <= tp->t_csdata.eucpc_data[i].msb_end) in __ldterm_memwidth_pccs()
5327 return (tp->t_csdata.eucpc_data[i].byte_length); in __ldterm_memwidth_pccs()
5343 ldtermstd_state_t *tp = (ldtermstd_state_t *)p; in __ldterm_dispwidth_utf8() local
5364 if (tp->t_csdata.codeset_type != LDTERM_CS_TYPE_UTF8) in __ldterm_dispwidth_utf8()
5386 ldtermstd_state_t *tp = (ldtermstd_state_t *)p; in __ldterm_memwidth_utf8() local
5393 if (tp->t_csdata.codeset_type != LDTERM_CS_TYPE_UTF8) in __ldterm_memwidth_utf8()