tHow could I forget this? - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit ba03b8910dd07511378e6f1007faf0539ed25598
parent dddc2ed156bd5a089b737d9abfd97820b4b0dc17
Author: rsc 
Date:   Tue, 20 Apr 2004 17:54:04 +0000

How could I forget this?

Diffstat:
  A bin/src                             |      55 +++++++++++++++++++++++++++++++

1 file changed, 55 insertions(+), 0 deletions(-)
---
diff --git a/bin/src b/bin/src
t@@ -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
+}