:
##########################################################################
# Title      :	watch - watch the directory listing of a file
# Author     :	Heiner Steven <heiner.steven@odn.de>
# Date       :	1995-11-04
# Category   :	File Utilities
# Requires   :	
# SCCS-Id.   :	@(#) watch	2.2 06/01/04
##########################################################################
# Description
#
##########################################################################

PN=`basename "$0"`			# Program name
VER='2.2'

DEFAULT_TIME=300			# Max. time to wait (seconds)
DEFAULT_INTERVAL=2			# Seconds to wait between "ls"

usage () {
    echo >&2 "$PN - watch a directory entry, $VER
usage: $PN [-s] [-t maxtime] [-i interval] {file|directory} [...]
    -s:  silent, no output
    -t:  maximum time (in seconds) to wait for a change (0=wait forever;
         default: $DEFAULT_TIME)
    -i:  check interval (in seconds, default: $DEFAULT_INTERVAL)"
    exit 1
}

msg () {
    echo >&2 "$PN:" "$@"
}

fatal () { msg "$@"; exit 1; }

##########################################################################
# isinteger - return TRUE (0) if the string is a valid integer
##########################################################################

isinteger () {
    case "$1" in
    	*[!0-9]*)	return 1;;
    esac
    return 0
}

##########################################################################
# echon - "echo" without trailing newline character
##########################################################################

echon () {
    if [ X"$ECHON" = X ]
    then
        ECHON=echo
	# Determine how to "echo" without newline: "echo -n" or "echo ...\c"
	if [ X`echo -n` = X-n ]
	then E_N=; NNL="\c"
	else E_N=-n; NNL=
	fi
    fi
    $ECHON $E_N "$*$NNL"
}

#set -- `getopt 'hi:st:' "$@"` || usage

Silent=false
while [ $# -gt 0 ]
do
    case "$1" in
	-s)	Silent=true;;
	-t)
	    WaitPeriod=$2; shift
		isinteger "$WaitPeriod" ||
		    fatal "invalid number of seconds: $WaitPeriod"
	    ;;
	-i)
	    WaitInterval=$2; shift
	    isinteger "$WaitInterval" ||
	    	fatal "invalid number of seconds: $WaitInterval"
	    ;;
	--)	shift; break;;
	-h)	usage;;
	-*)	usage;;
	*)	break;;			# First file name
    esac
    shift
done

[ $# -lt 1 ] && usage

waitperiod=${WaitPeriod:-$DEFAULT_TIME}
waitinterval=${WaitInterval:=$DEFAULT_INTERVAL}

[ "$waitinterval" -gt "$waitperiod" ] && waitinterval=$waitperiod

timeleft=$waitperiod
while [ "$timeleft" -ge 0 ]
do
    line=`eval ls -ldgt "$@" 2>&1`
    if [ X"$line" != X"$lastline" ]
    then				# File has changed
	[ "$Silent" = false ] && echo '|' "$line"
	lastline=$line
	timeleft=$waitperiod		# Reset timer
    fi

    if [ "$waitperiod" -gt 0 ]
    then
	[ "$Silent" = false ] && echon >&2 "$timeleft       "
	timeleft=`expr "$timeleft" - "$waitinterval"`
    fi

    sleep "$waitinterval"
done

exit 0
