##########################################################################
# Shellscript:	diskd - disk daemon - copy files from spool dir to floppy
# Author     :	Heiner Steven (heiner.steven@odn.de)
# Date       :	1994-03-18
# SCCS-Id. :	@(#) diskd	1.2 04/02/18
##########################################################################
# Description
#
##########################################################################

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

: ${DISKSPOOL:=$HOME/disk}		# spool directory
: ${FLOPPYDIR:=/floppy/backup}

Console=/dev/console			# output device
n=10					# max. Anzahl Zugriffsfehler
Intervall=120		# Intervall, in dem auf neue Dateien geprueft wird

Hilfetext () {
    echo "$PN - Spoolverzeichnis auf Diskette kopieren, Version $VER (stv '94)"
    echo "Aufruf: $PN [-d Spoolverzeichnis] [-i Intervall] [-m Maxversuche]"
    echo "    -d:   Spoolverzeichnis (Vorgabe: $DISKSPOOL)"
    echo "    -i:   Intervall, in dem auf neue Dateien geprueft wird (Vorgabe: $Intervall)"
    echo "    -m:   Max. Anzahl Zugriffsfehler auf Diskette vor Abbruch (Vorgabe: $n)"
    exit 1
}

Msg () {
    for i
    do echo "$PN: $i" > $Console
    done
}

Abbruch () {
    Msg "$@"
    exit 1
}

# signal handler

cleanup () {
    trap '' 1 2 3 15		# do not let other signals interrupt us

    eject floppy
    echo "$PN: terminated (`date`)" > "$Console"
    trap 1 2 3 15
}

set -- `getopt 'hi:m:d:' "$@" || Hilfetext`
while [ $# -gt 0 ]
do
    case "$1" in
    	-i)	Intervall="$2"; shift ;;
	-m)	n="$2"; shift ;;
	-d)	DISKSPOOL="$2"; shift ;;
    	--)	break ;;
	-h)	Hilfetext ;;
	-*)	Hilfetext ;;
    esac
    shift
done
shift				# abschliessendes '--' von getopt

[ -d $DISKSPOOL -a -x "$DISKSPOOL" -a -w "$DISKSPOOL" ] ||
    Abbruch "Ungueltiges Spoolverzeichnis (DISKSPOOL=$DISKSPOOL)" \
    	"(Verzeichnis vorhanden? Schreib- und Ausfuehrungsrechte?)"

cd $DISKSPOOL


[ -d "$FLOPPYDIR" ] || volcheck
[ -d "$FLOPPYDIR" ] || Fatal "cannot access $FLOPPYDIR"

Msg "started, PID=$$ (`date`)"

trap 'cleanup' 0
trap "exit 2" 1 2 3 15

k=0
while :
do
    sleep $Intervall
    Files=`ls`
    [ -z "$Files" ] && continue
    for i in `ls`
    do
    	Error=`cp "$i" "$FLOPPYDIR" 2>&1` || {
	    k=`expr $k + 1`
	    if [ $k -le $n ]
	    then
		Msg "Error: $Error" "($k. of $n tries)"
	    else
	    	Abbruch "aborting."
	    fi
	    break
	}
	rm -f $i 2>/dev/null
	k=0
    done
done
