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