[alt.sources] finding the news articles from message ids

webber@aramis.rutgers.edu.UUCP (09/16/87)

The universal language for referring to messages in news is by their
message ids, which appear on Reference and Message-ID lines of the
news headers.  However, it is sometimes a nuissance to track down
a news message when all you know is its header.  Below, I describe
a simple way to do this.  Enjoy.

--------- BOB (webber@aramis.rutgers.edu ; rutgers!aramis.rutgers.edu!webber)


#!/bin/sh
# This is a usage of the Bourne Shell language to describe an algorithm.
# It is not a program.  However, on some computers it is very easy to
# turn it into a program if you really wanted to.  Before doing so,
# realize that you really don't know where this file has been or what
# devious things have been put into it.  You really want to read it 
# through yourself (and probably change a few things to make it work
# better on your machine anyway).

# The following shell variable initializations allow me to look at messages
# whose message id contains the structure of $1 (on a Sun III), for 
# example when looking up an article that another article referred to.
# The notation for $1 is greppease, which can describe quite a few different
# kinds of things.

MainNews=/usr/spool/news           # The directory where all the news is kept

HistoryFile=/usr/lib/news/history  # The directory where the news system 
                                   # keeps track of which message ids went
                                   # where

Work=$HOME/.FindParent             # A seemingly harmless name for scratchspace
Temp=$HOME/.FindParentTemp         # A different name with the same property

if [ $# = 0 ]
  then
    echo Usage: \$\1 must be a valid arguement to grep
    exit
  else
    echo Will be searching for $1
fi

rm -i $Temp $Work 

grep $1 $HistoryFile | awk  \{print\ \$\4\ \} >$Temp
# WARNING: The C version of news will have group info in a different column,
#          but currently the newsgroup/number is in the 4th column of the
#          entry in $HistoryFile that was matched.

# Translates a newsgroup name into a file name relative to $MainNews
tr . / <$Temp >$Work

if [ ! -s $Work ]
  then
    echo No entry in $HistoryFile containing $1 found.
    exit
fi

while [ -s $Work ]
  do

#   Shuffle through the lines of $Work in case of multiple matches
    LoopIndex=`head -1 $Work`
    tail +2 $Work >$Temp
    mv $Temp $Work

#   The user interface, such as it is :-)
    echo -n  Want to try $LoopIndex \(y/n/q\):
    read Answer
    if [ $Answer = "y" ] 
      then
        more $MainNews/$LoopIndex
    elif [ $Answer = "q" ] 
      then
        exit 
    fi
done

exit

# That's all there is to it.