Blob


1 #!/usr/bin/env rc
3 . $PLAN9/man/fonts
5 cmd=n
6 sec=()
7 S=$PLAN9/man
8 d=0
10 fn roff {
11 preproc=()
12 x=`{doctype $2}
13 if (~ $1 t) {
14 if(~ $x *grap*)
15 preproc=($preproc grap)
16 if(~ $x *pic*)
17 preproc=($preproc pic)
18 Nflag=-Tutf
19 }
20 if not {
21 Nflag=-N
22 }
23 if(~ $x *eqn*)
24 preproc=($preproc eqn)
25 if(~ $x *tbl*)
26 preproc=($preproc tbl)
27 switch($#preproc) {
28 case 0
29 {echo -n $FONTS; cat $2< /dev/null} | troff $Nflag -$MAN
30 case 1
31 {echo -n $FONTS; cat $2< /dev/null} | $preproc | troff $Nflag -$MAN
32 case 2
33 {echo -n $FONTS; cat $2< /dev/null} | $preproc(1) | $preproc(2) | troff $Nflag -$MAN
34 case 3
35 {echo -n $FONTS; cat $2< /dev/null} | $preproc(1) | $preproc(2) | $preproc(3) | | troff $Nflag -$MAN
36 case *
37 {echo -n $FONTS; cat $2< /dev/null} | $preproc(1) | $preproc(2) | $preproc(3) | | $preproc(4) | troff $Nflag -$MAN
38 }
39 }
41 fn page {
42 if(test -d /mnt/wsys/acme)
43 /bin/page -w
44 if not
45 /bin/page
46 }
49 while(~ $d 0) {
50 if(~ $#* 0) {
51 echo 'Usage: man [-ntp] [-s sec] [0-9] [0-9] ... name1 name2 ...' >[1=2]
52 exit
53 }
54 if(test -d $S/man$1){
55 sec=($sec $1)
56 shift
57 }
58 if not switch($1) {
59 case -t ; cmd=t ; shift
60 case -n ; cmd=n ; shift
61 case -p ; cmd=p ; shift
62 case -P ; cmd=P ; shift
63 case * ; d=1
64 }
65 }
66 if(~ $#sec 0) {
67 sec=`{ls -pd $S/man[0-9]* | sed 's/man//'}
68 }
69 ix=$S/man$sec/INDEX
70 if(~ $#* 1) pat='^'^$1^' '
71 if not pat='^('^`{echo $* | 9sed 's/ /|/g'}^') '
72 fils=()
73 for(i in $S/man$sec){
74 if(/bin/test -f $i/INDEX){
75 try=`{grep $pat $i/INDEX | 9sed 's/^[^ ]* //'}
76 if(! ~ $#try 0)
77 fils=($fils $i/$try)
78 }
79 }
80 # bug: should also do following loop if not all pages found
81 if(~ $#fils 0) {
82 # nothing in INDEX. try for file of given name
83 for(i) {
84 for(n in $sec) {
85 try=$S/man$n/$i.$n*
86 if (/bin/test -f $try)
87 fils=($fils $try)
88 }
89 }
90 if(~ $#fils 0) {
91 echo 'man: no manual page' >[1=2]
92 exit 'no man'
93 }
94 }
95 for(i in $fils) {
96 if(! /bin/test -f $i)
97 echo need $i >[1=2]
98 if not {
99 switch($cmd) {
100 case t
101 roff t $i
103 case p
104 roff t $i | proof
106 case P
107 roff t $i |tr2post |psfonts >/tmp/man.$pid.ps
108 psv /tmp/man.$pid.ps
109 rm -f /tmp/man.$pid.ps
111 case n
112 roff n $i | 9sed '
113 ${
114 /^$/p
116 //N
117 /^\n$/D'