1#!/bin/rc 2 3rfork e 4path=(/bin/) 5 6sym = 'threadmain?z 7 main?z' 8 9fn dbsrc{ 10 echo $sym | db $1 | sed '1d;/symbol not found/d;s/.*\(\) //' 11} 12 13fn go{ 14 type=`{file <$1 | sed 's/stdin: //'} 15 switch($type){ 16 case 'rc executable file' 17 plumbit $1 '(rc executable)' 18 case *executable* *'plan 9 boot image'* 19 plumbit `{dbsrc $1} '(executable)' 20 case * 21 echo 'src: can''t find source for '$1 - unrecognized type $type >[1=2] 22 } 23} 24 25fn plumbit{B $1} 26 27fn usage{ 28 echo usage: 'src [-n] [-s symbol] executable ...'>[1=2] 29 exit usage 30} 31 32while(~ $1 -*) 33 switch($1){ 34 case -n 35 shift 36 fn plumbit {echo $1} 37 case -s 38 shift 39 # add main in case symbol is undefined 40 sym=$1'?z 41 main?z' 42 shift 43 case -* 44 usage 45 } 46 47if(~ $#* 0) usage 48 49for(i){ 50 if(test -f $i) go $i 51 if not if(test -f /bin/$i) go /bin/$i 52 if not if(test -f /bin/*/$i) go /bin/*/$i 53 if not if(test -f /bin/*/*/$i) go /bin/*/*/$i 54 if not echo 'src: can''t find '$i 55} 56