#!/bin/sh

# Simple RfC viewer tool
# (c)2003,2004,2005 Sascha Wilde <wilde@sha-bang.de>
# This program is free software under the GNU GPL (>=v2)
# $Id: rfc,v 1.6 2005/01/10 10:03:13 wilde Exp $

VERSION="0"
REVISION=`echo '$Revision: 1.6 $'|tr -cd 0-9.`
MYNAME="`basename $0`"
CACHE=$HOME/doc/RFCs
FETCHURI="ftp://ftp.rfc-editor.org/in-notes/"
PAGER="less"

function usage() {
    cat <<EOF
Usage:           $MYNAME [OPTION] [RFC-NUMBER|PATTERN]
To view RfC:     $MYNAME RFC-NUMBER
To search cache: $MYNAME --search PATTERN
Try \`$MYNAME --help' for more information
EOF
    exit 1
}

function help() {
    cat <<EOF
Usage: $MYNAME [OPTION] [RFC-NUMBER|PATTERN]

View and cache RfCs.  If the RfC is available in the local cache show
the cashed version, otherwise try to retriev it.

  -n, --number  like no option, view RfC RFC-NUMBER
  -s, --search  search cache for PATTERN
      --help    display this help text and exit
  -V, --version display version and exit
EOF
}

function version() {
    cat <<EOF
rfc $VERSION.$REVISION

Copyright (C) 2003,2004,2005 Sascha Wilde
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
EOF
}

function showrfc() {
    FILE="rfc${1}.txt"	
    if [[ -f $CACHE/$FILE ]]
	then
	$PAGER $CACHE/$FILE
    else
	cd $CACHE
	echo "retrieving $FILE..."
	if curl -s $FETCHURI$FILE -o $FILE
	    then
	    $PAGER $FILE
	else
	    echo "can't get $FILE"
	fi	
    fi
}

if [[ -d $CACHE ]]
    then
    case $# in
	1) 
	    case $1 in
		"--help")
		    help
		    ;;
		"-V"|"--version")
		    version
		    ;;
		*)
		    showrfc $1
		    ;;
	    esac
	    ;;
	2)
	    case $1 in
		"-s"|"--search")
		    echo "Searching for \"$2\" in cache:" 
		    grep -ci "$2" $CACHE/rfc*.txt | \
			sed 's/.*rfc\([0-9]\+\).*:\([0-9]\+\)/\2 matching lines in RfC \1/' | \
			grep -v '^0 ' | sort -n | tail -5
		    ;;
		"-n"|"--number")
		    showrfc $2
		    ;;
		*)
		    usage
		    ;;
	    esac
	    ;;
	*)
	    usage
	    ;;
    esac
else
    echo "Cache dir $CACHE is missing!" > /dev/stderr
    exit 1
fi
