summaryrefslogtreecommitdiff
path: root/rc/bin/src
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 17:14:36 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 17:14:36 +0300
commit2959e1ede0ebc6fdffd7b8660f43c2ce14c9696f (patch)
treef6343b1ce11a8c87251dd27cf3d3e26b50693fa7 /rc/bin/src
parente463eb40363ff4c68b1d903f4e0cdd0ac1c5977f (diff)
downloadplan9front-2959e1ede0ebc6fdffd7b8660f43c2ce14c9696f.tar.xz
Import sources from 2011-03-30 iso image - rc
Diffstat (limited to 'rc/bin/src')
-rwxr-xr-xrc/bin/src55
1 files changed, 55 insertions, 0 deletions
diff --git a/rc/bin/src b/rc/bin/src
new file mode 100755
index 000000000..b2de4dc4c
--- /dev/null
+++ b/rc/bin/src
@@ -0,0 +1,55 @@
+#!/bin/rc
+
+rfork e
+path=(/bin/)
+
+sym = 'threadmain?z
+ main?z'
+
+fn dbsrc{
+ echo $sym | db $1 | sed '1d;/symbol not found/d;s/.*\(\) //'
+}
+
+fn go{
+ type=`{file <$1 | sed 's/stdin: //'}
+ switch($type){
+ case 'rc executable file'
+ plumbit $1 '(rc executable)'
+ case *executable* *'plan 9 boot image'*
+ 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
+ main?z'
+ shift
+ case -*
+ usage
+ }
+
+if(~ $#* 0) usage
+
+for(i){
+ if(test -f $i) go $i
+ if not if(test -f /bin/$i) go /bin/$i
+ if not if(test -f /bin/*/$i) go /bin/*/$i
+ if not if(test -f /bin/*/*/$i) go /bin/*/*/$i
+ if not echo 'src: can''t find '$i
+}