#!/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 if (grep -s '^\.2C' $2) postproc=col } if(~ $x *eqn*) preproc=($preproc eqn) if(~ $x *tbl*) preproc=($preproc tbl) {echo -n $FONTS; cat $2 [1=2] exit } if(test -d $S/$1){ sec=($sec $1) shift } if not switch($1) { case -t ; cmd=t ; shift case -n ; cmd=n ; shift case -p ; cmd=p ; shift case -P ; cmd=P ; shift case -w ; cmd=w ; shift case -b ; cmd=b ; shift case -S ; search=no ; 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)^')' } } }