function _comp
# DOC file compare (cmp)
{
	trap "set +f" 0
	fromdir="$1/*"
	todir=${2:=.}
	if test -d $1 
	then	set +f
		_Ducmd ls $fromdir \| xargs -i cmp $1/{} ${todir}/{}
		ls $1 | xargs -i cmp $1/{} ${todir}/{}
	elif	test -d $2
	then	set +f
		_Ducmd ls $fromdir \| xargs -i cmp {} ${todir}/{}
		ls $1 | xargs -i cmp {} ${todir}/{}
	elif	test -r $2
	then	set +f
		_Ducmd ls $fromdir \| xargs -i cmp {} ${todir}
		ls $1 | xargs -i cmp {} ${todir}
	else				# compare on matching wildcards
		typeset prefix suffix rest prefix2 suffix2 rest2 dir
		rest=`basename ${1}`
		dir=${1%$rest}
		if test "$dir" = "*"
	 	then	dir=""
		# a ksh patch
		fi
		set $rest ${2:=.}
		case $1 in
		\**)	prefix='*'
			rest=${1#[$prefix]};;
		\?*)	rest="`expr $1 : '\?*\([^?]*\)'`"
			prefix=${1%$rest};;
		*\*)	suffix='*'
			rest=${1%[$suffix]};;
		*\?)	rest="`expr $1 : '\([^?]*\)\?*'`"
			suffix="${1#$rest}";;
		*)	prefix=
			suffix=
			rest="$1";;
		esac
		case $2 in
		\**)	prefix2='*'
			rest2=${2#[$prefix2]};;
		\?*)	rest2="`expr $2 : '\?*\([^?]*\)'`"
			prefix2="${2%$rest2}";;
		*\*)	suffix2='*'
			rest2=${2%[$suffix2]};;
		*\?)	rest2="`expr $2 : '\([^?]*\)\?*'`"
			suffix2="${2#$rest2}";;
		*)	prefix2=
			suffix2=
			rest2="$2";;
		esac
		set +f
		for i in $dir$1
		do
		i=`basename $i`
		case $1 in
		\**|\?*)	case $2 in
			*\*)	tofile="${rest2}${i%$rest}";;
			\**)	tofile="${i%$rest}${rest2}";;
			\?*)	tofile="${i%${i#$prefix2}}${rest2}";;
			*\?)	tofile="${rest2}${i#${i%$suffix2}}";;
			esac
			;;
		*\*|*\?)	case $2 in
			*\*)	tofile="${rest2}${i#$rest}";;
			\**)	tofile="${i#$rest}${rest2}";;
			\?*)	tofile="${i%${i#$prefix2}}${rest2}";;
			*\?)	tofile="${rest2}${i#${i%$suffix2}}";;
			esac
			;;
		*)	tofile=$2;;
		esac
		if test "$tofile" != ""
		then	_Ducmd "cmp ${dir}$i $tofile"
			cmp ${dir}$i $tofile
		else	print "Error: ${dir}$i invalid"
		fi
		done
	fi
}

alias -x COMP='set -f; _comp'\
	comp='set -f; _comp'
typeset -xf _comp
