tHow could I forget this? - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ba03b8910dd07511378e6f1007faf0539ed25598
 (DIR) parent dddc2ed156bd5a089b737d9abfd97820b4b0dc17
 (HTM) Author: rsc <devnull@localhost>
       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(-)
       ---
 (DIR) 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
       +}