home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1200 < prev    next >
Internet Message Format  |  1990-12-28  |  15KB

  1. From: scott@cs.odu.edu (Scott Yelich)
  2. Newsgroups: comp.sources.wanted,comp.lang.c,alt.sources
  3. Subject: Re: key word searches in text files
  4. Message-ID: <SCOTT.90Apr18133215@croaker.cs.odu.edu>
  5. Date: 18 Apr 90 17:32:15 GMT
  6.  
  7. >
  8. >   We maintain a large mass of text files on the board and I would like
  9. >   for a caller to able to look for key works in those files  WITHOUT having
  10. >   to use [e]grep to bang away at the files... This is the method we're
  11. >   currently using.  It works, but is slow not to mention the wear and
  12. >   tear on the HD.
  13. >
  14. >   And there any programs (or suggestions) that will take a text file and
  15. >   create a key-word list, ignore the usual non-essential words (and,
  16. >   the, at , etc)?
  17.  
  18. I call this program ``lookfor'' and I use it on my text file databases...
  19. I was going to submit it later this year... perhaps you could modify
  20. it to your liking...
  21.  
  22. Currently this program is used to keep an ALTERNATE database of
  23. ``help'' files for consultants.  It works off a file such as this:
  24.  
  25. ------------------------------------------------------------------------------
  26. SUBJECT  : Scott D. Yelich
  27. TITLE    : Scott D. Yelich
  28. INFO     : Wednesday- September 6, 1989 | Wednesday- September 6, 1989 [scott]
  29. KEY WORDS: scott d. yelich information mail call lives house home where why
  30.            when etc
  31.  
  32. Permanent mailing address:
  33.  
  34. Scott D. Yelich
  35. 4 Kensington Ct.
  36. Williamsburg, Va. 23185
  37. (804) 565-1811
  38. ------------------------------------------------------------------------------
  39.  
  40. Of course, it is currently configured for OUR local system... but it
  41. should work without too many problems on almost any unix system.
  42.  
  43. I am currently working on rw-writing this to make the code faster.
  44.  
  45. Have fun!
  46.  
  47.  
  48.  -----------------------------------------------------------------------------
  49.  Scott D. Yelich                                 scott@cs.odu.edu [128.82.8.1]
  50.  After he pushed me off the cliff, he asked me, as I fell, ``Why'd you jump?''
  51.  Administrator of:    Game design requests to <game-design-request@cs.odu.edu>
  52.  -----------------------------------------------------------------------------
  53.  
  54.  
  55. #!/bin/sh
  56. #    This is a shell archive.
  57. #    Run the file through sh to extract its contents.
  58. # shar:    Shell Archiver
  59. #    Run the following text with /bin/sh to create:
  60. #    ./lookfor
  61. # This archive created: Wed Apr 18 13:26:37 1990
  62. cat << \SHAR_EOF > ./lookfor
  63. #!/bin/sh
  64.  
  65. # +--------------------------------------------------------------------------+
  66. # | Scott D. Yelich                                               xanth.uucp |
  67. # | C.S.  Department                                        scott@cs.odu.edu |
  68. # | Old Dominion University                           scott@xanth.cs.odu.edu |
  69. # | Norfolk, VA 23529-0612                                    [ 128.82.8.1 ] |
  70. # +--------------------------------------------------------------------------+ 
  71.  
  72. # +--------------------------------------------------------------------------+ 
  73. # | Copyright 1989 Scott D. Yelich.   All rights reserved.  Last Mod: 8/8/89 |
  74. # +--------------------------------------------------------------------------+
  75.  
  76. INITIALIZE_VARIABLES ()
  77.  {
  78.   #
  79.   # Initialize external executable paths (Who needs a path variable anyway!).
  80.   #
  81.   PATH=
  82.   LS=/bin/ls
  83.   TR=/bin/tr
  84.   CP=/bin/cp
  85.   MV=/bin/mv
  86.   RM=/bin/rm
  87.   AWK=/bin/awk
  88.   PWD=/bin/pwd
  89.   CAT=/bin/cat
  90.   SED=/bin/sed
  91.   EXPR=/bin/expr
  92.   SORT=/bin/sort
  93.   ECHO=/bin/echo
  94.   DIFF=/bin/diff
  95.   SORT=/bin/sort
  96.   TAIL=/usr/ucb/tail
  97.   MAIL=/usr/ucb/mail
  98.   EGREP=/bin/egrep
  99.   COLRM=/usr/ucb/colrm
  100.   HELPMAN=/usr/ucb/man
  101.   YPWHICH=/bin/ypwhich
  102.   BASENAME=/bin/basename
  103.  
  104.   #
  105.   # Initialize internal variables and flags...
  106.   #
  107.   SHOW=
  108.   SYNC=
  109.   TSKGI=
  110.   NAIVE=
  111.   OUTPUT=
  112.   LOCATE=
  113.   HEADER=
  114.   MANUAL=
  115.   VERBOSE=
  116.   OPTIONS=
  117.   ADD_FILE=
  118.   CONFIGURE=
  119.   INITIALIZE=
  120.   UPDATE_FILE=
  121.   MATCH_WORDS=
  122.   FIND_KEYWORD=
  123.   LIST_KEYWORDS=
  124.  
  125.   #
  126.   # Initialize others and miscellaneous...
  127.   #
  128.   CR="
  129.   UNIQ=$$
  130.   TMP=/tmp
  131.   NULL=/dev/null
  132.   umask 117
  133.   TABS="        "
  134.   INFO=":INFO     :"
  135.   TITLE=":TITLE    :"
  136.   SUBJECT=":SUBJECT  :"
  137.   KEYWORD=":KEY WORDS:"
  138.   WHOIAM=`/usr/ucb/whoami`
  139.   SERVERS="helios yucca tuna nansen granite hengest"
  140.   MASTER_LIB=/usr/amon-re/local/lib/sysman
  141.   MASTER_KEYWORDS=$MASTER_LIB/KEYWORDS
  142.   MASTER_FILENAMES=$MASTER_LIB/FILENAMES
  143.   NFSERVER=`$YPWHICH | $TR "." " " | $AWK '{print $1}'`
  144.   LIB=/usr/$NFSERVER/local/lib/sysman
  145.   KEYWORDS=$LIB/KEYWORDS
  146.   FILENAMES=$LIB/FILENAMES
  147.   PWD_DIRECTORY=`$PWD`
  148.   TEMP_1=$TMP/"$UPROGNAME"_"$UNIQ"_TEMP_1
  149.   TEMP_2=$TMP/"$UPROGNAME"_"$UNIQ"_TEMP_2
  150.   TEMP_3=$TMP/"$UPROGNAME"_"$UNIQ"_TEMP_3
  151.   for VAR in $VARS
  152.   do
  153.     OPTIONS=No
  154.     case $OPTION in
  155.       "-add"       |"-add"  |"-a") ADD_FILE=$VAR               ;OPTIONS=Yes ;;
  156.       "-list"      |"-list" |"-l") SHOW=Yes                    ;OPTIONS=    ;;
  157.       "-help"      |"-help" |"-h") MANUAL=Yes                  ;OPTIONS=    ;;
  158.       "-find"      |"-find" |"-f") FIND_KEYWORD=Yes            ;OPTIONS=    ;;
  159.       "-guru"      |"-guru" |"-g") TSKGI="I $TSKGI"            ;OPTIONS=    ;;
  160.       "-info"      |"-info" |"-i") TSKGI="I $TSKGI"            ;OPTIONS=    ;;
  161.       "-help"      |"-help" |"-h") MANUAL=Yes                  ;OPTIONS=    ;;
  162.       "-match"     |"-match"|"-m") MATCH_WORDS=Yes             ;OPTIONS=    ;;
  163.       "-title"     |"-title"|"-t") TSKGI="T $TSKGI"            ;OPTIONS=    ;;
  164.       "-update"    |"-up"   |"-u") UPDATE_FILE=$MASTER_LIB/$VAR;OPTIONS=Yes ;;
  165.       "-output"    |"-out"  |"-o") OUTPUT=$VAR                 ;OPTIONS=Yes ;;
  166.       "-subject"   |"-sub"  |"-s") TSKGI="S $TSKGI"            ;OPTIONS=    ;;
  167.       "-keyword"   |"-key"  |"-k") TSKGI="K $TSKGI"            ;OPTIONS=    ;;
  168.       "-verbose"   |"-verb" |"-v") VERBOSE=Yes                 ;OPTIONS=    ;;
  169.       "-database"  |"-data" |"-d") LIB=$VAR                    ;OPTIONS=Yes ;;
  170.       "-configure" |"-conf" |"-c") CONFIGURE=Yes               ;OPTIONS=    ;;
  171.       "-elaborate" |"-elab" |"-e") LOCATE="$LOCATE$VAR "       ;OPTIONS=Yes ;;
  172.       "--conf"     |"--c"        ) CONFIGURE=No                ;OPTIONS=    ;;
  173.       "-sync"      |"-synk"      ) SYNC=Yes                    ;OPTIONS=    ;;
  174.       "-naive"     |"-naive"|"-n") NAIVE=Yes                   ;OPTIONS=    ;;
  175.     esac
  176.     if [ "$OPTIONS" = "No" ]; then
  177.       if [ "$OPTION" -a "$OPTION" != "$UPROGNAME" ]; then
  178.         LOCATE="$LOCATE$OPTION "
  179.       fi
  180.     fi
  181.     if [ "$OPTIONS" != "Yes" ]; then
  182.       OPTION=$VAR
  183.     else
  184.       OPTION=
  185.     fi
  186.   done
  187.   if [ -z "$PAGER" ]; then
  188.     PAGER=/usr/new/less
  189.   fi
  190.   if [ -z "$EDITOR" ]; then
  191.     EDITOR="/usr/new/emacs -nw"
  192.   fi
  193.   if [ ! "$LOCATE" ]; then
  194.     MANUAL=Yes
  195.   fi
  196.   if [ ! "$TSKGI" ]; then
  197.     TSKGI="K"
  198.   fi
  199.   if [ "$VERBOSE" ]; then
  200.     $ECHO "$UPROGNAME: Executing."
  201.     $ECHO "$UPROGNAME: Initializing."
  202.   fi
  203. : ; }
  204.  
  205. MANPAGE ()
  206.  {
  207.   #
  208.   # Function: MAN
  209.   #
  210.   if [ "$VERBOSE" ]; then
  211.     $ECHO "$UPROGNAME: Checking variables for displaying manual page."
  212.   fi
  213.   if [ "$MANUAL" ]; then
  214.     if [ "$VERBOSE" ]; then
  215.       $ECHO "$UPROGNAME: Displaying the manual page for $UPROGNAME."
  216.     fi
  217.     $HELPMAN $LPROGNAME
  218.     exit 0
  219.   fi
  220. : ; }
  221.  
  222. NOTIFY ()
  223.  {
  224.   #
  225.   # Function: NOTIFY
  226.   #
  227.   if [ "$VERBOSE" ]; then
  228.     $ECHO "$UPROGNAME: Notify systems."
  229.   fi
  230.   $MAIL -s "Sysman updated: $FILENAME" system <<EOF_NOTIFY >$NULL
  231.  
  232. I updated sysman...
  233.  
  234. Here is the new "$FILENAME", please take a look at it.
  235. If you want to change this file, use "sysman -v -u $FILENAME"
  236.  
  237. Thank you.
  238.  
  239.  ---8<--[ CUT HERE ]----------------------------------------------------------
  240. ~r $UPDATE_FILE
  241.  
  242. EOF_NOTIFY
  243. : ; }
  244.  
  245. INSTALL ()
  246.  {
  247.   #
  248.   # Function: INSTALL
  249.   #
  250.   if [ ! "$FILENAME" ]; then
  251.     FILENAME=`$BASENAME $UPDATE_FILE`
  252.   fi
  253.   if [ "$VERBOSE" ]; then
  254.     $ECHO "$UPROGNAME: Installing- $FILENAME"
  255.   fi
  256.   for MACHINE in $SERVERS
  257.   do
  258.     $CP $UPDATE_FILE /usr/$MACHINE/local/lib/sysman/$FILENAME
  259.   done
  260. : ; }
  261.  
  262. ADD ()
  263.  {
  264.   #
  265.   # Function: ADD
  266.   #
  267.   if [ "$VERBOSE" ]; then
  268.     $ECHO "$UPROGNAME: Add $ADD_FILE"
  269.   fi
  270.   if [ "$ADD_FILE" ]; then
  271.     FILE=`$BASENAME $ADD_FILE`
  272.     DUMMY=`($LS $MASTER_LIB/$FILE.* ) 2>$NULL | $TR "." " " | $SORT -n +1.0 |  $TAIL -1 | $AWK '{print $2}'`
  273.     APPENDAGE=`$EXPR 0$DUMMY + 1`
  274.     FILENAME=$FILE.$APPENDAGE
  275.     UPDATE_FILE=$MASTER_LIB/$FILENAME
  276. $CAT >$UPDATE_FILE <<EOF 
  277. SUBJECT  : Subject
  278. TITLE    : Title
  279. INFO     : WeekDay- Month Day, Year | WeekDay- Month Day, Year [Guru]
  280. KEY WORDS: KeyWords
  281. EOF
  282.     $CAT $ADD_FILE >>$UPDATE_FILE 2>$NULL
  283.     if [ "$CONFIGURE" != "No" ]; then
  284.       CONFIGURE=Yes
  285.     fi
  286.   fi
  287. : ; }
  288.  
  289. UPDATE ()
  290.  {
  291.   #
  292.   # Function: UPDATE
  293.   #
  294.   if [ "$VERBOSE" ]; then
  295.     $ECHO "$UPROGNAME: Update $UPDATE_FILE"
  296.   fi
  297.   if [ "$UPDATE_FILE" -o "$ADD_FILE" ]; then
  298.     if [ -w "$UPDATE_FILE" ]; then
  299.       $EDITOR $UPDATE_FILE
  300.       $RM -rf $MASTER_LIB/*~
  301.       INSTALL
  302.       NOTIFY
  303.       if [ "$CONFIGURE" != "No" ]; then
  304.         CONFIGURE=Yes
  305.       fi
  306.     else
  307.       $ECHO "$UPROGNAME*ERROR:  File \"$UPDATE_FILE\" does not exist!"
  308.       exit 1
  309.     fi
  310.   fi
  311. : ; }
  312.  
  313. SYNCRONIZE ()
  314.  {
  315.   #
  316.   # Function: SYNCRONIZE
  317.   #
  318.   if [ "$VERBOSE" ]; then
  319.     $ECHO "$UPROGNAME: Syncronizing databases..."
  320.   fi
  321.   if [ "$SYNC" ]; then
  322.     $RM -rf $TEMP_3
  323.     $LS $MASTER_LIB >$TEMP_1
  324.     for MACHINE in $SERVERS
  325.     do
  326.       $LS /usr/$MACHINE/local/lib/sysman >$TEMP_2
  327.       $DIFF $TEMP_1 $TEMP_2 | $EGREP \< | $AWK '{print $2}' >>$TEMP_3
  328.     done
  329.     $SORT -u $TEMP_3 >$TEMP_1
  330.     for FILENAME in `$CAT $TEMP_1`
  331.     do
  332.       UPDATE_FILE=$MASTER_LIB/$FILENAME
  333.       INSTALL
  334.     done
  335.     exit 0
  336.   fi
  337. : ; }
  338.  
  339. MAKE_DATA ()
  340.  {
  341.   #
  342.   # Function: MAKE_DATA
  343.   #
  344.   if [ "$VERBOSE" ]; then
  345.     $ECHO "$UPROGNAME: Checking master database for files."
  346.   fi
  347.   #
  348.   # CONFIGURE the database?
  349.   #
  350.   if [ "$CONFIGURE" = "Yes" ]; then
  351.     if [ "$VERBOSE" ]; then
  352.       $ECHO "$UPROGNAME: Creating new database information--  PLEASE WAIT..."
  353.     fi
  354.     cd $MASTER_LIB
  355.     $RM -rf $MASTER_KEYWORDS
  356.     $RM -rf $MASTER_FILENAMES
  357.     $EGREP "^KEY WORD|^SUBJECT|^TITLE|^INFO" * >$MASTER_FILENAMES
  358.     #
  359.     # I would think it would be possible to speed up this next loop somehow.
  360.     # Old runtime: 15 minutes...
  361.     # New runtime: 32 seconds!!! 
  362.     # 
  363.     $EGREP -h "^KEY WORD" * >$TEMP_1
  364.     $TR -cs A-Za-z '\012' <$TEMP_1 >$TEMP_2
  365.     $SORT -u $TEMP_2 >$MASTER_KEYWORDS
  366.     UPDATE_FILE=$MASTER_KEYWORDS
  367.     FILENAME=`$BASENAME $UPDATE_FILE`
  368.     INSTALL
  369.     UPDATE_FILE=$MASTER_FILENAMES
  370.     FILENAME=`$BASENAME $UPDATE_FILE`
  371.     INSTALL
  372.     exit 0
  373.   else
  374.     if [ "$CONFIGURE" = "No" ]; then
  375.       if [ "$VERBOSE" ]; then
  376.         $ECHO "$UPROGNAME: --conf.  Exiting."
  377.       fi
  378.       exit 0
  379.     fi
  380.   fi
  381. : ; }
  382.  
  383. LIST ()
  384.  { 
  385.   #
  386.   # Function: LIST
  387.   #
  388.   if [ "$VERBOSE" ]; then
  389.     $ECHO "$UPROGNAME: List."
  390.   fi
  391.   $RM -rf $TMP/$UPROGNAME*
  392.   for KEY in $TSKGI
  393.   do
  394.     case $KEY in
  395.       "T") $EGREP "$TITLE"   $FILENAMES >>$TEMP_1 ;;
  396.       "S") $EGREP "$SUBJECT" $FILENAMES >>$TEMP_1 ;;
  397.       "K") $EGREP "$KEYWORD" $FILENAMES >>$TEMP_1 ;;
  398.       "G") $EGREP "$INFO"    $FILENAMES >>$TEMP_1 ;;
  399.       "I") $EGREP "$INFO"    $FILENAMES >>$TEMP_1 ;;
  400.     esac
  401.   done
  402.   MATCH_KEY=`$ECHO $LOCATE | $TR " " "|"`
  403.   if [ "$MATCH_KEY" ]; then
  404.     $EGREP -i $MATCH_KEY $TEMP_1 >$TEMP_2
  405.   else
  406.     $MV $TEMP_1 $TEMP_2
  407.   fi
  408. : ; }
  409.  
  410. CHECK ()
  411.  {
  412.   #
  413.   # Function: CHECK
  414.   #
  415.   if [ "$VERBOSE" ]; then
  416.     $ECHO "$UPROGNAME: Matching: "$LOCATE
  417.   fi
  418.   BOGUS=
  419.   VALID=
  420.   NOT_VALID=
  421.   for WORD in $LOCATE
  422.   do
  423.      if [ ! "`$EGREP -i $WORD $FILENAMES | $COLRM 81 999`" ]; then
  424.        $ECHO "$UPROGNAME*WARNING: Word \""$WORD"\" is not recognized [IGNORED]."
  425.        NOT_VALID="$NOT_VALID$WORD "
  426.      else
  427.        VALID="$VALID$WORD "
  428.     fi
  429.   done
  430. # If the following code is included.... people just run sysman without the
  431. # offending keyword..... lets just make sysman do that automatically.
  432. #  if [ "$NOT_VALID" ]; then
  433. #    exit 1
  434. #  fi
  435. : ; }
  436.  
  437. MATCH ()
  438.  {
  439.   #
  440.   # Function: MATCH
  441.   #
  442.   if [ "$VERBOSE" ]; then
  443.     $ECHO "$UPROGNAME: Checking variables to match a sub string."
  444.   fi
  445.   if [ "$MATCH_WORDS" ]; then
  446.     if [ "$VERBOSE" ]; then
  447.       $ECHO "$UPROGNAME: Matching strings : "$LOCATE
  448.     fi
  449.     for WORD in $LOCATE
  450.     do
  451.       $EGREP -i $WORD $KEYWORDS
  452.     done
  453.     exit 0
  454.   fi
  455. : ; }
  456.  
  457. SEARCH ()
  458.  {
  459.   #
  460.   # Function: SEARCH
  461.   #
  462.   # Without ``NAIVE'' ALL keywords must be matched...
  463.   # With    ``NAIVE'' the keywords are significant from the left...
  464.   if [ "$VERBOSE" ]; then
  465.     $ECHO "$UPROGNAME: Searching the database for matching files."
  466.   fi
  467.   LOCATE="$VALID $NOT_VALID"
  468.   for WORD in $LOCATE
  469.   do
  470.      $EGREP -i $WORD $TEMP_2 >$TEMP_1
  471.     if [ ! "$NAIVE" ]; then
  472.       $MV $TEMP_1 $TEMP_2
  473.     else
  474.       if [ -s "$TEMP_1" ]; then
  475.         $MV $TEMP_1 $TEMP_2
  476.       else
  477.         $ECHO "$UPROGNAME*WARNING: Duh, ignoring \`\`$WORD'' "
  478.       fi
  479.     fi
  480.   done
  481. : ; }
  482.  
  483. VIEW ()
  484.  { 
  485.   #
  486.   # Function: VIEW
  487.   #
  488.   if [ "$VERBOSE" ]; then
  489.     $ECHO "$UPROGNAME: View."
  490.   fi
  491.   $COLRM 79 9999 <$TEMP_2 >$TEMP_1
  492.   if [ "$SHOW" ]; then
  493.     for KEY in $TSKGI
  494.     do
  495.       case $KEY in
  496.         "T") $EGREP "$TITLE"   $TEMP_1 | $SED "s/$TITLE/$CR$TABS/g"   ;;
  497.         "S") $EGREP "$SUBJECT" $TEMP_1 | $SED "s/$SUBJECT/$CR$TABS/g" ;;
  498.         "K") $EGREP "$KEYWORD" $TEMP_1 | $SED "s/$KEYWORD/$CR$TABS/g" ;;
  499.         "G") $EGREP "$INFO"    $TEMP_1 | $SED "s/$INFO/$CR$TABS/g"    ;;
  500.         "I") $EGREP "$INFO"    $TEMP_1 | $SED "s/$INFO/$CR$TABS/g"    ;;
  501.       esac
  502.     done
  503.     exit 0
  504.   fi
  505.   if [ "$VERBOSE" ]; then
  506.     $ECHO "$UPROGNAME: Displaying the list of answer files."
  507.   fi
  508.   if [ -s $TEMP_1 ]; then
  509.     $TR ":" " " <$TEMP_1 | $AWK '{print $1}' | $SORT -u >$TEMP_2
  510.   else
  511.     $ECHO -n "$UPROGNAME*ERROR: No matches for "
  512.     for KEY in $TSKGI
  513.     do
  514.       case $KEY in
  515.           "T") $ECHO -n "[title] "   ;;
  516.           "S") $ECHO -n "[subject] " ;;
  517.           "K") $ECHO -n "[keyword] " ;;
  518.           "G") $ECHO -n "[guru] "    ;;
  519.           "I") $ECHO -n "[info] "    ;;
  520.         esac
  521.       done
  522.     $ECHO ": $LOCATE"
  523.     exit 1
  524.   fi
  525.   if [ "$VERBOSE" -a "$OUTPUT" ]; then
  526.     $ECHO "$UPROGNAME: Saving all answers to: $OUTPUT"
  527.   fi
  528.   cd $LIB
  529.   if [ "$OUTPUT" ]; then
  530.     cd $PWD_DIRECTORY
  531.     while read COPY
  532.     do
  533.       $CAT $LIB/$COPY >>$OUTPUT
  534.       $ECHO "_______________________________________________________________________________" >>$OUTPUT
  535.     done <$TEMP_2
  536.   else
  537.     $PAGER `$CAT $TEMP_2`
  538.   fi
  539. : ; }
  540.  
  541. CLEAN ()
  542.  {
  543.   #
  544.   # Function: CLEAN
  545.   #
  546.   if [ "$VERBOSE" ]; then
  547.     $ECHO "$UPROGNAME: Cleaning up after $UPROGNAME."
  548.   fi
  549.   $RM -rf $TMP/$UPROGNAME*
  550.   cd $PWD_DIRECTORY
  551. : ; } 2>$NULL
  552.  
  553. MAIN ()
  554.  {
  555.   #
  556.   # Function: MAIN
  557.   #
  558.   INITIALIZE_VARIABLES
  559.   ADD
  560.   UPDATE
  561.   MAKE_DATA
  562.   SYNCRONIZE
  563.   LIST
  564.   MANPAGE
  565.   CHECK
  566.   MATCH
  567.   SEARCH
  568.   VIEW
  569.   CLEAN
  570. : ; }
  571.  
  572. #
  573. # This next part of the code sets up the intial hook.
  574. #
  575. WPROGNAME=$0
  576. LPROGNAME=`/bin/basename $0`
  577. UPROGNAME=`/bin/basename $LPROGNAME | /bin/tr "[a-z]" "[A-Z]"`
  578. VARS="$@ $UPROGNAME"
  579. MAIN
  580. SHAR_EOF
  581. #    End of shell archive
  582. exit 0
  583. --
  584.  
  585.  -----------------------------------------------------------------------------
  586.  Scott D. Yelich                                 scott@cs.odu.edu [128.82.8.1]
  587.  After he pushed me off the cliff, he asked me, as I fell, ``Why'd you jump?''
  588.  Administrator of:    Game design requests to <game-design-request@cs.odu.edu>
  589.  -----------------------------------------------------------------------------
  590.