1# Written from scratch by Tom Tromey (tromey@cns.caltech.edu) 2# 3# manpage -- find and print a manual page. 4# usage: manpage section name [printing] 5# 6function manpage () 7{ 8 local i h cmd zot sec 9 local num="$1" 10 local page="$2" 11 local printing="$3" 12 local mp 13 14 mp="${MANPATH:-/usr/man}" 15 if [ "$#" -lt 2 ]; then return 1; fi # should print usage 16 if [ "$num" != "" ]; then 17 sec="${num%%[a-zA-Z]*}" 18 else 19 sec='[168234571lnpo]' 20 num="$sec" 21 fi 22 for i in $(echo "$mp" | tr : ' '); do 23 if [ ! -d "$i" ]; then continue; fi 24 file="$i"/man"$sec"/"$page"."$num"* 25 set $file 26 file="$1" 27 if [ -f "$file" ]; then 28 zot=$(sed 1q "$file") 29 cmd=${MANROFF:-"nroff -man - | col | cat -s"} 30 h=${zot##"'"'\"'} 31 if [ "$h" != "$zot" ]; then 32 while [ "$h" != "" ]; do 33 case "$h" in 34 *e) cmd="${MANEQN:-neqn} | $cmd";; 35 *r) cmd="refer | $cmd";; 36 *t) cmd="tbl | $cmd";; 37 *v) cmd="vgrind | $cmd";; 38 *) ;; # should print error 39 esac 40 h=${h%?} 41 done 42 fi 43 if [ "$printing" != "" ]; then 44 (cd "$i"; eval "$cmd") < "$file" | ${PAGER:-more} 45 else 46 (cd "$i"; eval "$cmd") < "$file" > /tmp/manpage-$$ 47 ${PAGER:-more} /tmp/manpage-$$ 48 rm -f /tmp/manpage-$$ 49 fi 50 break 51 fi 52 done 53} 54 55function whatis_internal () 56{ 57 local j 58 for j in $(echo "$MANPATH" | tr : ' '); do 59 if [ -f "$j/whatis" ]; then 60 eval $2 -i -e "$1" $j/whatis 61 fi 62 done 63} 64 65function whatis () 66{ 67 local name=$(basename "$1") 68 whatis_internal "$name" "grep -w" 69} 70 71function apropos () 72{ 73 whatis_internal "$1" "grep -F" 74} 75 76# Note: "-" and "-t" together not supported. This man could be 77# made a lot better, but it does everything I want. 78function man () 79{ 80 local PAGER printing mpath MANROFF num 81 mpath="${MANPATH:-/usr/man}" 82 while true; do 83 case "$1" in 84 -) PAGER=cat 85 printing= ;; 86 -t) 87 MANROFF=${TROFF:-"ptroff -man -t"} 88 PAGER="${TCAT:-lpr}" 89 printing=yes ;; 90 -M) 91 mpath="$2" 92 shift;; 93 *) break;; 94 esac 95 shift 96 done 97 local MANPATH="$mpath" 98 case "$1" in 99 -f | -k) 100 local g a 101 if [ "$1" = "-f" ]; then 102 g="grep -w" 103 a=$(basename "$2") 104 else 105 g="grep -F" 106 a="$2" 107 fi 108 whatis_internal "$a" "$g" 109 ;; 110 [0-9npol] | [0-9][a-z]* | new | public | old | local) 111 if [ "$1" = "new" ]; then 112 num=n 113 elif [ "$1" = "public" ]; then 114 num=p 115 elif [ "$1" = "old" ]; then 116 num=o 117 elif [ "$1" = "local" ]; then 118 num=l 119 else 120 num="$1" 121 fi 122 shift 123 manpage "$num" "$1" "$printing" 124 ;; 125 *) 126 manpage "$num" "$1" "$printing" 127 ;; 128 esac 129} 130