xref: /plan9/rc/bin/src (revision 51711cb6a91a3f2a5be5c3246334b85a608f135b)
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