123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- #!/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)^')'
- }
- }
- }
|