| 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 | #
 | 
|---|
| 6 | function 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 | 
 | 
|---|
| 55 | function 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 | 
 | 
|---|
| 65 | function whatis ()
 | 
|---|
| 66 | {
 | 
|---|
| 67 |   local name=$(basename "$1")
 | 
|---|
| 68 |   whatis_internal "$name" "grep -w"
 | 
|---|
| 69 | }
 | 
|---|
| 70 | 
 | 
|---|
| 71 | function 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.
 | 
|---|
| 78 | function 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 | }
 | 
|---|