Commit Diff


commit - dddc2ed156bd5a089b737d9abfd97820b4b0dc17
commit + ba03b8910dd07511378e6f1007faf0539ed25598
blob - /dev/null
blob + 046417a077a6a8f953162237ffd9cc5a393fc4b5 (mode 755)
--- /dev/null
+++ bin/src
@@ -0,0 +1,55 @@
+#!/usr/local/plan9/bin/rc
+
+sym = 'threadmain?z
+	p9main?z
+	main?z'
+
+fn dbsrc{
+	echo $sym | db $1 | 9sed '1d;/symbol not found/d;s/.*\(\) //'
+}
+
+fn go{
+	type=`{file $1}
+	switch($type){
+	case *'script text'*
+		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=`{which $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
+}