#!/bin/rc # man - print manual pages rfork e . /sys/man/fonts out=cat search=yes fpath=no cmd=n sec=() files=() done=no fn usage { echo 'Usage: man [-bfnpPStw] [section ...] title ...' >[1=2] exit } fn roff { preproc=() postproc=cat opts=-Tutf x=`{doctype $2} if (~ $1 t) for(p in grap pic) if(~ $x *^$p^*) preproc=($preproc $p) if not{ opts='-N -rL1000i' if (grep -s '^\.(2C|sp *[0-9]*\.)' $2) postproc=col } for(p in eqn tbl) if(~ $x *^$p^*) preproc=($preproc $p) preproc=`{echo $preproc | sed 's/ /|/g'} if(~ $#preproc 0) preproc=cat cat /env/FONTS $2 | eval $preproc | troff $opts -$MAN | $postproc } fn doman { cmd=$1; shift for(i){ switch($cmd){ case w echo $i case t roff t $i case p roff t $i | grep -v '^x X html' case P roff t $i 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)^')' } } | $out } done=no while(~ $done no){ if(~ $#* 0) usage if(test -d /sys/man/$1){ sec=($sec $1) shift } if not switch($1){ case -b ; cmd=b ; shift case -f ; fpath=yes ; shift case -n ; cmd=n ; shift case -P ; cmd=P ; out=page ; shift case -p ; cmd=p ; out=proof ; shift case -S ; search=no ; shift case -t ; cmd=t ; shift case -w ; cmd=w ; shift case * ; done=yes } } if(~ $#* 0) usage if(~ $fpath yes){ doman $cmd $* exit } if(~ $#sec 0) sec=`{ls -pd /sys/man/[0-9]*} if(~ $search yes){ pat='^('^`{echo $* | sed 's/ /|/g'}^') ' for(i in /sys/man/$sec) if(/bin/test -f $i/INDEX){ try=`{grep -i $pat $i/INDEX | sed 's/^[^ ]* //' | sort -u} if(! ~ $#try 0) files=($files $i/$try) } } if(~ $#files 0) for(i){ if(~ $i intro) i=0intro for(n in $sec){ try=`{echo /sys/man/$n/$i | tr A-Z a-z} if (/bin/test -f $try) files=($files $try) } } if(~ $#files 0){ echo 'man: no manual page' >[1=2] exit 'no man' } doman $cmd $files