# Determine which alias, procedure or executable file will run. # Copyright (c) 1998-2012 by Hamilton Laboratories. All rights reserved. proc possiblename( s ) local c, i @ c = substr( s, 0, 1 ) if ( c !~ "[a-zA-Z_@]" ) return 0 for i = 1 to strlen( s ) do @ c = substr( s, i, 1 ) if ( c !~ "[a-zA-Z_@0-9]" ) return 0 end return 1 end proc which( cmd ) # Figure out what will be run if cmd is typed. # The search order is: # 1. Aliases # 2. Procedures # 3. Executable files local result if ( $#cmd ) then if ( possiblename( cmd ) ) then # Turn off errors if looking for aliases and procs # that don't exist. local savenonovar @ savenonovar = nonovar @ nonovar = 2 # discard errors @ result = ``eval alias $cmd`` if ( $#result ) then set result = "alias $result" else @ result = ``eval proc $cmd`` if ( $#result ) then set result = "proc $result" else @ result = ``whereis $cmd`` if ( $#result > 1 ) @ result = result[ 0 ] end # Restore the error handling. @ nonovar = savenonovar end else @ result = ``whereis $cmd`` if ( $#result > 1 ) @ result = result[ 0 ] end end return result end which $argv |