|  | #!/usr/local/plan9/bin/rc | 
|  |  | 
|  | . 9.rc | 
|  | sym = 'threadmain?z | 
|  | p9main?z | 
|  | main?z' | 
|  |  | 
|  | fn dbsrc{ | 
|  | echo $sym | db $1 >[2]/dev/null | 9 sed '/symbol not found/d;s/.*\(\) //' | 
|  | } | 
|  |  | 
|  | fn go{ | 
|  | type=`{9 file $1} | 
|  | switch($type){ | 
|  | case *script* | 
|  | plumbit $1 '(script)' | 
|  | case *executable* *'plan 9 boot image'* *'shared object'* | 
|  | plumbit  `{dbsrc $1} '(executable)' | 
|  | case * | 
|  | echo 'src: can''t find source for '$1 - unrecognized type $type >[1=2] | 
|  | } | 
|  | } | 
|  |  | 
|  | fn plumbit{B $1} | 
|  |  | 
|  | fn usage{ | 
|  | echo usage: 'src [-n] [-s symbol] executable ...'>[1=2] | 
|  | exit usage | 
|  | } | 
|  |  | 
|  | while(~ $1 -*) | 
|  | switch($1){ | 
|  | case -n | 
|  | shift | 
|  | fn plumbit {echo $1} | 
|  | case -s | 
|  | shift | 
|  | # add main in case symbol is undefined | 
|  | sym=$1'?z | 
|  | threadmain?z | 
|  | p9main?z | 
|  | main?z' | 
|  | shift | 
|  | case -* | 
|  | usage | 
|  | } | 
|  |  | 
|  | if(~ $#* 0) usage | 
|  | ifs=' | 
|  | ' | 
|  | for(i){ | 
|  | wi=`{whatis $i >[2]/dev/null} | 
|  | if(test -f $i) go $i | 
|  | if not if(~ $#wi 1 && test -f $wi) go $wi | 
|  | if not echo 'src: can''t find '$i | 
|  | } |