#!/bin/sh
REVON="[7m"
REVOFF="[27m"
CLEAR="c"
BEEPTONE=''
INSMOD=/sbin/insmod
RMMOD=/sbin/rmmod
LSMOD=/sbin/lsmod
FTAPE=/boot/ftape/ftape.o
TAPE=/dev/ftape

panic()
{
	echo
	echo "Unterbrechen ist keine gute Idee !"
	echo "Das kann zu einem inkonsistenten Zustand fhren !"
	echo "Spule Tape zurck und deinstalliere modul ftape.o ..."
	echo "Bitte warten Sie..."
	echo 
	mt -f $TAPE rewind
	$RMMOD ftape > /dev/null 2>&1
	echo "ok !"
	echo
	exit
}

banner()
{
	echo
	echo "==================================================="
	echo -n $REVON
	echo -n "         QIC-80  Floppy-Streamer Utility           "
	echo $REVOFF
	echo "==================================================="
	echo
}

# Binaries und Treiber suchen und evtl. auspacken
unpackftape()
{
	for i in $FTAPE $INSMOD $RMMOD $LSMOD ; do
		if [ ! -e $i ]; then
			if [ -e $i.gz ]; then
				echo "Entpacke $i.gz ..."
				gzip -d $i.gz
			else
				echo "Panic! Weder $i noch $i.gz gefunden ! "
				exit
			fi
		fi
	done
}

initftape()
{
	$RMMOD ftape 2> /dev/null 1>/dev/null
	echo
	echo -n $REVON
	echo "Legen Sie ein Band ein."
	echo $REVOFF
	echo "Warten Sie, bis der Streamer aufgehrt hat zu spulen"
	echo
	echo -n "Drcken Sie dann die Eingabetaste"
	read ans
	echo
	echo "Installiere Floppy-Streamer Treibermodul ftape.o ..."
	$INSMOD $FTAPE > /dev/null 2>&1
	echo "Spule Streamer zurueck ..."
	mt -f /dev/ftape rewind
	echo "Der Streamer sollte nun initialisiert sein ... "
}

getfilelist()
{
	FILENAME=
	FILELIST=
	while [ 1 ]; do
		echo
		echo "Eingabe der gewnschten Dateien:"
		echo "---------------------------------"
		echo
		echo "Geben Sie pro Zeile einen Dateinamen oder ein Verzeichnis (Endung  \"/\") an."
		echo "Beenden Sie Ihre Eingabe mit einer leeren Zeile."
		if [ "$action" = "2" ]; then
			echo "es sind leider noch keine Joker erlaubt ;-)"
		elif [ "$action" = "3" ]; then
			echo "Wenn Sie keine Dateinamen/Verzeichnisse angeben, wird der gesamte Bandinhalt"
			echo "restauriert."
			echo "Wenn Sie \"#\" angeben, werden Sie nach dem Dateinamen einer Extractliste"
			echo "gefragt."
		fi
		read FILENAME
		if [ "$FILENAME" = "" ]; then
			break
		elif [ "$FILENAME" = "#" ]; then
			FILENAME=
			while [ 1 ]; do
				echo 
				echo "Bitte geben Sie den Namen der Datei an, die die Extractliste enthlt oder"
				echo "nur die Eingabetaste, falls Sie doch keine Extractliste verwenden wollen."
				echo -n "EXTRACTLIST: "
				read ans
				if [ "$ans" = "" ]; then
					echo
					echo "keine Extractliste gewhlt !"
					FILELIST=
					break
				elif [ ! -f $ans ]; then
					echo
					echo "Extractliste nicht gefunden !"
					continue
				else
					export EXTRACTLIST=$ans
					FILELIST=`cat $EXTRACTLIST`
					break
				fi
			done
			FILELIST="$FILELIST $FILENAME"
		fi
	done
	echo "Selektierte Dateien:"
	if [ "$FILELIST" = "" ]; then
		echo "Alle Dateien"
	else
		echo $FILELIST
	fi
}
	

#
# Main
#

trap panic 1 2 5 9 15

echo $CLEAR
unpackftape
initftape

#
# parse options
#
while [ 1 ]; do
	if [ $# = 0 ]; then
		break
	elif [ $# -gt 0 -a "$1" = "-expert" ]; then
		EXPERT=true
		shift 1 
		continue;
	elif [ $# -gt 1 -a "$1" = "-tape" ]; then
		TAPE=$2
		shift 2
		continue;
	elif [ $# -gt 0 -a "$1" = "-init" ]; then
		# alles Ntige fr init getan
		return
	elif [ $# -gt 0 -a "$1" = "-list" ]; then
		tar tvf $TAPE
		return
	fi
done

if [ "$TAPE" = "/dev/ftape" -a "$EXPERT" = "true" ]; then
	mt -f $TAPE fsr 7
else
	mt -f $TAPE fsr 0
fi	

while [ 1 ]; do
	banner
	echo " 1 - Inhalt vom Band anzeigen"
	echo " 2 - Daten auf Band sichern"
	echo " 3 - Daten vom Band restaurieren"
	echo " 4 - Banddaten vergleichen"
	echo " 5 - Band zurckspulen"
	echo " 6 - Band lschen"
	if [ "$TAPE" = "/dev/ftape" ]; then
	echo " 7 - Streamer initialisieren"
	echo " 8 - Debugging Meldungen ein-/ausschalten"
	fi	
	echo
	echo " 0 - Streamer Utility verlassen"
	echo
	if [ "$TAPE" = "/dev/ftape" ]; then
		echo -n "Whlen Sie (1/2/3/4/5/6/7/8/0) : "
	else
		echo -n "Whlen Sie (1/2/3/4/5/6/7/0) : "
	fi	
	read action
	case $action in
	0)
		exit 0;;
	1)
		echo $CLEAR
		banner
		echo "Inhalt vom Band :"
		echo "-----------------"
		tar tvf $TAPE;;
	2)
		getfilelist
		tar cvf $TAPE `echo $FILELIST`;;
	3)
		getfilelist
		tar xvf $TAPE `echo $FILELIST`;;
	4)
		tar dvf $TAPE;;
	5)
		mt -f $TAPE rewind;;
	6)
		echo -n "Sind Sie sicher, dass Sie das Band lschen wollen ? (j/n) : "
		read ans
		if [ "$ans" = "j" ]; then
			mt -f $TAPE erase
		fi;;
	7)
		initftape;;
	8)
		while [ 1 ]; do
			echo
			echo "Geben Sie den Debuglevel an (0=aus, 7=max)"
			echo -n "Debuglevel : "
			read level
			if [ $level -gt 7 -o 0 -gt $level ]; then
				echo "ungltiger Debuglevel !"
				continue
			else
				mt -f $TAPE fsr $level
				break
			fi
		done;;	
	*)
		echo "ungltige Angabe !";;
	esac
done

