function dtrace
# turn on/off echo of unix version of DOS commands
{
	export dtrac
	case $1 in
		''|ON|on)	dtrac=Y;;
		*)		dtrac=;;
		esac
}

function _Ducmd
# echo and/or execute UNIX version of DOS command
{
	case $dtrac in [YO]) print -r - '$' "$@" >&2;; esac
	case $dtrac/$- in
		Y*f*|/*f*)	set +f; eval "$@"; set -f;;
		Y*|/*)		eval "$@";;
		esac
}

function basename { print -r ${1##*/}; }

function BREAK
# toggle ctrl-C
{
	case $1 in
	ON|on)		stty intr '^C' 2>/dev/null
			break_=on;;
	OFF|off)	stty intr '^-' 2>/dev/null
			break_=off;;
	*)		echo "BREAK is $break_";;
	esac
}

function CD
# DOS change directory
{
	typeset cdpath
	unalias cd
	case $1 in
		'')	_Ducmd pwd;;
		/)	_Ducmd cd '$HOME';;
		/*)	CDPATH="$HOME:/" cdpath="$CDPATH"
			_Ducmd cd "${1#/}"
			CDPATH="$cdpath";;
		*)	_Ducmd cd $1;;
	esac
	alias -x cd=CD
	eval PS1="\"$DOSPS1\""
}

function del
# DOS delete
{
	typeset ans
	if test -n "$2"
		then	echo "erase $@"
			read ans?'Are you sure? (Y|N) '
			test "$ans" != "Y" -a "$ans" != "y" && return
	fi
	_Ducmd rm "$@"
}

function FOR
# DOS for, with parends, no "done"
{
	typeset args vbl="$1" uvbl i=1 j
	uvbl="\${${vbl#%}}" 
	while :
		do case $i.$1 in
			1.*)		args="${1#%} in"; i=2;;
			2.in|2.IN)	i=3;;
			3.[[\(]*)	args="$args ${1#[[(]}"; i=4;;
			4.*[]\)])	args="$args ${1%[])]}"; i=5;;
			4.*)		args="$args $1";;
			5.do|5.DO)	shift; break;;
			*)		print - 'FOR: syntax error'
					return 1;;
			esac
		shift
		done
	i="$*"
	while :
		do case $i in
			*$vbl*)	j="$j${i%%$vbl*}$uvbl"
				i="${i#*$vbl}";;
			*)	break;;
			esac
		done
	_Ducmd "for $args; do $j; done"
}

function IF
# DOS if
{
	typeset eoexp returncode=$? args='if test'
	while true
	do case $1 in
		'')		break;;
		errorlevel|ERRORLEVEL)	args="$args $returncode -ge $2; then"
				eoexp=Y
				shift;;
		not|NOT)	if test "$eoexp" = Y
				then	args="$args $1"
				else	args="$args !"
				fi;;
		exist|EXIST)	args="$args -f $2; then"
				eoexp=Y
				shift;;
		==)		args="$args = $2; then"
				eoexp=Y
				shift;;
		fi)		break;;
		*)		args="$args $1";;
	   esac
	   shift
	done
	_Ducmd "$args; fi"
}

function path
# set path
{
	if test -z "$1"
	then echo $PATH
	else PATH="$DOSPATH::`echo \"$1\" | tr ';' :`"
	fi
}

function _prompt
# prompt setting
{
	case $# in
		0)	DOSPS1="$n$g";;
		*)	DOSPS1=`echo "$@" | sed "s/$$/"'\\$_dlr/
				s/'"$e"'\[7m/\`tput smso\`/g
				s/'"$e"']m/\`tput rmso\`/g
				' | tr '\006\025' ' \012'`;;
		esac
	case $DOSPS1 in *\`tput\ *) tput bw;; esac	# be sure tputtc executed
	eval PS1="\"$DOSPS1\""
}

function SET
# DOS parameter definition
{
	typeset a tmp tmp2
	case $1 in
		'')	set; return;;
		*=*)	a="$1"; shift;;
		*)	case $2 in
				=*)	a="$1$2"; shift 2;;
				*)	echo "Usage: $0 string = string";;
				esac;;
		esac
	tmp="${a%=*}" tmp2="${a#*=}"
	_Ducmd "$tmp=\"$tmp2${*:+ $*}\"; export $tmp"
}

function tput
{
	unset -f tput
	whence tput >/dev/null ||
		{ eval "`$DOSPATH/tputtc`"; typeset -xf tput; }
	tput "$@"
}

function no_op
{
	print - $1 not needed in Unix
}

alias -x ASSIGN=". $DOSPATH/assign; assign"\
	BACKUP=backup\
	CHDIR=CD\
	CHKDSK=chkdsk\
	CLS='tput clear'\
	COMMAND='_Ducmd $SHELL'\
	COMP=". $DOSPATH/comp; set -f; _comp"\
	COPY=". $DOSPATH/copy; set -f; _copy"\
	CTTY='exec <'\
	DATE=date\
	DEL=del\
	DIR=dir\
	DISKCOMP=diskcomp\
	DISKCOPY=diskcopy\
	ECHO=echo\
	EDLIN=ed\
	ERASE=del\
	EXE2BIN=strip\
	EXIT=exit\
	FC=$DOSPATH/fc\
	FDISK='no_op FDISK'\
	FIND=find\
	FORMAT=format\
	GOTO='echo GOTO commands must be removed by batc: .bat files only'\
	GRAPHICS='tput mc0'\
	MD=mkdir\
	MKDIR=mkdir\
	MODE='no_op MODE'\
	MORE=more\
	PATH=path\
	PAUSE=pause\
	PRINT='unalias print; . $DOSPATH/PRINT; PRINT'\
	PROMPT=": `echo '\025'`; _prompt"\
	RD=rmdir\
	RECOVER='/etc/fsck -y'\
	RESTORE=restore\
	REM='#'\
	REN=". $DOSPATH/ren; set -f; _rename"\
	RENAME=". $DOSPATH/ren; set -f; _rename"\
	RMDIR=rmdir\
	SHIFT=shift\
	SORT=sort\
	SYS='no_op SYS'\
	TREE=tree\
	TYPE=cat\
	VER='uname -r'\
	VERIFY='no_op VERIFY'\
	VOL=df\
	assign=". $DOSPATH/assign; assign"\
	cd=CD\
	chdir=CD\
	cls='tput clear'\
	command='_Ducmd $SHELL'\
	comp=". $DOSPATH/comp; set -f; _comp"\
	copy=". $DOSPATH/copy; set -f; _copy"\
	ctty='exec <'\
	edlin=ed\
	erase=del\
	exe2bin=strip\
	fc=$DOSPATH/fc\
	fdisk='no_op FDISK'\
	goto='echo GOTO commands must be removed by make: .bat files only'\
	graphics='tput mc0'\
	md=mkdir\
	mode='no_op MODE'\
	print='unalias print; . $DOSPATH/PRINT; PRINT'\
	prompt=": `echo '\025'`; _prompt"\
	rd=rmdir\
	recover='/etc/fsck -y'\
	rem='#'\
	ren=". $DOSPATH/ren; set -f; _rename"\
	rename=". $DOSPATH/ren; set -f; _rename"\
	sys='no_op SYS'\
	type=cat\
	ver='uname -r'\
	verify='no_op VERIFY'\
	vol=df\
	_pg="more -2"\
	make="make -f $DOSPATH/bat.make"

whence pg >/dev/null &&
	alias -x \
		_pg="pg -2 -enp ''"\
		MORE="pg -enp '-- More --'"\
		more="pg -enp '-- More --'"

whence tr xargs >/dev/null || . $DOSPATH/DevPkg

typeset -xf dtrace _Ducmd basename BREAK CD del FOR IF \
	path _prompt SET no_op tput

case $DOSenvx in
	'')	export PS1 CDPATH DOSPS1 DOSPRINT CON AUX NUL PRN COM1 COM2 \
			break_ t d p v n g l b s e h _dlr
		SHELL=`whence $SHELL` \
		ENV=$DOSENV \
		CDPATH=:$HOME:/ \
		DOSPS1='${PWD#$HOME/}>' \
		PS1="${PWD#$HOME/}>" \
		CON=/dev/tty \
		AUX=/dev/null \
		NUL=/dev/null \
		PRN=/dev/null \
		COM1=/dev/null \
		COM2=/dev/null \
		break_=on \
		t='`/bin/date +%r`' \
		d='`/bin/date +%D`' \
		p='`basename $PWD`' \
		v='`uname -r`' \
		n='${PWD#$HOME/}' \
		g='>' \
		l='<' \
		b='|' \
		s=`echo '\006'` \
		e=`echo '\033'` \
		h=`echo '\b'` \
		_dlr='$'
		readonly CON NUL t d p v n g l b s e h _dlr
		set -o emacs
		trap "stty `stty -g 2>/dev/null` 2>/dev/null" 0
		stty intr '^C' kill '^C' 2>/dev/null
		test -r $HOME/autoexec && . $HOME/autoexec
		DOSenvx=Y;;
	esac
