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