Subject: chflags - immutable|appendonly files come to 2BSD(#207 - Part 11 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 0 (#197) for the complete description and installation
	instructions.

	This is part 11 of 14 (#207).

	Files affected by this part are:

/usr/src/ucb/ex/Makefile
/usr/src/ucb/ex/READ_ME
/usr/src/ucb/ex/ex_put.c
/usr/src/ucb/ex/ex_tty.c
/usr/src/ucb/ex/ex_tty.h
/usr/src/ucb/ex/ex_v.c
/usr/src/ucb/ex/ex_vget.c
/usr/src/ucb/ex/ex_vput.c

=====================cut  here========================
*** /usr/src/ucb/ex/Makefile.old	Tue May 16 09:24:01 1989
--- /usr/src/ucb/ex/Makefile	Fri Dec  9 21:35:04 1994
***************
*** 3,23 ****
  # All rights reserved.  The Berkeley software License Agreement
  # specifies the terms and conditions for redistribution.
  #
! #	@(#)Makefile	7.13.1.1 (Berkeley) 8/12/86
  #
  VERSION=3.7
  #
- # Ex skeletal makefile for VAX VM/Unix 4.2BSD
- #
  # NB: This makefile doesn't indicate any dependencies on header files.
  #
  # Ex is very large - this version will not fit on PDP-11's without overlay
  # software.  Things that can be turned off to save
! # space include LISPCODE (-l flag, showmatch and lisp options), UCVISUAL
! # (visual \ nonsense on upper case only terminals), CHDIR (the undocumented
! # chdir command.)  VMUNIX makes ex considerably larger, raising many limits
! # and improving speed and simplicity of maintenance.  It is suitable only
! # for a VAX or other large machine, and then probably only in a paged system.
  #
  # Don't define VFORK unless your system has the VFORK system call,
  # which is like fork but the two processes have only one data space until the
--- 3,21 ----
  # All rights reserved.  The Berkeley software License Agreement
  # specifies the terms and conditions for redistribution.
  #
! #	@(#)Makefile	7.13.1.2 (2.11BSD GTE) 12/9/94
  #
  VERSION=3.7
  #
  # NB: This makefile doesn't indicate any dependencies on header files.
  #
  # Ex is very large - this version will not fit on PDP-11's without overlay
  # software.  Things that can be turned off to save
! # space include LISPCODE (-l flag, showmatch and lisp options), CHDIR (the 
! # undocumented chdir command.)  VMUNIX makes ex considerably larger, raising 
! # many limits and improving speed and simplicity of maintenance.  It is 
! # suitable only for a VAX or other large machine, and then probably only in 
! # a paged system.
  #
  # Don't define VFORK unless your system has the VFORK system call,
  # which is like fork but the two processes have only one data space until the
***************
*** 34,40 ****
  DEBUGFLAGS=	-DTRACE -g
  NONDEBUGFLAGS=	-O
  DEB=	${NONDEBUGFLAGS}	# or ${DEBUGFLAGS} to to debug
! #OPTIONS= -DLISPCODE -DCHDIR -DUCVISUAL -DVFORK -DVMUNIX -DFASTTAG
  OPTIONS= -DLISPCODE -DCHDIR -DVFORK -DFASTTAG
  CFLAGS=	-DTABS=8 ${OPTIONS} ${DEB}
  LDFLAGS= -X
--- 32,38 ----
  DEBUGFLAGS=	-DTRACE -g
  NONDEBUGFLAGS=	-O
  DEB=	${NONDEBUGFLAGS}	# or ${DEBUGFLAGS} to to debug
! #OPTIONS= -DLISPCODE -DCHDIR -DVFORK -DVMUNIX -DFASTTAG
  OPTIONS= -DLISPCODE -DCHDIR -DVFORK -DFASTTAG
  CFLAGS=	-DTABS=8 ${OPTIONS} ${DEB}
  LDFLAGS= -X
***************
*** 49,55 ****
  	ex_set.o ex_subr.o ex_tagio.o ex_temp.o ex_tty.o ex_unix.o \
  	ex_v.o ex_vadj.o ex_vget.o ex_vmain.o ex_voper.o \
  	ex_vops.o ex_vops2.o ex_vops3.o ex_vput.o ex_vwind.o \
! 	printf.o bcopy.o strings.o
  HDRS=	ex.h ex_argv.h ex_re.h ex_temp.h ex_tty.h ex_tune.h ex_vars.h ex_vis.h
  SRC1=	ex.c ex_addr.c ex_cmds.c ex_cmds2.c ex_cmdsub.c
  SRC2=	ex_data.c ex_get.c ex_io.c ex_put.c ex_re.c
--- 47,53 ----
  	ex_set.o ex_subr.o ex_tagio.o ex_temp.o ex_tty.o ex_unix.o \
  	ex_v.o ex_vadj.o ex_vget.o ex_vmain.o ex_voper.o \
  	ex_vops.o ex_vops2.o ex_vops3.o ex_vput.o ex_vwind.o \
! 	printf.o strings.o
  HDRS=	ex.h ex_argv.h ex_re.h ex_temp.h ex_tty.h ex_tune.h ex_vars.h ex_vis.h
  SRC1=	ex.c ex_addr.c ex_cmds.c ex_cmds2.c ex_cmdsub.c
  SRC2=	ex_data.c ex_get.c ex_io.c ex_put.c ex_re.c
***************
*** 56,63 ****
  SRC3=	ex_set.c ex_subr.c ex_tagio.c ex_temp.c ex_tty.c ex_unix.c
  SRC4=	ex_v.c ex_vadj.c ex_vget.c ex_vmain.c ex_voper.c
  SRC5=	ex_vops.c ex_vops2.c ex_vops3.c ex_vput.c ex_vwind.c
! SRC6=	printf.c bcopy.c expreserve.c exrecover.c
! MISC=	makefile READ_ME rofix
  VGRIND=	csh /usr/ucb/vgrind
  VHDR=	"Ex Version ${VERSION}"
  
--- 54,61 ----
  SRC3=	ex_set.c ex_subr.c ex_tagio.c ex_temp.c ex_tty.c ex_unix.c
  SRC4=	ex_v.c ex_vadj.c ex_vget.c ex_vmain.c ex_voper.c
  SRC5=	ex_vops.c ex_vops2.c ex_vops3.c ex_vput.c ex_vwind.c
! SRC6=	printf.c expreserve.c exrecover.c
! MISC=	makefile READ_ME
  VGRIND=	csh /usr/ucb/vgrind
  VHDR=	"Ex Version ${VERSION}"
  
***************
*** 105,124 ****
  ex_vars.h:
  	csh makeoptions ${CFLAGS}
  
- bcopy.o:	bcopy.c
- 	${CC} -c ${CFLAGS} bcopy.c
- 
  # xstr: hands off!
  strings.o: strings
  	${XSTR}
! 	-if [ X${SEPFLAG} = X-i ]; then \
! 		${CC} -c -o strings.o xs.c; \
! 	else \
! 		${CC} -c -S xs.c; \
! 		ed - <rofix xs.s; \
! 		${AS} -o strings.o xs.s; \
! 		rm xs.s; \
! 	fi
  	
  exrecover: exrecover.o ex_extern.o
  	${CC} ${SEPFLAG} ${CFLAGS} exrecover.o ex_extern.o -o exrecover
--- 103,112 ----
  ex_vars.h:
  	csh makeoptions ${CFLAGS}
  
  # xstr: hands off!
  strings.o: strings
  	${XSTR}
! 	${CC} -c -o strings.o xs.c
  	
  exrecover: exrecover.o ex_extern.o
  	${CC} ${SEPFLAG} ${CFLAGS} exrecover.o ex_extern.o -o exrecover
***************
*** 137,163 ****
  	-rm -f a.out exrecover expreserve ex${VERSION}strings strings
  	-rm -f *.o x*.[cs] core errs trace
  
- # install a new version for testing in /usr/new
- ninstall: a.out
- 	-rm -f ${DESTDIR}${NBINDIR}/ex ${DESTDIR}${NBINDIR}/vi ${DESTDIR}${NBINDIR}/view
- 	cp a.out ${DESTDIR}${NBINDIR}/ex
- #	-cp ex${VERSION}strings ${LIBDIR}/ex${VERSION}strings
- 	ln ${DESTDIR}${NBINDIR}/ex ${DESTDIR}${NBINDIR}/vi
- 	ln ${DESTDIR}${NBINDIR}/ex ${DESTDIR}${NBINDIR}/view
- 	chmod 1755 ${DESTDIR}${NBINDIR}/ex
- 
  # install in standard place (/usr/ucb)
  install: a.out exrecover expreserve
  	-rm -f ${DESTDIR}/${BINDIR}/ex
  	-rm -f ${DESTDIR}/${BINDIR}/vi
  	-rm -f ${DESTDIR}/${BINDIR}/view
! 	-rm -f ${DESTDIR}/${BINDIR}/edit
! 	-rm -f ${DESTDIR}/${BINDIR}/e
  	-rm -f ${DESTDIR}/usr/bin/ex
  	install -s -m 1755 a.out ${DESTDIR}/${BINDIR}/ex
  	cp ex${VERSION}strings ${DESTDIR}/${LIBDIR}/ex${VERSION}strings
! 	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/edit
! 	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/e
  	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/vi
  	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/view
  	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/usr/bin/ex
--- 125,142 ----
  	-rm -f a.out exrecover expreserve ex${VERSION}strings strings
  	-rm -f *.o x*.[cs] core errs trace
  
  # install in standard place (/usr/ucb)
  install: a.out exrecover expreserve
  	-rm -f ${DESTDIR}/${BINDIR}/ex
  	-rm -f ${DESTDIR}/${BINDIR}/vi
  	-rm -f ${DESTDIR}/${BINDIR}/view
! #	-rm -f ${DESTDIR}/${BINDIR}/edit
! #	-rm -f ${DESTDIR}/${BINDIR}/e
  	-rm -f ${DESTDIR}/usr/bin/ex
  	install -s -m 1755 a.out ${DESTDIR}/${BINDIR}/ex
  	cp ex${VERSION}strings ${DESTDIR}/${LIBDIR}/ex${VERSION}strings
! #	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/edit
! #	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/e
  	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/vi
  	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/view
  	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/usr/bin/ex
***************
*** 167,187 ****
  # The following line normally fails.  This is OK.
  	-mkdir ${DESTDIR}/usr/preserve
  
- # move from /usr/new to /usr/ucb
- newucb: a.out
- 	-rm -f ${DESTDIR}/${BINDIR}/ex
- 	-rm -f ${DESTDIR}/${BINDIR}/vi
- 	-rm -f ${DESTDIR}/${BINDIR}/edit
- 	-rm -f ${DESTDIR}/${BINDIR}/e
- 	-rm -f ${DESTDIR}/usr/bin/ex
- 	mv ${DESTDIR}/${NBINDIR}/ex ${DESTDIR}/${NBINDIR}/ex
- 	-rm -f ${DESTDIR}/${NBINDIR}/vi
- 	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/edit
- 	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/e
- 	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/${BINDIR}/vi
- 	ln ${DESTDIR}/${BINDIR}/ex ${DESTDIR}/usr/bin/ex
- 	chmod 1755 ${DESTDIR}/${BINDIR}/ex
- 
  lint:
  	lint ${CFLAGS} ex.c ex_?*.c
  	lint ${CFLAGS} -u exrecover.c
--- 146,151 ----
***************
*** 201,206 ****
--- 165,171 ----
  	@ls -ls | ${PR}
  	@${CXREF} *.c | ${PR} -h XREF
  	@${PR} *.h *.c
+ 
  vgrind:
  	tee index < /dev/null
  	${VGRIND} -h ${VHDR} ${HDRS}
*** /usr/src/ucb/ex/READ_ME.old	Mon Feb 16 22:07:28 1987
--- /usr/src/ucb/ex/READ_ME	Fri Dec  9 21:00:07 1994
***************
*** 16,21 ****
  	-DVFORK		for UCB Vax/Unix with the vfork system call.
  	-DCHDIR		compile in undocumented old chdir (cd) command
  	-DLISP		compile in lisp hacks
- 	-DUCVISUAL	compile in code to handle \ escapes for visual on
- 			upper case only terminals.  gross.
  	-DCRYPT		-x option to edit encrypted files
--- 16,19 ----
*** /usr/src/ucb/ex/ex_put.c.old	Sun Sep  8 12:00:02 1991
--- /usr/src/ucb/ex/ex_put.c	Fri Dec  9 20:48:24 1994
***************
*** 5,11 ****
   */
  
  #if	!defined(lint) && defined(DOSCCS)
! static char *sccsid = "@(#)ex_put.c	7.9 (Berkeley) 6/7/85";
  #endif
  
  #include "ex.h"
--- 5,11 ----
   */
  
  #if	!defined(lint) && defined(DOSCCS)
! static char *sccsid = "@(#)ex_put.c	7.9.1 (2.11BSD GTE) 12/9/94";
  #endif
  
  #include "ex.h"
***************
*** 91,98 ****
  }
  
  /*
!  * Format c for printing.  Handle funnies of upper case terminals
!  * and crocky hazeltines which don't have ~.
   */
  normchar(c)
  	register short c;
--- 91,97 ----
  }
  
  /*
!  * Format c for printing.
   */
  normchar(c)
  	register short c;
***************
*** 100,109 ****
  	register char *colp;
  
  	c &= (TRIM|QUOTE);
- 	if (c == '~' && HZ) {
- 		normchar('\\');
- 		c = '^';
- 	}
  	if (c & QUOTE)
  		switch (c) {
  
--- 99,104 ----
***************
*** 119,137 ****
  		}
  	else if (c < ' ' && (c != '\b' || !OS) && c != '\n' && c != '\t' || c == DELETE)
  		putchar('^'), c = ctlof(c);
- 	else if (UPPERCASE)
- 		if (isupper(c)) {
- 			outchar('\\');
- 			c = tolower(c);
- 		} else {
- 			colp = "({)}!|^~'`";
- 			while (*colp++)
- 				if (c == *colp++) {
- 					outchar('\\');
- 					c = colp[-2];
- 					break;
- 				}
- 		}
  	outchar(c);
  }
  
--- 114,119 ----
*** /usr/src/ucb/ex/ex_tty.c.old	Sun Sep  8 12:02:11 1991
--- /usr/src/ucb/ex/ex_tty.c	Fri Dec  9 20:55:58 1994
***************
*** 5,11 ****
   */
  
  #if	!defined(lint) && defined(DOSCCS)
! static char *sccsid = "@(#)ex_tty.c	7.10 (Berkeley) 6/7/85";
  #endif
  
  #include "ex.h"
--- 5,11 ----
   */
  
  #if	!defined(lint) && defined(DOSCCS)
! static char *sccsid = "@(#)ex_tty.c	7.10.1 (2.11BSD GTE) 12/9/94";
  #endif
  
  #include "ex.h"
***************
*** 28,34 ****
  		value(SLOWOPEN) = tty.sg_ospeed < B1200;
  	ospeed = tty.sg_ospeed;
  	normf = tty.sg_flags;
- 	UPPERCASE = (tty.sg_flags & LCASE) != 0;
  	GT = (tty.sg_flags & XTABS) != XTABS && !XT;
  	NONL = (tty.sg_flags & CRMOD) == 0;
  #else
--- 28,33 ----
***************
*** 38,44 ****
  		value(SLOWOPEN) = (tty.c_cflag & CBAUD) < B1200;
  	ospeed = tty.c_cflag & CBAUD;
  	normf = tty;
- 	UPPERCASE = (tty.c_iflag & IUCLC) != 0;
  	GT = (tty.c_oflag & TABDLY) != TAB3 && !XT;
  	NONL = (tty.c_oflag & ONLCR) == 0;
  #endif
--- 37,42 ----
***************
*** 53,59 ****
  	&AL_PARM, &DL_PARM, &UP_PARM, &DOWN_PARM, &LEFT_PARM, &RIGHT_PARM
  };
  bool *sflags[] = {
! 	&AM, &BS, &DA, &DB, &EO, &HC, &HZ, &IN, &MI, &NC, &NS, &OS, &UL,
  	&XB, &XN, &XT, &XX
  };
  char **fkeys[10] = {
--- 51,57 ----
  	&AL_PARM, &DL_PARM, &UP_PARM, &DOWN_PARM, &LEFT_PARM, &RIGHT_PARM
  };
  bool *sflags[] = {
! 	&AM, &BS, &DA, &DB, &EO, &HC, &IN, &MI, &NC, &NS, &OS, &UL,
  	&XB, &XN, &XT, &XX
  };
  char **fkeys[10] = {
***************
*** 187,193 ****
  	register bool **fp;
  	register char ***sp;
  
! 	namp = "ambsdadbeohchzinmincnsosulxbxnxtxx";
  	fp = sflags;
  	do {
  		*(*fp++) = tgetflag(namp);
--- 185,191 ----
  	register bool **fp;
  	register char ***sp;
  
! 	namp = "ambsdadbeohcinmincnsosulxbxnxtxx";
  	fp = sflags;
  	do {
  		*(*fp++) = tgetflag(namp);
*** /usr/src/ucb/ex/ex_tty.h.old	Sun Sep  8 12:45:55 1991
--- /usr/src/ucb/ex/ex_tty.h	Fri Dec  9 20:52:02 1994
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)ex_tty.h	7.5 (Berkeley) 5/31/85
   */
  
  /*
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)ex_tty.h	7.5.1 (2.11BSD GTE) 12/9/94
   */
  
  /*
***************
*** 94,100 ****
  var	bool	EO;		/* Can erase overstrikes with ' ' */
  var	bool	GT;		/* Gtty indicates tabs */
  var	bool	HC;		/* Hard copy terminal */
- var	bool	HZ;		/* Hazeltine ~ braindamage */
  var	bool	IN;		/* Insert-null blessing */
  var	bool	MI;		/* can move in insert mode */
  var	bool	NC;		/* No Cr - \r snds \r\n then eats \n (dm2500) */
--- 94,99 ----
***************
*** 112,118 ****
   * From the tty modes...
   */
  var	bool	NONL;		/* Terminal can't hack linefeeds doing a CR */
- var	bool	UPPERCASE;	/* Ick! */
  extern	short	LINES;		/* Number of lines on screen */
  extern	short	COLUMNS;
  var	short	OCOLUMNS;	/* Save COLUMNS for a hack in open mode */
--- 111,116 ----
*** /usr/src/ucb/ex/ex_v.c.old	Sun Sep  8 12:02:43 1991
--- /usr/src/ucb/ex/ex_v.c	Fri Dec  9 20:45:56 1994
***************
*** 5,11 ****
   */
  
  #if	!defined(lint) && defined(DOSCCS)
! static char *sccsid = "@(#)ex_v.c	7.8 (Berkeley) 6/7/85";
  #endif
  
  #include "ex.h"
--- 5,11 ----
   */
  
  #if	!defined(lint) && defined(DOSCCS)
! static char *sccsid = "@(#)ex_v.c	7.8.1 (2.11BSD GTE) 12/9/94";
  #endif
  
  #include "ex.h"
***************
*** 24,31 ****
   *		updating of screen after changes.
   *
   * ex_vget.c	input of single keys and reading of input lines
!  *		from the echo area, handling of \ escapes on input for
!  *		uppercase only terminals, handling of memory for repeated
   *		commands and small saved texts from inserts and partline
   *		deletes, notification of multi line changes in the echo
   *		area.
--- 24,30 ----
   *		updating of screen after changes.
   *
   * ex_vget.c	input of single keys and reading of input lines
!  *		from the echo area, handling of memory for repeated
   *		commands and small saved texts from inserts and partline
   *		deletes, notification of multi line changes in the echo
   *		area.
*** /usr/src/ucb/ex/ex_vget.c.old	Sun Sep  8 12:03:16 1991
--- /usr/src/ucb/ex/ex_vget.c	Fri Dec  9 20:41:56 1994
***************
*** 5,11 ****
   */
  
  #if	!defined(lint) && defined(DOSCCS)
! static char *sccsid = "@(#)ex_vget.c	6.8 (Berkeley) 6/7/85";
  #endif
  
  #include "ex.h"
--- 5,11 ----
   */
  
  #if	!defined(lint) && defined(DOSCCS)
! static char *sccsid = "@(#)ex_vget.c	6.8.1 (2.11BSD GTE) 12/9/94";
  #endif
  
  #include "ex.h"
***************
*** 14,22 ****
  
  /*
   * Input routines for open/visual.
!  * We handle upper case only terminals in visual and reading from the
!  * echo area here as well as notification on large changes
!  * which appears in the echo area.
   */
  
  /*
--- 14,21 ----
  
  /*
   * Input routines for open/visual.
!  * We handle reading from the echo area here as well as notification on 
!  * large changes which appears in the echo area.
   */
  
  /*
***************
*** 65,73 ****
   * comes back first.  Next comes unread input (e.g.
   * from repeating commands with .), and finally new
   * keystrokes.
-  *
-  * The hard work here is in mapping of \ escaped
-  * characters on upper case only terminals.
   */
  getbr()
  {
--- 64,69 ----
***************
*** 144,193 ****
  	}
  #endif
  
- #ifdef UCVISUAL
- 	/*
- 	 * The algorithm here is that of the UNIX kernel.
- 	 * See the description in the programmers manual.
- 	 */
- 	if (UPPERCASE) {
- 		if (isupper(c))
- 			c = tolower(c);
- 		if (c == '\\') {
- 			if (precbksl < 2)
- 				precbksl++;
- 			if (precbksl == 1)
- 				goto again;
- 		} else if (precbksl) {
- 			d = 0;
- 			if (islower(c))
- 				d = toupper(c);
- 			else {
- 				colp = "({)}!|^~'~";
- 				while (d = *colp++)
- 					if (d == c) {
- 						d = *colp++;
- 						break;
- 					} else
- 						colp++;
- 			}
- 			if (precbksl == 2) {
- 				if (!d) {
- 					Peekkey = c;
- 					precbksl = 0;
- 					c = '\\';
- 				}
- 			} else if (d)
- 				c = d;
- 			else {
- 				Peekkey = c;
- 				precbksl = 0;
- 				c = '\\';
- 			}
- 		}
- 		if (c != '\\')
- 			precbksl = 0;
- 	}
- #endif
  #ifdef TRACE
  	if (trace) {
  		if (!techoin) {
--- 140,145 ----
*** /usr/src/ucb/ex/ex_vput.c.old	Sun Sep  8 12:05:03 1991
--- /usr/src/ucb/ex/ex_vput.c	Fri Dec  9 20:43:24 1994
***************
*** 5,11 ****
   */
  
  #if	!defined(lint) && defined(DOSCCS)
! static char *sccsid = "@(#)ex_vput.c	7.4 (Berkeley) 6/7/85";
  #endif
  
  #include "ex.h"
--- 5,11 ----
   */
  
  #if	!defined(lint) && defined(DOSCCS)
! static char *sccsid = "@(#)ex_vput.c	7.4.1 (2.11BSD GTE) 12/9/94";
  #endif
  
  #include "ex.h"
***************
*** 58,64 ****
  
  	vigoto(l, 0);
  	if ((hold & HOLDAT) == 0)
! 		putchar(tp > dol ? ((UPPERCASE || HZ) ? '^' : '~') : '@');
  	if (state == HARDOPEN)
  		sethard();
  	vclreol();
--- 58,64 ----
  
  	vigoto(l, 0);
  	if ((hold & HOLDAT) == 0)
! 		putchar(tp > dol ? '~' : '@');
  	if (state == HARDOPEN)
  		sethard();
  	vclreol();
