diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 17:14:36 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 17:14:36 +0300 |
commit | 2959e1ede0ebc6fdffd7b8660f43c2ce14c9696f (patch) | |
tree | f6343b1ce11a8c87251dd27cf3d3e26b50693fa7 /rc/bin/man | |
parent | e463eb40363ff4c68b1d903f4e0cdd0ac1c5977f (diff) | |
download | plan9front-2959e1ede0ebc6fdffd7b8660f43c2ce14c9696f.tar.xz |
Import sources from 2011-03-30 iso image - rc
Diffstat (limited to 'rc/bin/man')
-rwxr-xr-x | rc/bin/man | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/rc/bin/man b/rc/bin/man new file mode 100755 index 000000000..37043d16e --- /dev/null +++ b/rc/bin/man @@ -0,0 +1,149 @@ +#!/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)^')' + } + } +} |