mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			150 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/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)^')'
 | |
| 		}
 | |
| 	}
 | |
| }
 |