register volatile struct zschan *zc = zs_conschan; register int s;
volatile struct zschan *zc = zs_conschan; int s;
zscnputc(c)	int c;{	register volatile struct zschan *zc = zs_conschan;	register int s;	if (c == '\n')		zscnputc('\r');	/*	 * Must block output interrupts (i.e., raise to >= splzs) without	 * lowering current ipl.  Need a better way.	 */	s = splhigh();	if (CPU_ISSUN4C && s <= (12 << 8)) /* XXX */		(void) splzs();	while ((zc->zc_csr & ZSRR0_TX_READY) == 0)		ZS_DELAY();	/*	 * If transmitter was busy doing regular tty I/O (ZSWR1_TIE on),	 * defer our output until the transmit interrupt runs. We still	 * sync with TX_READY so we can get by with a single-char "queue".	 */	if (zs_conscs != NULL && (zs_conscs->cs_creg[1] & ZSWR1_TIE)) {		/*		 * If previous not yet done, send it now; zsxint()		 * will field the interrupt for our char, but doesn't		 * care. We're running at sufficiently high spl for		 * this to work.		 */		if (zs_conscs->cs_deferred_cc != 0)			zc->zc_data = zs_conscs->cs_deferred_cc;		zs_conscs->cs_deferred_cc = c;		splx(s);		return;	}	zc->zc_data = c;	delay(2);	splx(s);}