#!/bin/sh ##################################################################### # tirph - Generate TIR gophermap from file system # Created 2010-09-02 by David Meyer +JMJ ##################################################################### # Identification #################################################### PROGRAM='tirph' VERSION=0.0 COPYRIGHT='Copyright (C) 2010 David Meyer' DESCRIPTION='Generate TIR gophermap from file system' USAGE="Usage: $PROGRAM [-CPVh] [-n NUM] [-o OUTFILE] [-p PHLOGDIR] [DIR]" CONTACT='David Meyer ' # Initialize environment ############################################ IFS=" " unset PATH BASENAME=/usr/bin/basename CAT=/bin/cat CHMOD=/bin/chmod DIRNAME=/usr/bin/dirname ECHO=/bin/echo FIND=/usr/bin/find FORTUNE=/usr/games/fortune GREP=/usr/bin/grep HEAD=/usr/bin/head LS=/bin/ls MV=/bin/mv SED=/usr/bin/sed TOUCH=/usr/bin/touch SERVER=sdf.org PORT=70 NEXUSSEL=/users/$USER NEXUSPATH=/ftp/pub/users/$USER #NEXUSPATH=/home/zaurus/cave/green # Arguments ######################################################### while getopts CPn:o:p:Vh option; do case $option in C ) NOCONTENTS=1 ;; P ) NOPHLOG=1 ;; n ) NUM=$OPTARG ;; o ) OUTFN=$OPTARG ;; p ) PHLOGDIR=$OPTARG ;; V ) $ECHO "$PROGRAM $VERSION" $ECHO $COPYRIGHT exit 0 ;; h ) $CAT << ENDHELP $USAGE $DESCRIPTION. DIR ... Options are as follows: -p PHLOGDIR -n NUM -o OUTFN -C Suppress output of directory contents section. -P Suppress output of phlog section. -V Display version number -h Display this help message Files: DIR/.title DIR/.descripton DIR/.gophhead DIR/.gophfoot DIR/.exits Report bugs to $CONTACT. ENDHELP exit 0 ;; * ) $ECHO $USAGE >&2 exit 1 ;; esac done shift $(( $OPTIND-1 )) DIR=${1:-""} : ${NUM:=10} : ${OUTFN:=gophermap} : ${PHLOGDIR:=""} # Functions ######################################################### # ftitle() - Return title for file or subdirectory ftitle() { bn=$($BASENAME $1) if [ -d $1 ]; then if [ -f $1/.title ]; then ftitle=$($CAT $1/.title) else ftitle=$bn fi else fn=${bn%.*} fext=${bn##*.} case $fext in txt | org ) ftitle=$($HEAD -n 1 $1) ;; html | htm | shtml ) ftitle=$($GREP -i "\" $1 | $HEAD -n 1 | $SED -e "s;;;g") : ${ftitle:=$fn} ;; * ) ftitle=$bn ;; esac fi $ECHO $ftitle } # gtype() - Return Gopher item type gtype() { if [ -d $1 ]; then gtype=1 else fext=${1##*.} case $fext in txt | org ) gtype=0 ;; html | htm | shtml ) gtype=h ;; jpg | jpeg | png ) gtype=I ;; gif ) gtype=g ;; * ) gtype=0 ;; esac fi $ECHO $gtype } # Main driver ####################################################### if [ "$DIR" ]; then DIRPATH=$NEXUSPATH/$DIR DIRSEL=$NEXUSSEL/$DIR else DIRPATH=$NEXUSPATH DIRSEL=$NEXUSSEL fi OUTFILE=$DIRPATH/$OUTFN # Backup output file ... if [ -f $OUTFILE ]; then $MV $OUTFILE $OUTFILE~ $TOUCH $OUTFILE $CHMOD 750 $OUTFILE fi # Directory title ... if [ -f $DIRPATH/.title ]; then $CAT $DIRPATH/.title >>$OUTFILE $ECHO "" >>$OUTFILE fi # Directory description ... if [ -f $DIRPATH/.description ]; then $CAT $DIRPATH/.description >>$OUTFILE $ECHO "" >>$OUTFILE fi # Link to nexus directory (top) ... if [ "$DIR" ]; then $ECHO "1(to nexus) $NEXUSSEL $SERVER $PORT" >>$OUTFILE $ECHO "" >>$OUTFILE fi # Gopher-specific header ... if [ -f $DIRPATH/.gophhead ]; then $CAT $DIRPATH/.gophhead >>$OUTFILE fi # Phlog ... if [ -z "$NOPHLOG" ]; then if [ "$PHLOGDIR" ]; then PHLOGPATH=$NEXUSPATH/$PHLOGDIR PHLOGSEL=$NEXUSSEL/$PHLOGDIR else PHLOGPATH=$NEXUSPATH PHLOGSEL=$NEXUSSEL fi $LS -lt $($FIND $PHLOGPATH -type f -name "[^\.]*") | $GREP -Ev "~$|#.*#$|gophermap$" | $HEAD -n $NUM | while read perm lc own gr sz t1 t2 t3 fn; do if [ -z "$phloginit" ]; then $ECHO "" >>$OUTFILE $ECHO "RECENT ACTIVITY:" >>$OUTFILE phloginit=1 fi ft=$(ftitle $fn) loc=$($BASENAME $($DIRNAME $fn)) $ECHO "0$t1 $t2 $t3 $ft [$loc] $PHLOGSEL${fn#*/}" >>$OUTFILE done fi # Directory contents ... if [ -z "$NOCONTENTS" ]; then $LS $DIRPATH | $GREP -Ev "~$|^#.*#$|^gophermap$" | while read fn; do if [ -z "$continit" ]; then $ECHO "" >>$OUTFILE $ECHO "YOU SEE HERE:" >>$OUTFILE continit=1 fi type=$(gtype $DIRPATH/$fn) title=$(ftitle $DIRPATH/$fn) $ECHO "$type$title $DIRSEL/$fn $SERVER $PORT" >>$OUTFILE done fi # Exits ... if [ -f $DIRPATH/.exits ]; then $CAT $DIRPATH/.exits | while read exit tag; do if [ -z "$exitinit" ]; then $ECHO "" >>$OUTFILE $ECHO "OBVIOUS EXITS:" >>$OUTFILE exitinit=1 fi if [ "$exit" ]; then title=$(ftitle $NEXUSPATH/$exit) if [ "$tag" ]; then title="($tag) "$title fi $ECHO "1$title $NEXUSSEL/$exit $SERVER $PORT" >>$OUTFILE fi done fi # Gopher-specific footer ... if [ -f $DIRPATH/.gophfoot ]; then $ECHO "" >>$OUTFILE $CAT $DIRPATH/.gophfoot >>$OUTFILE fi # Link to nexus directory (bottom) ... if [ "$DIR" ]; then $ECHO "" >>$OUTFILE $ECHO "1(to nexus) $NEXUSSEL $SERVER $PORT" >>$OUTFILE fi # Fortune cookie ... if [ -x $FORTUNE ]; then $ECHO "" >>$OUTFILE $FORTUNE >>$OUTFILE fi exit 0