Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#!/bin/rc
# man - print manual pages
rfork e

. /sys/man/fonts

cmd=n
sec=()
S=/sys/man
d=0

fn roff {
        preproc=()
        postproc=cat
        x=`{doctype $2}
        if (~ $1 t) {
                if(~ $x *grap*)
                        preproc=($preproc grap)
                if(~ $x *pic*)
                        preproc=($preproc pic)
                Nflag=-Tutf
        }
        if not {
                Nflag='-N'
                Lflag='-rL1000i'
                # setting L changes page length to infinity (sed script removes empty lines)
                if (grep -s '^\.(2C|sp *[0-9]*\.)' $2)
                        postproc=col
        }
        if(~ $x *eqn*)
                preproc=($preproc eqn)
        if(~ $x *tbl*)
                preproc=($preproc tbl)
        {echo -n $FONTS; cat $2 </dev/null} |
                switch($#preproc) {
                case 0
                        troff $Nflag $Lflag -$MAN 
                case 1
                        $preproc | troff $Nflag $Lflag -$MAN
                case 2
                        $preproc(1) | $preproc(2) | troff $Nflag $Lflag -$MAN
                case 3
                        $preproc(1) | $preproc(2) | $preproc(3) |
                                troff $Nflag $Lflag -$MAN
                case *
                        $preproc(1) | $preproc(2) | $preproc(3) |
                                $preproc(4) | troff $Nflag $Lflag -$MAN
                } | $postproc
}

fn page {
        if(test -d /mnt/wsys/acme)
                /bin/page -w
        if not
                /bin/page
}


search=yes
while(~ $d 0) {
        if(~ $#* 0) {
                echo 'Usage: man [-bntpPSw] [0-9] [0-9] ... name1 name2 ...' >[1=2]
                exit
        }
        if(test -d $S/$1){
                sec=($sec $1)
                shift
        }
        if not
                switch($1) {
                case -b ; cmd=b ; shift
                case -n ; cmd=n ; shift
                case -P ; cmd=P ; shift
                case -p ; cmd=p ; shift
                case -S ; search=no ; shift
                case -t ; cmd=t ; shift
                case -w ; cmd=w ; shift
                case * ; d=1
                }
}
if(~ $#sec 0) {
        sec=`{ls -pd $S/[0-9]* }
}
ix=$S/$sec/INDEX
if(~ $#* 1) pat='^'^$1^' '
if not pat='^('^`{echo $* | sed 's/ /|/g'}^') '
fils=()
if(~ $search yes)
for(i in $S/$sec){
        if(/bin/test -f $i/INDEX){
                try=`{grep -i $pat $i/INDEX | sed 's/^[^ ]* //' | sort -u}
                if(! ~ $#try 0)
                        fils=($fils $i/$try)
        }
}
# bug: should also do following loop if not all pages found
if(~ $#fils 0) {
        # nothing in INDEX. try for file of given name
        for(i) {
                if(~ $i intro) i=0intro
                for(n in $sec) {
                        try=`{echo $S/$n/$i | tr A-Z a-z}
                        if (/bin/test -f $try)
                                fils=($fils $try)
                }
        }
        if(~ $#fils 0) {
                echo 'man: no manual page' >[1=2]
                exit 'no man'
        }
}
for(i in $fils) {
        if(! /bin/test -f $i)
                echo need $i >[1=2]
        if not {
                switch($cmd) {
                case w
                        echo $i

                case t
                        roff t $i

                case p
                        roff t $i | grep -v '^x X html' | proof

                case P
                        roff t $i | page

                case n
                        roff n $i | sed '
                                ${
                                       /^$/p
                                }
                                //N
                                /^\n$/D'

                case b
                        x=`{echo $i | sed 's;/sys/man/(.*)/(.*);\1 \2;'}
                        if(~ $x(2) 0intro) x=($x(1) intro)
                        roff n $i | sed '
                                ${
                                       /^$/p
                                }
                                //N
                                /^\n$/D' |
                        plumb -i -d edit -a 'action=showdata filename=/man/'$x(2)^'('$x(1)^')'
                }
        }
}