Subject: chflags - immutable|appendonly files come to 2BSD (#204 - Part 8 of 14)
Index:	bin,etc,lib,sys/many_files 2.11BSD

Description:
	Files/directories can not be declared append-only, immutable, archived 
	or not to be dumped under 2.11BSD.

	dump(8) lacked the ability to bypass files marked for 'nodump'.

	Upper case only and Hazeltine terminal support made the tty driver 
	(and several utilities - 'vi' and 'getty' to name two) needlessly
	complicated and larger (especially since those devices are obsolete).

	open(2) can not provide for atomically obtaining a flock(2)'d
	file descriptor.

	open(2)ing with O_NDELAY (now called O_NONBLOCK) would not wait
	for carrier on the first i/o operation.

	Obsolete stub system calls 'setdopt' and 'getdopt' were still
	present in the kernel even though they have never done anything
	except take up space.

Repeat-By:
	This section does not apply this time since this is an 'update'
	which adds new functionality rather than fixing an existing bug.

Fix:
	Refer to part 1 (#197) for the complete description and installation
	instructions.

	This is part 8 of 14 (#204).

	Files affected by this part are:

/usr/src/sys/conf/newvers.sh
/usr/src/sys/pdpuba/dh.c
/usr/src/sys/pdpuba/dhu.c
/usr/src/sys/pdpuba/dhv.c
/usr/src/sys/pdpuba/dn.c
/usr/src/sys/pdpuba/dr.c
/usr/src/sys/pdpuba/dz.c
/usr/src/sys/pdpuba/lp.c
/usr/src/sys/pdpuba/tmscp.c
/usr/src/sys/pdpuba/ts.c
/usr/src/sys/GENERIC/Makefile
/usr/src/sys/OTHERS/berknet/tty_bk.c
/usr/src/sys/OTHERS/dmc11/dmc.c
/usr/src/sys/OTHERS/du11/du.c

=====================cut  here========================
*** /usr/src/sys/conf/newvers.sh.old	Wed Dec 19 10:13:11 1990
--- /usr/src/sys/conf/newvers.sh	Sat Nov 26 17:34:30 1994
***************
*** 4,10 ****
  # All rights reserved.  The Berkeley software License Agreement
  # specifies the terms and conditions for redistribution.
  #
! #	@(#)newvers.sh	1.5 (Berkeley) 6/8/85
  #
  if [ ! -r version ]; then echo 0 > version; fi
  touch version
--- 4,10 ----
  # All rights reserved.  The Berkeley software License Agreement
  # specifies the terms and conditions for redistribution.
  #
! #	@(#)newvers.sh	1.6 (2.11BSD GTE) 11/26/94
  #
  if [ ! -r version ]; then echo 0 > version; fi
  touch version
***************
*** 14,21 ****
  	date = $4 " " $5 " " $6 " " $7 " " $8 " " $9;
  }\
  END {
- 	printf "char sccs[] = \"@(#)2.11 BSD #%d: %s (%s@%s:%s)\\n\";\n",\
- 		version, date, user, host, dir ;\
  	printf "char version[] = \"2.11 BSD UNIX #%d: %s\\n", \
  		version, date; \
  	printf "    %s@%s:%s\\n\";\n", user, host, dir;
--- 14,19 ----
*** /usr/src/sys/pdpuba/dh.c.old	Sun Jan  3 12:57:36 1993
--- /usr/src/sys/pdpuba/dh.c	Thu Dec 15 20:21:31 1994
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)dh.c	1.2 (2.10.1BSD Berkeley) 8/25/89
   */
  
  /*
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)dh.c	1.3 (2.11BSD GTE) 11/29/94
   */
  
  /*
***************
*** 185,191 ****
  
  	unit = UNIT(dev);
  	tp = &dh11[unit];
! 	(*linesw[tp->t_line].l_close)(tp);
  	((struct dhdevice *)(tp->t_addr))->dhbreak &= ~(1<<(unit&017));
  	if (tp->t_state&TS_HUPCLS || (tp->t_state&TS_ISOPEN)==0)
  		dmctl(unit, DML_OFF, DMSET);
--- 185,191 ----
  
  	unit = UNIT(dev);
  	tp = &dh11[unit];
! 	(*linesw[tp->t_line].l_close)(tp, flag);
  	((struct dhdevice *)(tp->t_addr))->dhbreak &= ~(1<<(unit&017));
  	if (tp->t_state&TS_HUPCLS || (tp->t_state&TS_ISOPEN)==0)
  		dmctl(unit, DML_OFF, DMSET);
***************
*** 192,213 ****
  	ttyclose(tp);
  }
  
! dhread(dev, uio)
  	dev_t dev;
  	struct uio *uio;
  {
  	register struct tty *tp = &dh11[UNIT(dev)];
  
! 	return ((*linesw[tp->t_line].l_read)(tp, uio));
  }
  
! dhwrite(dev, uio)
  	dev_t dev;
  	struct uio *uio;
  {
  	register struct tty *tp = &dh11[UNIT(dev)];
  
! 	return ((*linesw[tp->t_line].l_write)(tp, uio));
  }
  
  /*
--- 192,214 ----
  	ttyclose(tp);
  }
  
! dhread(dev, uio, flag)
  	dev_t dev;
  	struct uio *uio;
+ 	int flag;
  {
  	register struct tty *tp = &dh11[UNIT(dev)];
  
! 	return ((*linesw[tp->t_line].l_read)(tp, uio, flag));
  }
  
! dhwrite(dev, uio, flag)
  	dev_t dev;
  	struct uio *uio;
  {
  	register struct tty *tp = &dh11[UNIT(dev)];
  
! 	return ((*linesw[tp->t_line].l_write)(tp, uio, flag));
  }
  
  /*
*** /usr/src/sys/pdpuba/dhu.c.old	Sun Jan  3 13:29:37 1993
--- /usr/src/sys/pdpuba/dhu.c	Wed Nov 30 21:49:38 1994
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)dhu.c	2.0 (2.11BSD GTE) 1/3/93
   */
  
  /*
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)dhu.c	2.1 (2.11BSD GTE) 11/29/94
   */
  
  /*
***************
*** 199,205 ****
  
  	unit = UNIT(dev);
  	tp = &dhu_tty[unit];
! 	(*linesw[tp->t_line].l_close)(tp);
  	(void) dhumctl(unit, (long)DHU_BRK, DMBIC);
  	if ((tp->t_state&(TS_HUPCLS|TS_WOPEN)) || (tp->t_state&TS_ISOPEN)==0)
  #ifdef PORTSELECTOR
--- 199,205 ----
  
  	unit = UNIT(dev);
  	tp = &dhu_tty[unit];
! 	(*linesw[tp->t_line].l_close)(tp, flag);
  	(void) dhumctl(unit, (long)DHU_BRK, DMBIC);
  	if ((tp->t_state&(TS_HUPCLS|TS_WOPEN)) || (tp->t_state&TS_ISOPEN)==0)
  #ifdef PORTSELECTOR
***************
*** 217,238 ****
  	ttyclose(tp);
  }
  
! dhuread(dev, uio)
  	dev_t dev;
  	struct uio *uio;
  {
  	register struct tty *tp = &dhu_tty[UNIT(dev)];
  
! 	return ((*linesw[tp->t_line].l_read)(tp, uio));
  }
  
! dhuwrite(dev, uio)
  	dev_t dev;
  	struct uio *uio;
  {
  	register struct tty *tp = &dhu_tty[UNIT(dev)];
  
! 	return ((*linesw[tp->t_line].l_write)(tp, uio));
  }
  
  /*
--- 217,238 ----
  	ttyclose(tp);
  }
  
! dhuread(dev, uio, flag)
  	dev_t dev;
  	struct uio *uio;
  {
  	register struct tty *tp = &dhu_tty[UNIT(dev)];
  
! 	return ((*linesw[tp->t_line].l_read)(tp, uio, flag));
  }
  
! dhuwrite(dev, uio, flag)
  	dev_t dev;
  	struct uio *uio;
  {
  	register struct tty *tp = &dhu_tty[UNIT(dev)];
  
! 	return ((*linesw[tp->t_line].l_write)(tp, uio, flag));
  }
  
  /*
*** /usr/src/sys/pdpuba/dhv.c.old	Sun Jan  3 13:27:09 1993
--- /usr/src/sys/pdpuba/dhv.c	Wed Nov 30 21:49:52 1994
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)dhv.c	2.0 (2.11BSD Berkeley) 12/22/91
   */
  
  /*
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)dhv.c	2.1 (2.11BSD Berkeley) 11/29/94
   */
  
  /*
***************
*** 199,205 ****
  	tp = &dhv_tty[unit];
  	s = spltty();
  	if ( !(tp->t_state & TS_ISOPEN) || tp->t_dev != dev ) return;
! 	(*linesw[tp->t_line].l_close)(tp);
  	(void) dhvmctl(unit, (long)DHV_BRK, DMBIC);
  	(void) dhvmctl(unit, (long)DHV_OFF, DMSET);
  	if ( CDWAIT(tp->t_dev) ||
--- 199,205 ----
  	tp = &dhv_tty[unit];
  	s = spltty();
  	if ( !(tp->t_state & TS_ISOPEN) || tp->t_dev != dev ) return;
! 	(*linesw[tp->t_line].l_close)(tp, flag);
  	(void) dhvmctl(unit, (long)DHV_BRK, DMBIC);
  	(void) dhvmctl(unit, (long)DHV_OFF, DMSET);
  	if ( CDWAIT(tp->t_dev) ||
***************
*** 224,245 ****
      return ( ttselect ( dev & ~0300, rw ) );
  }
  
! dhvread(dev, uio)
  	dev_t dev;
  	struct uio *uio;
  {
  	register struct tty *tp = &dhv_tty[UNIT(dev)];
  
!     return((*linesw[tp->t_line].l_read) (tp, uio));
  }
  
! dhvwrite(dev, uio)
  	dev_t dev;
  	struct uio *uio;
  {
  	register struct tty *tp = &dhv_tty[UNIT(dev)];
  
!     return((*linesw[tp->t_line].l_write) (tp, uio));
  }
  
  /*
--- 224,247 ----
      return ( ttselect ( dev & ~0300, rw ) );
  }
  
! dhvread(dev, uio, flag)
  	dev_t dev;
  	struct uio *uio;
+ 	int flag;
  {
  	register struct tty *tp = &dhv_tty[UNIT(dev)];
  
!     return((*linesw[tp->t_line].l_read) (tp, uio, flag));
  }
  
! dhvwrite(dev, uio, flag)
  	dev_t dev;
  	struct uio *uio;
+ 	int flag;
  {
  	register struct tty *tp = &dhv_tty[UNIT(dev)];
  
!     return((*linesw[tp->t_line].l_write) (tp, uio, flag));
  }
  
  /*
*** /usr/src/sys/pdpuba/dn.c.old	Tue Apr  3 21:25:01 1990
--- /usr/src/sys/pdpuba/dn.c	Wed Nov 30 21:33:36 1994
***************
*** 1,5 ****
  /*
!  *	SCCS id	@(#)dn.c	2.1 (Berkeley)	8/5/83
   */
  
  /*
--- 1,5 ----
  /*
!  *	SCCS id	@(#)dn.c	2.2 (2.11BSD GTE) 11/29/94
   */
  
  /*
***************
*** 44,50 ****
  	return(0);
  }
  
! dnclose(dev)
  register dev_t	dev;
  {
  	dev = minor(dev);
--- 44,50 ----
  	return(0);
  }
  
! dnclose(dev, flag)
  register dev_t	dev;
  {
  	dev = minor(dev);
***************
*** 52,60 ****
  	return(0);
  }
  
! dnwrite(dev, uio)
  register dev_t	dev;
  register struct uio *uio;
  {
  	register int c, *dp;
  	int s;
--- 52,61 ----
  	return(0);
  }
  
! dnwrite(dev, uio, flag)
  register dev_t	dev;
  register struct uio *uio;
+ 	int flag;
  {
  	register int c, *dp;
  	int s;
*** /usr/src/sys/pdpuba/dr.c.old	Sat Jan  2 23:28:15 1993
--- /usr/src/sys/pdpuba/dr.c	Wed Nov 30 21:34:39 1994
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)dr.c	1.3 (2.11BSD GTE) 1/2/93
   */
  
  /*
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)dr.c	1.4 (2.11BSD GTE) 11/30/94
   */
  
  /*
***************
*** 75,81 ****
  	return(0);
  }
  
! drclose(dev)
  dev_t dev;
  {
  	register int unit;
--- 75,81 ----
  	return(0);
  }
  
! drclose(dev, flag)
  dev_t dev;
  {
  	register int unit;
*** /usr/src/sys/pdpuba/dz.c.old	Fri Dec 31 23:26:33 1993
--- /usr/src/sys/pdpuba/dz.c	Wed Nov 30 21:50:20 1994
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)dz.c	1.2 (2.11BSD GTE) 12/31/93
   */
  
  /*
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)dz.c	1.3 (2.11BSD GTE) 11/29/94
   */
  
  /*
***************
*** 165,170 ****
--- 165,171 ----
  /*ARGSUSED*/
  dzclose(dev, flag)
  	dev_t dev;
+ 	int flag;
  {
  	register struct tty *tp;
  	register int unit;
***************
*** 174,180 ****
  	unit = UNIT(dev);
  	dz = unit >> 3;
  	tp = &dz_tty[unit];
! 	(*linesw[tp->t_line].l_close)(tp);
  	dzaddr = dzpdma[unit].pd_addr;
  	dzaddr->dzbrk = (dz_brk[dz] &= ~(1 << (unit&07)));
  	if ((tp->t_state&(TS_HUPCLS|TS_WOPEN)) || (tp->t_state&TS_ISOPEN) == 0)
--- 175,181 ----
  	unit = UNIT(dev);
  	dz = unit >> 3;
  	tp = &dz_tty[unit];
! 	(*linesw[tp->t_line].l_close)(tp, flag);
  	dzaddr = dzpdma[unit].pd_addr;
  	dzaddr->dzbrk = (dz_brk[dz] &= ~(1 << (unit&07)));
  	if ((tp->t_state&(TS_HUPCLS|TS_WOPEN)) || (tp->t_state&TS_ISOPEN) == 0)
***************
*** 182,205 ****
  	ttyclose(tp);
  }
  
! dzread(dev, uio)
  	register dev_t	dev;
  	struct uio *uio;
  {
  	register struct tty *tp;
  
  	tp = &dz_tty[UNIT(dev)];
! 	return ((*linesw[tp->t_line].l_read)(tp, uio));
  }
  
! dzwrite(dev, uio)
  	register dev_t	dev;
  	struct uio *uio;
  {
  	register struct tty *tp;
  
  	tp = &dz_tty[UNIT(dev)];
! 	return ((*linesw[tp->t_line].l_write)(tp, uio));
  }
  
  /*ARGSUSED*/
--- 183,208 ----
  	ttyclose(tp);
  }
  
! dzread(dev, uio, flag)
  	register dev_t	dev;
  	struct uio *uio;
+ 	int flag;
  {
  	register struct tty *tp;
  
  	tp = &dz_tty[UNIT(dev)];
! 	return ((*linesw[tp->t_line].l_read)(tp, uio, flag));
  }
  
! dzwrite(dev, uio, flag)
  	register dev_t	dev;
  	struct uio *uio;
+ 	int flag;
  {
  	register struct tty *tp;
  
  	tp = &dz_tty[UNIT(dev)];
! 	return ((*linesw[tp->t_line].l_write)(tp, uio, flag));
  }
  
  /*ARGSUSED*/
*** /usr/src/sys/pdpuba/lp.c.old	Tue Apr  3 21:33:17 1990
--- /usr/src/sys/pdpuba/lp.c	Tue Nov 29 22:10:02 1994
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)lp.c	1.1 (2.10BSD Berkeley) 12/1/86
   */
  
  #include "lp.h"
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)lp.c	1.2 (2.11BSD GTE) 11/29/94
   */
  
  #include "lp.h"
***************
*** 109,117 ****
  	sc->sc_state &= ~OPEN;
  }
  
! lpwrite(dev, uio)
  	register dev_t dev;
  	register struct uio *uio;
  {
  	register int n;
  	register char *cp;
--- 109,118 ----
  	sc->sc_state &= ~OPEN;
  }
  
! lpwrite(dev, uio, flag)
  	register dev_t dev;
  	register struct uio *uio;
+ 	int flag;
  {
  	register int n;
  	register char *cp;
***************
*** 120,126 ****
  
  	while (n = MIN(LPBUFSIZE, uio->uio_resid)) {
  		cp = inbuf;
! 		error = uiomove(cp, (int)n, UIO_WRITE, uio);
  		if (error)
  			return (error);
  		do
--- 121,127 ----
  
  	while (n = MIN(LPBUFSIZE, uio->uio_resid)) {
  		cp = inbuf;
! 		error = uiomove(cp, (int)n, uio);
  		if (error)
  			return (error);
  		do
*** /usr/src/sys/pdpuba/tmscp.c.old	Sat Jan  2 23:32:49 1993
--- /usr/src/sys/pdpuba/tmscp.c	Fri Dec  9 23:10:39 1994
***************
*** 1,4 ****
! /*	@(#)tmscp.c	1.3 (2.11BSD) 1/2/93 */
  
  #if	!defined(lint) && defined(DOSCCS)
  static	char	*sccsid = "@(#)tmscp.c	1.24	(ULTRIX)	1/21/86";
--- 1,4 ----
! /*	@(#)tmscp.c	1.4 (2.11BSD GTE) 12/9/94 */
  
  #if	!defined(lint) && defined(DOSCCS)
  static	char	*sccsid = "@(#)tmscp.c	1.24	(ULTRIX)	1/21/86";
***************
*** 302,307 ****
--- 302,310 ----
  #define S_SCHAR 4               /* doing "set controller characteristics" */
  #define S_RUN   5               /* running */
  
+ static	char *tmscpstepfailed = "step%d init failed: sa 0x%x\n";
+ static	char *tmscpfatalerr = "tms%d,%d: fatal error 0%o\n";
+ 
  int     tmscperror = 0;		/* causes hex dump of packets */
  int	tmscp_cp_wait = 0;	/* Something to wait on for command */
  				/* packets and or credits. */
***************
*** 420,426 ****
  			{
  			sc->sc_state = S_IDLE;
  			sc->sc_ctab.b_active = 0;
! 			printf("step1 init failed: sa 0x%x",tmscpaddr->tmscpsa);
  			wakeup((caddr_t)&sc->sc_ctab);
  			return;
  			}
--- 423,429 ----
  			{
  			sc->sc_state = S_IDLE;
  			sc->sc_ctab.b_active = 0;
! 			printf(tmscpstepfailed,sc->sc_state,tmscpaddr->tmscpsa);
  			wakeup((caddr_t)&sc->sc_ctab);
  			return;
  			}
***************
*** 448,454 ****
  			{
  			sc->sc_state = S_IDLE;
  			sc->sc_ctab.b_active = 0;
! 			printf("step2 init failed: sa 0x%x",tmscpaddr->tmscpsa);
  			wakeup((caddr_t)&sc->sc_ctab);
  			return;
  			}
--- 451,457 ----
  			{
  			sc->sc_state = S_IDLE;
  			sc->sc_ctab.b_active = 0;
! 			printf(tmscpstepfailed,sc->sc_state,tmscpaddr->tmscpsa);
  			wakeup((caddr_t)&sc->sc_ctab);
  			return;
  			}
***************
*** 476,482 ****
  			{
  			sc->sc_state = S_IDLE;
  			sc->sc_ctab.b_active = 0;
! 			printf("step3 init failed: sa 0x%x",tmscpaddr->tmscpsa);
  			wakeup((caddr_t)&sc->sc_ctab);
  			return;
  			}
--- 479,485 ----
  			{
  			sc->sc_state = S_IDLE;
  			sc->sc_ctab.b_active = 0;
! 			printf(tmscpstepfailed,sc->sc_state,tmscpaddr->tmscpsa);
  			wakeup((caddr_t)&sc->sc_ctab);
  			return;
  			}
***************
*** 544,550 ****
  	 */
  	if (tmscpaddr->tmscpsa&TMSCP_ERR)
  		{
! 		printf("tms%d: fatal error %o\n", dev, tmscpaddr->tmscpsa);
  		tmscpaddr->tmscpip = 0;
  		sc->sc_state = S_IDLE;
  		sc->sc_ctab.b_active = 0;
--- 547,553 ----
  	 */
  	if (tmscpaddr->tmscpsa&TMSCP_ERR)
  		{
! 		printf(tmscpfatalerr, dev, sc->sc_unit, tmscpaddr->tmscpsa);
  		tmscpaddr->tmscpip = 0;
  		sc->sc_state = S_IDLE;
  		sc->sc_ctab.b_active = 0;
***************
*** 1015,1021 ****
  		sc->sc_ctab.b_actf = dp->b_forw; /* remove from controller q */
  		((Trl *)mp->mscp_dscptr)->hsh |= TMSCP_OWN|TMSCP_INT;
  		if (tmscpaddr->tmscpsa&TMSCP_ERR)
! 			printf("tms%d,%d fatal error 0%o\n", sc->sc_unit,
  					TMSUNIT(bp->b_dev), tmscpaddr->tmscpsa);
  		restorseg5(seg5);
  		i = tmscpaddr->tmscpip;
--- 1018,1024 ----
  		sc->sc_ctab.b_actf = dp->b_forw; /* remove from controller q */
  		((Trl *)mp->mscp_dscptr)->hsh |= TMSCP_OWN|TMSCP_INT;
  		if (tmscpaddr->tmscpsa&TMSCP_ERR)
! 			printf(tmscpfatalerr, sc->sc_unit,
  					TMSUNIT(bp->b_dev), tmscpaddr->tmscpsa);
  		restorseg5(seg5);
  		i = tmscpaddr->tmscpip;
***************
*** 1172,1178 ****
  	dp->av_back = bp;
  	if (tmscpaddr->tmscpsa&TMSCP_ERR)
  		{
! 		printf("tms%d,%d: fatal error 0%o\n",sc->sc_unit, 
  			mp->mscp_unit, tmscpaddr->tmscpsa);
  		(void)tkini(sc);
  		break;
--- 1175,1181 ----
  	dp->av_back = bp;
  	if (tmscpaddr->tmscpsa&TMSCP_ERR)
  		{
! 		printf(tmscpfatalerr,sc->sc_unit, 
  			mp->mscp_unit, tmscpaddr->tmscpsa);
  		(void)tkini(sc);
  		break;
***************
*** 1410,1418 ****
  			if (st != M_ST_TAPEM)
  				{
  				tprintf(tms->tms_ttyp,
! 				"tms%d,%d: hard error bn%ld status:0%o flags:0%o\n",
  				    sc->sc_unit, mp->mscp_unit, bp->b_blkno,
! 				    mp->mscp_status >> 5, mp->mscp_flags);
  				bp->b_flags |= B_ERROR;
  				}
  			else
--- 1413,1421 ----
  			if (st != M_ST_TAPEM)
  				{
  				tprintf(tms->tms_ttyp,
! 				"tms%d,%d: hard err bn%ld status:0%o flags:0%o\n",
  				    sc->sc_unit, mp->mscp_unit, bp->b_blkno,
! 				    mp->mscp_status, mp->mscp_flags);
  				bp->b_flags |= B_ERROR;
  				}
  			else
***************
*** 1624,1631 ****
  	rlp[0].hsh |= TMSCP_OWN|TMSCP_INT;
  	rlp[1].hsh |= TMSCP_OWN|TMSCP_INT;
  	if (sc->sc_addr->tmscpsa&TMSCP_ERR)
! 		printf("tms%d,%d fatal error 0%o\n", sc->sc_unit, unit,
! 			sc->sc_addr->tmscpsa);
  	i = sc->sc_addr->tmscpip;
  
  	while ((rlp[1].hsh & TMSCP_INT) == 0)
--- 1627,1633 ----
  	rlp[0].hsh |= TMSCP_OWN|TMSCP_INT;
  	rlp[1].hsh |= TMSCP_OWN|TMSCP_INT;
  	if (sc->sc_addr->tmscpsa&TMSCP_ERR)
! 		printf(tmscpfatalerr, sc->sc_unit, unit, sc->sc_addr->tmscpsa);
  	i = sc->sc_addr->tmscpip;
  
  	while ((rlp[1].hsh & TMSCP_INT) == 0)
*** /usr/src/sys/pdpuba/ts.c.old	Sat Jan  2 23:28:52 1993
--- /usr/src/sys/pdpuba/ts.c	Sat Nov 26 17:34:04 1994
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)ts.c	2.2 (2.11BSD GTE) 1/2/93
   */
  
  /*
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)ts.c	2.3 (2.11BSD GTE) 11/26/94
   */
  
  /*
***************
*** 84,89 ****
--- 84,92 ----
  
  u_short softspace[NTS][(sizeof(struct ts_softc)/2) + 1];
  
+ static	char	*tsmsg1 = "ts%d: not online\n";
+ static	char	*tsmsg2 = "ts%d: no write ring\n";
+ 
  tsattach(addr, unit)
  struct tsdevice *addr;
  register int unit;
***************
*** 155,166 ****
  	tstab[ts11].b_flags |= B_TAPE;
  	tscommand(dev, TS_SENSE, 1);
  	if ((sc->sc_sts.s_xs0 & TS_ONL) == 0) {
! 		uprintf("ts%d: not online\n", ts11);
  		return(EIO);
  	}
  	if ((flag & (FREAD | FWRITE)) == FWRITE
  	    && (sc->sc_sts.s_xs0 & TS_WLK)) {
! 		uprintf("ts%d: no write ring\n", ts11);
  		return(EIO);
  	}
  	sc->sc_openf = 1;
--- 158,169 ----
  	tstab[ts11].b_flags |= B_TAPE;
  	tscommand(dev, TS_SENSE, 1);
  	if ((sc->sc_sts.s_xs0 & TS_ONL) == 0) {
! 		uprintf(tsmsg1, ts11);
  		return(EIO);
  	}
  	if ((flag & (FREAD | FWRITE)) == FWRITE
  	    && (sc->sc_sts.s_xs0 & TS_WLK)) {
! 		uprintf(tsmsg2, ts11);
  		return(EIO);
  	}
  	sc->sc_openf = 1;
***************
*** 495,503 ****
  
  			case TS_REJECT:
  				if (state == SIO && sc->sc_sts.s_xs0 & TS_WLE)
! 					tprintf(sc->sc_ttyp,"ts%d: no write ring\n", dev);
  				if ((sc->sc_sts.s_xs0 & TS_ONL) == 0)
! 					tprintf(sc->sc_ttyp,"ts%d: not online\n", dev);
  				break;
  		}
  		/*
--- 498,506 ----
  
  			case TS_REJECT:
  				if (state == SIO && sc->sc_sts.s_xs0 & TS_WLE)
! 					tprintf(sc->sc_ttyp, tsmsg2, dev);
  				if ((sc->sc_sts.s_xs0 & TS_ONL) == 0)
! 					tprintf(sc->sc_ttyp, tsmsg1, dev);
  				break;
  		}
  		/*
*** /usr/src/sys/GENERIC/Makefile.old	Sat Feb  5 19:47:47 1994
--- /usr/src/sys/GENERIC/Makefile	Tue Nov 29 23:30:06 1994
***************
*** 54,60 ****
  	tty_conf.o tty_subr.o tty_tb.o tty_tty.o ufs_alloc.o ufs_bio.o \
  	ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_namei.o \
  	ufs_subr.o vm_sched.o vm_text.o xp.o
! OV1=	sys_generic.o ufs_syscalls.o mem.o
  OV2=	kern_acct.o kern_exec.o kern_exit.o kern_fork.o kern_resource.o
  OV3=	clock.o cons.o kern_pdp.o kern_time.o \
  	kern_xxx.o machdep2.o quota_sys.o subr_prf.o sys_process.o \
--- 54,60 ----
  	tty_conf.o tty_subr.o tty_tb.o tty_tty.o ufs_alloc.o ufs_bio.o \
  	ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_namei.o \
  	ufs_subr.o vm_sched.o vm_text.o xp.o
! OV1=	sys_generic.o ufs_syscalls.o
  OV2=	kern_acct.o kern_exec.o kern_exit.o kern_fork.o kern_resource.o
  OV3=	clock.o cons.o kern_pdp.o kern_time.o \
  	kern_xxx.o machdep2.o quota_sys.o subr_prf.o sys_process.o \
***************
*** 61,67 ****
  	syscalls.o ufs_mount.o
  OV4=	hk.o init_main.o kern_prot.o tty_pty.o quota_kern.o quota_subr.o \
  	quota_ufs.o subr_log.o vm_swp.o vm_swap.o vm_proc.o toy.o
! OV5=	ht.o tm.o ts.o
  OV6=	tmscp.o rl.o
  OV7=	mch_fpsim.o
  
--- 61,67 ----
  	syscalls.o ufs_mount.o
  OV4=	hk.o init_main.o kern_prot.o tty_pty.o quota_kern.o quota_subr.o \
  	quota_ufs.o subr_log.o vm_swp.o vm_swap.o vm_proc.o toy.o
! OV5=	ht.o tm.o ts.o mem.o
  OV6=	tmscp.o rl.o
  OV7=	mch_fpsim.o
  
*** /usr/src/sys/OTHERS/berknet/tty_bk.c.old	Tue Feb 10 19:29:14 1987
--- /usr/src/sys/OTHERS/berknet/tty_bk.c	Thu Dec 15 20:25:58 1994
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)tty_bk.c	1.1 (2.10BSD Berkeley) 12/1/86
   */
  
  #include "bk.h"
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)tty_bk.c	1.2 (2.11BSD Berkeley) 11/27/94
   */
  
  #include "bk.h"
***************
*** 96,102 ****
   * is waiting.  Our clearing tp->t_rec here allows further input
   * to accumulate.
   */
! bkread(tp)
  	register struct tty *tp;
  {
  	register int s;
--- 96,102 ----
   * is waiting.  Our clearing tp->t_rec here allows further input
   * to accumulate.
   */
! bkread(tp, uio)
  	register struct tty *tp;
  {
  	register int s;
***************
*** 110,116 ****
  	splx(s);
  	if (tp->t_line != NETLDISC)
  		return (-1);
! 	error = uiomove(tp->t_bufp->b_un.b_addr, tp->t_inbuf, UIO_READ);
  	tp->t_cp = (char *)tp->t_bufp->b_un.b_addr;
  	tp->t_inbuf = 0;
  	tp->t_rec = 0;
--- 110,116 ----
  	splx(s);
  	if (tp->t_line != NETLDISC)
  		return (-1);
! 	error = uiomove(tp->t_bufp->b_un.b_addr, tp->t_inbuf, uio);
  	tp->t_cp = (char *)tp->t_bufp->b_un.b_addr;
  	tp->t_inbuf = 0;
  	tp->t_rec = 0;
*** /usr/src/sys/OTHERS/dmc11/dmc.c.old	Wed Apr 11 13:26:00 1990
--- /usr/src/sys/OTHERS/dmc11/dmc.c	Sun Nov 27 00:02:35 1994
***************
*** 9,15 ****
   */
  
  /*
!  *	SCCS id	@(#)dmc.c	2.1 (Berkeley)	8/5/83
   */
  
  #include "param.h"
--- 9,15 ----
   */
  
  /*
!  *	SCCS id	@(#)dmc.c	2.2 (2.11BSD GTE) 11/26/94
   */
  
  #include "param.h"
***************
*** 200,206 ****
          (void) _spl0();
  
          if (bp->b_bcount > 0) {
!                 uiomove(mapin(bp), bp->b_bcount, B_READ, uio);
                  mapout(bp);
          }
          dp->inbufq = bp->inbufq;
--- 200,206 ----
          (void) _spl0();
  
          if (bp->b_bcount > 0) {
!                 uiomove(mapin(bp), bp->b_bcount, uio);
                  mapout(bp);
          }
          dp->inbufq = bp->inbufq;
*** /usr/src/sys/OTHERS/du11/du.c.old	Wed Dec 23 23:33:25 1992
--- /usr/src/sys/OTHERS/du11/du.c	Sun Nov 27 00:01:28 1994
***************
*** 1,5 ****
  /*
!  *	SCCS id	@(#)du.c	2.1 (Berkeley)	8/5/83
   */
  
  /*
--- 1,5 ----
  /*
!  *	SCCS id	@(#)du.c	2.2 (2.11BSD)	11/26/94
   */
  
  /*
***************
*** 235,241 ****
  	 * Copy the message to the caller's buffer
  	 */
  	nbytes = min(uio->uio_resid, du11.durbufo->msgbc);
! 	uiomove(du11.durbufo->msgbufp, nbytes, B_READ, uio);
  	if (++du11.durbufo == du11.durbuff + MSGN)
  		du11.durbufo = du11.durbuff;
  	du11.durbufn--;
--- 235,241 ----
  	 * Copy the message to the caller's buffer
  	 */
  	nbytes = min(uio->uio_resid, du11.durbufo->msgbc);
! 	uiomove(du11.durbufo->msgbufp, nbytes, uio);
  	if (++du11.durbufo == du11.durbuff + MSGN)
  		du11.durbufo = du11.durbuff;
  	du11.durbufn--;
***************
*** 258,264 ****
  	 */
  	nbytes = min(uio->uio_resid, MSGLEN);
  	du11.dutbufi->msgbc = nbytes;
! 	uiomove(du11.dutbufi->msgbufp, nbytes, B_WRITE, uio);
  	if (++du11.dutbufi == du11.dutbuff + MSGN)
  		du11.dutbufi = du11.dutbuff;
  	du11.dutbufn++;
--- 258,264 ----
  	 */
  	nbytes = min(uio->uio_resid, MSGLEN);
  	du11.dutbufi->msgbc = nbytes;
! 	uiomove(du11.dutbufi->msgbufp, nbytes, uio);
  	if (++du11.dutbufi == du11.dutbuff + MSGN)
  		du11.dutbufi = du11.dutbuff;
  	du11.dutbufn++;
