+ dzaddr->dzcsr &= ~(DZ_RIE|DZ_MIE); /* the manual says this song */
+ dzaddr->dzcsr |= DZ_RIE|DZ_MIE; /* and dance is necessary */
+ while (dzaddr->dzcsr & DZ_MSC) { /* DZ32 modem change interrupt */
+ c = dzaddr->dzmtsr;
+ tp = tp0 + (c&7);
+ if (tp >= &dz_tty[dz_cnt])
+ break;
+ dzaddr->dzlcs = c&7; /* get status of modem lines */
+ dzwait(dzaddr); /* wait for them */
+ if (c & DZ_CD) /* carrier status change? */
+ if (dzaddr->dzlcs & DZ_CD) { /* carrier up? */
+ if ((tp->t_state&TS_CARR_ON) == 0) {
+ wakeup((caddr_t)&tp->t_rawq);
+ tp->t_state |= TS_CARR_ON;
+ }
+ } else { /* no carrier */
+ if (tp->t_state&TS_CARR_ON) {
+ gsignal(tp->t_pgrp, SIGHUP);
+ gsignal(tp->t_pgrp, SIGCONT);
+ dzaddr->dzlcs = DZ_ACK|(c&7);
+ flushtty(tp, FREAD|FWRITE);
+ }
+ tp->t_state &= ~TS_CARR_ON;
+ }
+ }