name=$0
v1=
v2=
bflag=
sflag=
while [ @$1 = @-b -o @$1 = @-s ]; do
	if [ @$1 = @-b ]; then
		bflag=-b
	else
		sflag=-s
	fi
	shift
done
if [ @$1 = @-v ]; then
	shift
	v1=$1
	shift
	if [ @$1 = @-v ]; then
		shift
		v2=$1
		shift
	fi
fi
if [ $# != 1 ]; then
	echo 1>&2 usage: $name [-s] [-b] [-v v1] [-v v2] file
	exit 2
fi
if [ ! -r $1 -a -z "$v2" ]; then
	echo 1>&2 $name: cannot access $1
	exit 2
fi
if [ ! -r $1+ ]; then
	echo 1>&2 $name: cannot access $1+
	exit 2
fi
if [ -z "$v1" ]; then
	rest -f -o $1 |
		if [ -n "$sflag" ]; then
			cmp  $sflag - $1
		else
			diff $bflag - $1
		fi
	status=$?
elif [ -z "$v2" ]; then
	rest -f -v $v1 -o $1 |
		if [ -n "$sflag" ]; then
			cmp  $sflag - $1
		else
			diff $bflag - $1
		fi
	status=$?
else
	umask 077
	trap "rm -f /tmp/savediff.$$; exit 2" 1 2 3 15 27
	rest -f -v $v1 -o $1 > /tmp/savediff.$$
	rest -f -v $v2 -o $1 |
		if [ -n "$sflag" ]; then
			cmp  $sflag - /tmp/savediff.$$
		else
			diff $bflag /tmp/savediff.$$ -
		fi
	status=$?
	rm -f /tmp/savediff.$$
fi
exit $status
