view lib-src/vcdiff @ 12229:697c01e75adc

Various optimizations. The main one is to optimize for simple output at the end of the buffer, with no paging, and in that case to defer scrolling while we can. (term-emulate-terminal): Don't call term-handle-scroll in simple cases unless we are either paging or term-scroll-with-delete. (term-down): Likewise. (term-handle-scroll): Modify accordingly. (term-emulate-terminal): Avoid deleting old text in common case. Optimize the simple case of CRLF when we're at buffer end. Handle deferred scroll when done processing output. (term-handle-deferred-scroll): New function. (term-down): Simplify - no longer take RIGHT argument. Tune. (term-goto): Use term-move-columns to compensate for the above. (term-escape-char, term-set-escape-char): Add doc-string. (term-mouse-paste): Add xemacs support. Various speed enhencements: (term-handle-scroll): Don't clear term-current-row; maybe adjust it. (term-down): Don't call term-adjust-current-row-cache if we've done term-handle-scroll. (term-emulate-terminal): Don't call term-adjust-current-row-cache. (term-emulate-terminal): For TAB, don't nil term-start-line-column. (term-goto): Possible optimization.
author Richard M. Stallman <rms@gnu.org>
date Wed, 14 Jun 1995 22:30:16 +0000
parents 7124a811b67b
children da322c027bf0
line wrap: on
line source

#!/bin/sh
#
# Enhanced sccs diff utility for use with vc mode.
# This version is more compatible with rcsdiff(1).
#
#	$Id: vcdiff,v 1.3 1993/08/25 08:18:56 eggert Exp eggert $
#

DIFF="diff"
usage="$0: Usage: vcdiff [--brief] [-q] [-r<sid1>] [-r<sid2>] [diffopts] sccsfile..."

PATH=$PATH:/usr/ccs/bin:/usr/sccs # common SCCS hangouts

echo=
sid1=-r sid2=

for f
do
	case $f in
	-*)
		case $f in
		--brief)
			DIFF=cmp;;
		-q)
			echo=:;;
		-r?*)
			case $sid1 in
			-r)
				sid1=$f
				;;
			*)
				case $sid2 in
				?*) echo "$usage" >&2; exit 2 ;;
				esac
				sid2=$f
				;;
			esac
			;;
		*)
			options="$options $f"
			;;
		esac
		shift
		;;
	*)
		break
		;;
	esac
done

case $# in
0)
	echo "$usage" >&2
	exit 2
esac


rev1= rev2= status=0
trap 'status=2; exit' 1 2 13 15
trap 'rm -f $rev1 $rev2 || status=2; exit $status' 0

for f
do
	s=2

	case $f in
	s.* | */s.*)
		if
			rev1=/tmp/geta$$
			get -s -p -k $sid1 "$f" > $rev1 &&
			case $sid2 in
			'')
				workfile=`expr " /$f" : '.*/s.\(.*\)'`
				;;
			*)
				rev2=/tmp/getb$$
				get -s -p -k $sid2 "$f" > $rev2
				workfile=$rev2
			esac
		then
			$echo $DIFF $options $sid1 $sid2 $workfile >&2
			$DIFF $options $rev1 $workfile
			s=$?
		fi
		;;
	*)
		echo "$0: $f is not an SCCS file" >&2
	esac

	if test $status -lt $s
	then status=$s
	fi
done