SRI-NOSC/new/tm.diffs

31a32,34
> #define TMopen	0001
> #define TMeof	0002	/* last read an EOF */
> #define TMflush	0004	/* purge all I/O to this device */
68c71
< 		t_openf[dminor]++;
---
> 		t_openf[dminor] = TMopen;
74c77
< tmclose(dev, flag)
---
> tmclose(adev, flag)
76c79
< 	register int dminor;
---
> 	register int dminor, dev;
77a81
> 	dev = adev;
80,82c84,86
< 		tcommand(dminor, WEOF);
< 		tcommand(dminor, WEOF);
< 		tcommand(dminor, dev&NOREW ? SREV : REW);
---
> 		tcommand(dev, WEOF);
> 		tcommand(dev, WEOF);
> 		tcommand(dev, dev&NOREW ? SREV : REW);
85,87c89,91
< 			tcommand(dminor, REW);
< 		else if(t_openf[dminor] != -1)
< 			tcommand(dminor, SFORW);
---
> 			tcommand(dev, REW);
> 		else if((t_openf[dminor] & TMeof) == 0)
> 			tcommand(dev, SFORW);
170c174
< 	com = ((unit=bp->b_dev.d_minor&07)<<8) | ((bp->b_xmem & 03) << 4) | DENS;
---
> 	com = ((bp->b_dev.d_minor&~NOREW)<<8) | ((bp->b_xmem & 03) << 4);
185c189,190
< 	if (t_openf[unit] < 0 || (TMADDR->tmcs & CRDY)==0) {
---
> 	unit = bp->b_dev.d_minor&07;
> 	if ((t_openf[unit] & TMflush) || (TMADDR->tmcs & CRDY)==0) {
189a195
> 	t_openf[unit] =& ~TMeof;
251,253c257,265
< 		} else
< 			if(bp != &rtmbuf && (TMADDR->tmer&EOF)==0)
< 				t_openf[unit] = -1;
---
> 		} else if (TMADDR->tmer&EOF) {
> 			t_openf[unit] =| TMeof;
> 			if (bp != &rtmbuf)	/* flush future I/O on */
> 				t_openf[unit] =| TMflush; /* cooked device */
> 			bp->b_resid = bp->b_wcount << 1;
> 			tmdone();
> 			tmstart();
> 			return;
> 		}
255,256c267
< 			else
< 				deverror(bp, TMADDR->tmer, 0);
---
> 		else	deverror(bp, TMADDR->tmer, 0);