ssmith@eos (Stephen Smith) (03/15/89)
I changed the format of apropos to avoid problems with split() and to make it appear a true clone. Installation as /usr/local/bin/apropos. The index by default points at /usr/local/lib/index. Steve Smith comments/complaints/compliments to: ssmith@eos.arc.nas.gov ============================ snip snip ================================ #!/bin/sh # # BSD apropos clone -- lookup manual pages by keyword # # Usage: apropos [-i] | [ key words... ] # -i builds the index used for the keyword lookups. # # Notes: # It is not advisable to build the index and do keyword lookups simultaneously. # We use cron to build the index once a week at night. # # # $Header: /usr/u/ssmith/RCS/apropos,v 1.3 88/08/12 10:00:15 ssmith Exp $ # # $Log: apropos,v $ # Revision 1.3 88/08/12 10:00:15 ssmith # New rcs file # # Revision 1.3 88/06/13 12:32:15 ssmith # Exit with message if no arguments (used to hang grep). # 'Unknown flag' message ( from "Usage...."). # Handle multiple args. ( 'for' loop ). # Use of grep's exit codes--message if nothing found. # grep flag from '-w' to '-i' (doug). # Eliminated pipe to 'more' ( screwed up $?). If desired, run grep in # a subshell then filter output, e.g., '| fold | more'. # Awk properly eliminates .B's from SGI graphics manual pages. # # Revision 1.2 88/06/13 12:27:37 ssmith # test for su added 11/9/87 # # Revision 1.1 88/06/13 12:21:05 ssmith # Initial revision # # # Database: index=/usr/local/lib/index build=0 # don't build if [ 0 -eq $# ] then echo $0 What?; exit; # echo "Usage: $0 [-i] [word]"; fi for i do case "$i" in -i) if [ ! -w /bin/su ] then echo $USER: You must be root to build index. exit 1 else build=1 fi break ;; -*) echo Unknown flag $i; exit ;; *) (if grep -i $i $index then : ok; else echo "$i: Nothing appropriate."; fi) | fold esac done if [ $build -eq 0 ]; then exit ; fi # # Build data base (-i). Each entry consists of man page and section, and a # brief description of the command. # PATH=/bin:/usr/bin: root=/usr/man ; sec=[au]_man ; lsec=local ; subsec=man[0-9] ; files="$root/$sec/$subsec/*"; lfiles="$root/$lsec/$subsec/*" ; for x in $files $lfiles do awk ' /^\.TH/ { sec="("$3")"; } /^\.SH NAME/ { for( getline ; $1 !~ /^.SH/ ; getline ) { $1 = substr($1, 1, length($0)); if($1 == ".B") { $1 = $2; $2=""; }; str = str $0 " "; } d = index(str, "-"); printf("%-20s %s\n", substr(str, 1, d-2)sec, substr( str, d)); exit; } ' $x done 2> $index.errs | deroff -mm > $index if [ ! -s $index.errs ] ; then rm -f $index.errs ; fi ; exit 0; # Note: # deroff doesn't handle leading '.B's (gl pages), they're stripped first. # Acknowledgements: The APROPOS clone was developed by # G. "Murdock" Helms on behest of Doug Kerr, with thanks to # Doug Kerr, Khanh Nguyen, Steve Philipson and Steve Smith # for their help and suggestions. (Thanks guys!)