#!/bin/sh ###################################################################### # phlogmap - Generate gopher log (phlog) gophermap # Created 2010-08-28 by David Meyeri . ###################################################################### # Identification ##################################################### PROGRAM='phlogmap' VERSION=0.0 COPYRIGHT='Copyright (C) 2010 David Meyer' DESCRIPTION='Generate gopher log (phlog) gophermap.' USAGE="Usage: $0 [-fhV] [-o OUTFIILE] [-F FOOTER] [-H HEADER] [-n NUM] [-s SEL] [DIR]" CONTACT='David Meyer ' # Initialize environment ############################################# IFS=" " PATH=/bin:/usr/bin FORTUNE_PGM=/usr/pkg/games/fortune # Arguments ########################################################## while getopts VfhF:H:o:n:s: option do case $option in f ) ADD_FORTUNE=1 ;; n ) NUM=$OPTARG ;; s ) SEL=$OPTARG ;; o ) OUTFILE=$OPTARG ;; F ) FOOTERF=$OPTARG ;; H ) HEADERF=$OPTARG ;; V ) echo "$PROGRAM $VERSION" echo $COPYRIGHT exit 0 ;; h ) cat << ENDHELP $USAGE $DESCRIPTION DIR [=/ftp/pub/users/$USER] is phlog root directory. Options: -o OUTFILE Output gophermap to file OUTFILE [=DIR/gphermap]. -F FOOTER Insert contents of file FOOTER [=DIR/.phlogfoot] in gophermap after phlog article list. -H HEADER Insert contents of file HEADER [=DIR/.phloghead] at top of gophermap. -f Append fortune at bottom of gophermap (after footer). -n NUM Display links and summaries of NUM most recently added or changed files. -s SEL Gopher selector SEL [=/users/$USER/] corresponding to -V Display version number -h Display this help message Report bugs to $CONTACT. ENDHELP exit 0 ;; * ) echo $USAGE >&2 exit 1 ;; esac done shift $(( $OPTIND-1 )) DIR=${1:-/ftp/pub/users/$USER} : ${NUM:=5} : ${SEL:=/users/$USER/} : ${OUTFILE:=$DIR/gophermap} : ${FOOTERF:=$DIR/.phlogfoot} : ${HEADERF:=$DIR/.phloghead} # Functions ########################################################## ftitle() { bn=$(basename $1) case $bn in *.txt | *.org ) title=$(head -n 1 $1) ;; *.html | *.htm ) title=$(grep -i "\" $1 | sed -e "s;;;g") ;; * ) title=$bn ;; esac echo $title } # Main driver ######################################################## echo "Generating phlog map for $DIR ..." owd=$PWD cd $DIR if [ -f $OUTFILE ]; then cp OUTFILE OUTFILE~ fi if [ -f $HEADF ]; then cat $HEADF fi # 20100830 jdm BusyBox find (on Zaurus) doesn't support ! (NOT) expression, so use grep -v to filter out gophermap files for portability. #ls -lt $(find . -type f -name "[^\.]*" -name "*[^~]" \! -name gophermap) | head -n $NUM |\ show_files=$(find . -type f -name "[^\.]*" -name "*[^~]" | grep -v "^gophermap$") ls -lt $show_files | head -n $NUM |\ while read p lc o g s dt1 dt2 dt3 fn; do ft=$(ftitle $fn) loc=$(basename $(dirname $fn)) echo "0$dt1 $dt2 $dt3 $ft [$loc] $SEL${fn#*/}" done if [ -f $FOOTF ]; then cat $FOOTF fi if [ -n "$ADD_FORTUNE" -a -x $FORTUNE_PGM ]; then echo "" echo "FORTUNE" $FORTUNE_PGM fi echo "Phlog map written to $OUTFILE" cd $owd exit 0