🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: net.bugs.2bsd
Article #51

LMDMBUF and LNOHANG with dz

#51
From: cincyjreuter
Date: Mon, 03 May 1982 08:28
73 lines
2338 bytes
The dz and dh drivers for 2.8BSD don't support the LMDMBUF and LNOHANG
options that will allow a device to use carrier-detect to handshake.
I had to do this for an Epson MX-100 with a 2k buffer serial option (I
understand they now have a 2k buffer serial option that does XON and XOFF
so get that if you're buying Epsons...) so here is the diff with the fixed.

This still didn't quite cut it on an 11/23 because the callouts didn't
always get processed fast enough to detect the change in CD before the buffer
filled.  I plan to call dzscan from dzxint every 16 interrupts or so, but
that's a kluge so I'm not publishing it.

diff dz.c dz.c.old
28d27
< int	dzsoftCAR[NDZ11];
113d111
< 	dzsoftCAR[dev] = 0;
182c180
< 	if ( (tp->t_flags&RAW) || (tp->t_flags&LLITOUT) )
---
> 	if (tp->t_flags&RAW)
286c284
< 	if (flag == OFF) {
---
> 	if (flag==OFF)
288,290c286
< 	} else {
< 		dzaddr->dzdtr |= bit;
< 	}
---
> 	else	dzaddr->dzdtr |= bit;
305,314c301,303
< 			if (dzsoftCAR[i] == 0) {
< 				if ( (tp->t_state&WOPEN)==0 &&
< 				    (tp->t_local&LMDMBUF) ) {
< 					tp->t_state &= ~TTSTOP;
< 					ttstart(tp);
< 				} else {
< 					wakeup( (caddr_t)&tp->t_rawq );
< 					tp->t_state |= CARR_ON;
< 				}
< 				dzsoftCAR[i] = 1;
---
> 			if ((tp->t_state&CARR_ON)==0) {
> 				wakeup((caddr_t)&tp->t_rawq);
> 				tp->t_state |= CARR_ON;
317,323c306,309
< 			if (dzsoftCAR[i] == 1) {
< 				if ( (tp->t_state&WOPEN)==0 &&
< 				    (tp->t_local&LMDMBUF) )
< 					tp->t_state |= TTSTOP;
< 				else if ( (tp->t_state&WOPEN)==0 &&
< 				    (tp->t_local&LNOHANG)==0 ) {
< 					signal( tp->t_pgrp, SIGHUP );
---
> 			if ((tp->t_state&CARR_ON) &&
> 			    (tp->t_local&LNOHANG)==0) {
> 				if (tp->t_state&ISOPEN) {
> 					signal(tp->t_pgrp, SIGHUP);
325,328c311,313
< 					flushtty( tp, FREAD|FWRITE );
< 				} else
< 					tp->t_state &= ~CARR_ON;
< 				dzsoftCAR[i] = 0;
---
> 					flushtty(tp, FREAD|FWRITE);
> 				}
> 				tp->t_state &= ~CARR_ON;
332c317
< 	timeout(dzscan, (caddr_t)0, 4);
---
> 	timeout(dzscan, (caddr_t)0, 120);

	Jim Reuter
Technical Details
Message-ID: <anews.Acincy.1109>
Path: arc1-ca.pugleaf.net!utzoo!decvax!harpo!zeppo!wheps!eagle!mhuxt!cbosg!cincy!jreuter

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!decvax!harpo!zeppo!wheps!eagle!mhuxt!cbosg!cincy!jreuter
From: cincy!jreuter
Newsgroups: net.bugs.2bsd
Subject: LMDMBUF and LNOHANG with dz
Date: Mon, 03 May 1982 08:28:35 +0000
Message-ID: <anews.Acincy.1109>