1*b30d1939SAndy Fiddaman########################################################################
2*b30d1939SAndy Fiddaman#                                                                      #
3*b30d1939SAndy Fiddaman#               This software is part of the ast package               #
4*b30d1939SAndy Fiddaman#          Copyright (c) 1994-2011 AT&T Intellectual Property          #
5*b30d1939SAndy Fiddaman#                      and is licensed under the                       #
6*b30d1939SAndy Fiddaman#                 Eclipse Public License, Version 1.0                  #
7*b30d1939SAndy Fiddaman#                    by AT&T Intellectual Property                     #
8*b30d1939SAndy Fiddaman#                                                                      #
9*b30d1939SAndy Fiddaman#                A copy of the License is available at                 #
10*b30d1939SAndy Fiddaman#          http://www.eclipse.org/org/documents/epl-v10.html           #
11*b30d1939SAndy Fiddaman#         (with md5 checksum b35adb5213ca9657e911e9befb180842)         #
12*b30d1939SAndy Fiddaman#                                                                      #
13*b30d1939SAndy Fiddaman#              Information and Software Systems Research               #
14*b30d1939SAndy Fiddaman#                            AT&T Research                             #
15*b30d1939SAndy Fiddaman#                           Florham Park NJ                            #
16*b30d1939SAndy Fiddaman#                                                                      #
17*b30d1939SAndy Fiddaman#                 Glenn Fowler <gsf@research.att.com>                  #
18*b30d1939SAndy Fiddaman#                                                                      #
19*b30d1939SAndy Fiddaman########################################################################
20*b30d1939SAndy Fiddaman: wrapper for .exe challenged win32 systems/commands
21*b30d1939SAndy Fiddaman
22*b30d1939SAndy Fiddamancommand=execrate
23*b30d1939SAndy Fiddaman
24*b30d1939SAndy Fiddamanbins='/bin /usr/bin /usr/sbin'
25*b30d1939SAndy Fiddaman
26*b30d1939SAndy Fiddamancase `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
27*b30d1939SAndy Fiddaman0123)	ARGV0="-a $command"
28*b30d1939SAndy Fiddaman	USAGE=$'
29*b30d1939SAndy Fiddaman[-?
30*b30d1939SAndy Fiddaman@(#)$Id: execrate (AT&T Labs Research) 2002-02-02 $
31*b30d1939SAndy Fiddaman]
32*b30d1939SAndy Fiddaman'$USAGE_LICENSE$'
33*b30d1939SAndy Fiddaman[+NAME?execrate - wrapper for .exe challenged commands]
34*b30d1939SAndy Fiddaman[+DESCRIPTION?\bexecrate\b runs \acommand\a after checking the \afile\a
35*b30d1939SAndy Fiddaman	operands for standard semantics with respect to \bwin32\b \b.exe\b
36*b30d1939SAndy Fiddaman	suffix conventions. This command is only needed on \bwin32\b
37*b30d1939SAndy Fiddaman	systems that inconsistently handle \b.exe\b across library and
38*b30d1939SAndy Fiddaman	command interfaces. \acommand\a may be one of \bcat\b(1), \bchmod\b(1),
39*b30d1939SAndy Fiddaman	\bcmp\b(1), \bcp\b(1), \bln\b(1), \bmv\b(1), or \brm\b(1).
40*b30d1939SAndy Fiddaman	Only the 2 argument forms of \bcp\b, \bln\b and \bmv\b are handled.
41*b30d1939SAndy Fiddaman	Unsupported commands and commands requiring no change are
42*b30d1939SAndy Fiddaman	silently executed.]
43*b30d1939SAndy Fiddaman[+?With no arguments \bexecrate\b exits with status 0 if the current system
44*b30d1939SAndy Fiddaman	is \b.exe\b challenged, 1 if the current system is normal.]
45*b30d1939SAndy Fiddaman[n:show?Show the underlying commands but do not execute.]
46*b30d1939SAndy Fiddaman
47*b30d1939SAndy Fiddamancommand [ option ... ] file ...
48*b30d1939SAndy Fiddaman
49*b30d1939SAndy Fiddaman[+SEE ALSO?\bwebster\b(1)]
50*b30d1939SAndy Fiddaman'
51*b30d1939SAndy Fiddaman	usage()
52*b30d1939SAndy Fiddaman	{
53*b30d1939SAndy Fiddaman		OPTIND=0
54*b30d1939SAndy Fiddaman		getopts $ARGV0 "$USAGE" OPT '-?'
55*b30d1939SAndy Fiddaman		exit 2
56*b30d1939SAndy Fiddaman	}
57*b30d1939SAndy Fiddaman	exec=1
58*b30d1939SAndy Fiddaman	while	getopts $ARGV0 "$USAGE" OPT
59*b30d1939SAndy Fiddaman	do	case $OPT in
60*b30d1939SAndy Fiddaman		n)	exec=0 ;;
61*b30d1939SAndy Fiddaman		*)	usage ;;
62*b30d1939SAndy Fiddaman		esac
63*b30d1939SAndy Fiddaman	done
64*b30d1939SAndy Fiddaman	shift `expr $OPTIND - 1`
65*b30d1939SAndy Fiddaman	;;
66*b30d1939SAndy Fiddaman*)	usage()
67*b30d1939SAndy Fiddaman	{
68*b30d1939SAndy Fiddaman		echo "Usage: execrate [ -n ] [ command [ option ... ] file ... ]" >&2
69*b30d1939SAndy Fiddaman		exit 2
70*b30d1939SAndy Fiddaman	}
71*b30d1939SAndy Fiddaman	exec=1
72*b30d1939SAndy Fiddaman	while	:
73*b30d1939SAndy Fiddaman	do	case $1 in
74*b30d1939SAndy Fiddaman		-n)	exec=0 ;;
75*b30d1939SAndy Fiddaman		-*)	usage ;;
76*b30d1939SAndy Fiddaman		*)	break ;;
77*b30d1939SAndy Fiddaman		esac
78*b30d1939SAndy Fiddaman		shift
79*b30d1939SAndy Fiddaman	done
80*b30d1939SAndy Fiddaman	;;
81*b30d1939SAndy Fiddamanesac
82*b30d1939SAndy Fiddamancase $# in
83*b30d1939SAndy Fiddaman0)	if	test ! -x /bin/cat.exe
84*b30d1939SAndy Fiddaman	then	exit 1 # normal
85*b30d1939SAndy Fiddaman	fi
86*b30d1939SAndy Fiddaman	if	/bin/cat /bin/cat >/dev/null 2>&1
87*b30d1939SAndy Fiddaman	then	exit 1 # normal
88*b30d1939SAndy Fiddaman	fi
89*b30d1939SAndy Fiddaman	exit 0 # challenged
90*b30d1939SAndy Fiddaman	;;
91*b30d1939SAndy Fiddaman1)	usage
92*b30d1939SAndy Fiddaman	;;
93*b30d1939SAndy Fiddamanesac
94*b30d1939SAndy Fiddamancase $1 in
95*b30d1939SAndy Fiddaman*cat|*rm)
96*b30d1939SAndy Fiddaman	NUM=0
97*b30d1939SAndy Fiddaman	;;
98*b30d1939SAndy Fiddaman*chgrp|*chmod)
99*b30d1939SAndy Fiddaman	NUM=1
100*b30d1939SAndy Fiddaman	;;
101*b30d1939SAndy Fiddaman*cmp|*cp|*ln|*mv)
102*b30d1939SAndy Fiddaman	NUM=2
103*b30d1939SAndy Fiddaman	;;
104*b30d1939SAndy Fiddaman*)	case $exec in
105*b30d1939SAndy Fiddaman	0)	echo "$@" ;;
106*b30d1939SAndy Fiddaman	*)	"$@" ;;
107*b30d1939SAndy Fiddaman	esac
108*b30d1939SAndy Fiddaman	exit
109*b30d1939SAndy Fiddaman	;;
110*b30d1939SAndy Fiddamanesac
111*b30d1939SAndy FiddamanCMD=$1
112*b30d1939SAndy Fiddamanshift
113*b30d1939SAndy Fiddamancase $CMD in
114*b30d1939SAndy Fiddaman*/*)	;;
115*b30d1939SAndy Fiddaman*)	for d in $bins
116*b30d1939SAndy Fiddaman	do	if	test -x $d/$1 -o -x $d/$1.exe
117*b30d1939SAndy Fiddaman		then	CMD=$d/$1
118*b30d1939SAndy Fiddaman			break
119*b30d1939SAndy Fiddaman		fi
120*b30d1939SAndy Fiddaman	done
121*b30d1939SAndy Fiddaman	;;
122*b30d1939SAndy Fiddamanesac
123*b30d1939SAndy Fiddamanwhile	:
124*b30d1939SAndy Fiddamando	case $1 in
125*b30d1939SAndy Fiddaman	-*)	CMD="$CMD $1" ;;
126*b30d1939SAndy Fiddaman	*)	break ;;
127*b30d1939SAndy Fiddaman	esac
128*b30d1939SAndy Fiddaman	shift
129*b30d1939SAndy Fiddamandone
130*b30d1939SAndy Fiddamancase $exec in
131*b30d1939SAndy Fiddaman0)	CMD="echo $CMD" ;;
132*b30d1939SAndy Fiddamanesac
133*b30d1939SAndy Fiddamancase $NUM:$# in
134*b30d1939SAndy Fiddaman*:0)	;;
135*b30d1939SAndy Fiddaman1:*)	CMD="$CMD $1"
136*b30d1939SAndy Fiddaman	NUM=0
137*b30d1939SAndy Fiddaman	shift
138*b30d1939SAndy Fiddaman	;;
139*b30d1939SAndy Fiddamanesac
140*b30d1939SAndy Fiddamancase $NUM:$# in
141*b30d1939SAndy Fiddaman0:*)	status=0
142*b30d1939SAndy Fiddaman	for f
143*b30d1939SAndy Fiddaman	do	if	test "$f" -ef "$f".exe
144*b30d1939SAndy Fiddaman		then	f=$f.exe
145*b30d1939SAndy Fiddaman		fi
146*b30d1939SAndy Fiddaman		$CMD "$f"
147*b30d1939SAndy Fiddaman		case $? in
148*b30d1939SAndy Fiddaman		0)	;;
149*b30d1939SAndy Fiddaman		*)	status=$? ;;
150*b30d1939SAndy Fiddaman		esac
151*b30d1939SAndy Fiddaman	done
152*b30d1939SAndy Fiddaman	exit $status
153*b30d1939SAndy Fiddaman	;;
154*b30d1939SAndy Fiddaman2:2)	f=$1
155*b30d1939SAndy Fiddaman	case $f in
156*b30d1939SAndy Fiddaman	*.exe)	;;
157*b30d1939SAndy Fiddaman	*)	if	test "$f" -ef "$f".exe
158*b30d1939SAndy Fiddaman		then	f=$f.exe
159*b30d1939SAndy Fiddaman		fi
160*b30d1939SAndy Fiddaman		;;
161*b30d1939SAndy Fiddaman	esac
162*b30d1939SAndy Fiddaman	case $f in
163*b30d1939SAndy Fiddaman	*.exe)	if	test -d "$2"
164*b30d1939SAndy Fiddaman		then	t=$2/$f
165*b30d1939SAndy Fiddaman		else	t=$2
166*b30d1939SAndy Fiddaman		fi
167*b30d1939SAndy Fiddaman		case $t in
168*b30d1939SAndy Fiddaman		*/*)	b=`basename "$t"` ;;
169*b30d1939SAndy Fiddaman		*)	b=$t ;;
170*b30d1939SAndy Fiddaman		esac
171*b30d1939SAndy Fiddaman		case $b in
172*b30d1939SAndy Fiddaman		*.*)	$CMD "$f" "$t"; exit ;;
173*b30d1939SAndy Fiddaman		*)	$CMD "$f" "$t".exe; exit ;;
174*b30d1939SAndy Fiddaman		esac
175*b30d1939SAndy Fiddaman		;;
176*b30d1939SAndy Fiddaman	esac
177*b30d1939SAndy Fiddaman	;;
178*b30d1939SAndy Fiddamanesac
179*b30d1939SAndy Fiddaman$CMD "$@"
180