#!/bin/sh

CONFDIR=/etc/ax25/fbb
DATADIR=/var/ax25/fbb
FBBDIR=/var/ax25/fbb
FBB=/usr/sbin/xfbbd
MAILIN=$FBBDIR/mail.in

maintenance()
{
	echo "Running maintenance"
	sleep 2
	epurmess
	epurwp 40 90
	7plus
}

rerun()
{
	echo "Re-running FBB"
	sleep 2
}

end_session()
{
	echo "Session of FBB is ended"
	exit 0;
}

error_return()
{
	echo "Unknown return value $1"
	sleep 10
}

#
# The following part should not be changed
#

check_dir()
{
	if [ ! -d $1 ] ; then
		echo
		echo "Error : directory $1 does not exist."
		echo "FBB software was not correctly installed or configured"
		echo "Giving up !"
		exit 1;
	fi
}

fbb_tree()
{
	echo -n "Checking fbb tree."

	check_dir $CONFDIR
	check_dir $CONFDIR/lang
	echo -n "."

	check_dir $DATADIR
	check_dir $DATADIR/mail
	for n in 0 1 2 3 4 5 6 7 8 9 ; do
		check_dir $DATADIR/mail/mail$n
	done
	echo -n "."

	check_dir $DATADIR/binmail
	for n in 0 1 2 3 4 5 6 7 8 9 ; do
		check_dir $DATADIR/binmail/mail$n
	done
	echo -n "."

	check_dir $DATADIR/docs
	check_dir $DATADIR/sat
	check_dir $DATADIR/wp
	
	echo " Ok"
}

fbb_conf()
{
	echo "Checking fbb configuration :"
	if [ -x $FBB ] ; then
		cd $FBBDIR
		$FBB -i
		if [ $? -ne 2 ] ; then
			echo "Configuration error ! Giving up."
			exit 1
		fi
	else
		echo "Program $FBB is not found or not executable ! Giving up."
		exit 1
	fi
}

fbb_loop()
{
	PATH=$PATH:/usr/local/fbb/bin
	export PATH

	while true ; do

		cd $FBBDIR

		$FBB $FBB_PARAM

		ret=$?
		echo
		case $ret in
		1) end_session ;;
		2) rerun;;
		3) maintenance;;
		*) error_return $ret;;
		esac

	done
}

fbb_run()
{
	echo
	echo -n "FBB options :"
	if [ -n "$FBB_PARAM" ] ; then
		echo "$FBB_PARAM"
	else
		echo " (none)"
	fi
	
	if [ $FBB_FG -eq 1 ] ; then
		echo "Running XFBB in foreground mode ^C to abort"
		sleep 5
		echo "Starting XFBB (pwd = `pwd`)..."
		fbb_loop > $FBB_LOG 2>&1
	else
		echo "Running XFBB in background mode ^C to abort"
		sleep 5
		FBB_BACKGROUND=1
		export FBB_BACKGROUND
		echo "Starting XFBB (pwd = `pwd`)..."
		(cd $LOCALDIR ; $MY_SHELL $FBB_PARAM > $FBB_LOG 2>&1 & )
		exit 0
	fi
}

fbb_help()
{
	echo "format : xfbbd [-d] [-h] [-l log_file]"
	echo "-f : run fbb in foreground"
	echo "-l : log debug info to log_file"
	echo "-h : this help information"
	
	exit 0
}

fbb_opt()
{
	MY_SHELL=$0
	FBB_LOG=/dev/null
	FBB_FG=0
	RUN_BG=0
	
	while [ $# -gt 0 ]; do
		case "$1" in
		-h)
			fbb_help
			;;
		-f) 
			FBB_FG=1 
			;;
		-l) 
			FBB_LOG=$2
			shift
			;;
		*)
			FBB_PARAM="$FBB_PARAM $1"
			;;
		esac
		shift
	done

	if [ -n "$FBB_BACKGROUND" ] ; then
		fbb_loop
		exit 0
	fi
}

LOCALDIR=`pwd`

fbb_opt $*
fbb_tree
fbb_conf
fbb_run

exit 0
