#!/bin/rc

rfork e

. /sys/man/fonts

cmd=n
sec=()
S=/sys/man
d=0

fn roff {
	preproc=()
	if (~ $2 $S/1/eqn) preproc=eqn
	if (~ $2 $S/6/auth) preproc=eqn
	if (~ $2 $S/1/tbl) preproc=tbl
	if (~ $1 t) {
		if (~ $2 $S/1/pic) preproc=pic
		if (~ $2 $S/1/grap) preproc=(grap pic)
		Nflag=-Tutf
	}
	if not {
		Nflag=-N
	}
	switch($#preproc) {
		case 0
			{echo -n $FONTS; cat $2< /dev/null} | troff $Nflag -$MAN 
		case 1
			{echo -n $FONTS; cat $2< /dev/null} | $preproc | troff $Nflag -$MAN
		case *
			{echo -n $FONTS; cat $2< /dev/null} | $preproc(1) | $preproc(2) | troff $Nflag -$MAN
	}
}

while(~ $d 0) {
	if(~ $#* 0) {
		echo 'Usage: man [-ntp] [-s sec] [0-9] [0-9] ... name1 name2 ...' >[1=2]
		exit
	}
	switch($1) {
		case [0-9] ; sec=($sec $1) ; shift
		case -t ; cmd=t ; shift
		case -n ; cmd=n ; shift
		case -p ; cmd=p ; shift
		case -P ; cmd=P ; 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=()
for(i in $S/$sec){
	if(/bin/test -f $i/INDEX){
		try=`{grep $pat $i/INDEX | sed 's/^[^ ]* //'}
		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) {
		for(n in $sec) {
			try=$S/$n/$i
			if (/bin/test -f $try)
				fils=($fils $try)
		}
	}
	if(~ $#fils 0) {
		echo 'man: no manual page' >[1=2]
		exit
	}
}
for(i in $fils) {
	if(! /bin/test -f $i)
		echo need $i >[1=2]
	if not {
		switch($cmd) {
		case t
			roff t $i

		case p
			roff t $i | proof

		case P
			roff t $i | page

		case n
			roff n $i | sed '
				${
        			       /^$/p
				}
				//N
				/^\n$/D'
		}
	}
}