#!/bin/sh

CONFDIR=/etc/ax25/fbb
DATADIR=/var/ax25/fbb
VERSION=7.01

declare -a PORT_NAME NB_CH PORT_FREQ

fbb_tree()
{
	echo
	echo "creating configuration tree ..."
	echo "  $CONFDIR"
	echo "  $CONFDIR/lang"
	mkdir -p $CONFDIR/lang

	echo "creating pg directory ..."
	echo "  /usr/local/pg"
	mkdir -p /usr/local/pg

	echo "creating fbbdos directory ..."
	echo "  /home/fbbdos"
	echo "  /home/fbbdos/yapp"
	mkdir -p /home/fbbdos/yapp

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

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

	echo "  $DATADIR/docs"
	mkdir -p $DATADIR/docs
	echo "  $DATADIR/sat"
	mkdir -p $DATADIR/sat
	echo "  $DATADIR/wp"
	mkdir -p $DATADIR/wp
	
	echo "Done"
}

make_fbb_conf()
{

	echo "#"
	echo "# FBB Set-up file"
	echo "#"
	echo "version = FBB$VERSION"
	echo "# Callsign of BBS"
	echo "callsign = $CALL.$ROUTE"
	echo "# SSID of BBS"
	echo "ssid = $SSID"
	echo "# Qra Locator of BBS"
	echo "qraloc = $QRALOC"
	echo "# Qth of BBS"
	echo "city = $CITY"
	echo "# First name of SYSOP"
	echo "name = $SYSOP_NAME"
	echo "# Callsign of SYSOP"
	echo "sysop = $SYSOP_CALL"
	echo "# Test mode"
	echo "test = NO"
	echo "#"
	echo "# End of fbb.conf file"
	echo "#"
}

get_fbb_conf()
{
	while true ; do
		echo
		echo -n "Callsign of the BBS without ssid   (Ex: F6FBB)        : "
		read CALL
		echo -n "SSID of the BBS                    (Ex : 1)           : "
		read SSID
		echo -n "Hierarchical address               (Ex : FMLR.FRA.EU) : "
		read ROUTE
		echo -n "QRA-Locator of the BBS             (Ex : JN03QL)      : "
		read QRALOC
		echo -n "City of the BBS                    (Ex : Toulouse)    : "
		read CITY
		echo -n "Name of the SysOp                  (Ex : Jean-Paul)   : "
		read SYSOP_NAME
		echo -n "Callsign of the SysOp without SSID (Ex : F6FBB)       : "
		read SYSOP_CALL

		echo
		echo "BBS     : $CALL.$ROUTE"
		echo "SSID    : $SSID"
		echo "LOCATOR : $QRALOC ($CITY)"
		echo "SYSOP   : $SYSOP_CALL ($SYSOP_NAME)"
		while true ; do
			echo
			echo -n "Correct (Y/N) ? "
			read REP

			if [ "$REP" = "Y" -o "$REP" = "y" ] ; then
				break 2
			elif [ "$REP" = "N" -o "$REP" = "n" ] ; then
		    	break 1
			fi
		done
	done
	
	# Create fbb.conf file
	make_fbb_conf > /etc/ax25/fbb.conf
}

make_port_fbb()
{
	NB=1

	echo "# FBB$VERSION"
	echo "#"
	echo "#Ports TNCs"
	echo " 1     $[ $NUMPORT - 1 ]"
	echo "#"
	echo "#Com Interface Adress (Hex) Baud"
	echo " 1   9         0            9600"
	echo "#"
	echo "#TNC NbCh Com MultCh Pacln Maxfr NbFwd MxBloc M/P-Fwd Mode  Freq"
	echo " 0   0    0   0      0     0     0     0      00/01   ----  File-fwd."
	while [ $NB -lt $NUMPORT ] ; do
		printf " %-2s  %-2s   1   %-6s 250   2     1     10     00/15   XUWYL %s\n"\
			$NB ${NB_CH[$NB]} ${PORT_NAME[$NB]} ${PORT_FREQ[$NB]}
		NB=$[ $NB + 1 ]
	done
	echo "#"
	echo "# End of file."
	echo "#"
}

get_fbb_port()
{
	NUMPORT=1
	
	while true ; do
		while true ; do
			echo
			echo -n "Name of the port as named in axport (<CR> to end) : "
			read REP
			if [ -z "$REP" ] ; then
				break;
			fi
			PORT_NAME[$NUMPORT]=$REP
			echo -n "Number of channels                                : "
			read REP
			NB_CH[$NUMPORT]=$REP
			echo -n "Frequency                                         : "
			read REP
			PORT_FREQ[$NUMPORT]=$REP
			NUMPORT=$[ $NUMPORT + 1 ]
		done

		NB=1

		echo
		while [ $NB -lt $NUMPORT ] ; do
			echo "Port $NB on axport ${PORT_NAME[$NB]} (${NB_CH[$NB]} channels) Freq=${PORT_FREQ[$NB]}"
			NB=$[ $NB + 1 ]
		done
		
		while true ; do
			echo
			echo -n "Correct (Y/N) ? "
			read REP

			if [ "$REP" = "Y" -o "$REP" = "y" ] ; then
				break 2
			elif [ "$REP" = "N" -o "$REP" = "n" ] ; then
		    	break 1
			fi
		done
	done
	
	# Create port.sys file
	echo "Creating port.sys ... Ok"
	make_port_fbb > $CONFDIR/port.sys
	
	# Create beaconN.sys files
	NB=1
	while [ $NB -lt $NUMPORT ] ; do
		echo "Creating beacon$NB.sys ... Ok"
		FILE=$CONFDIR/beacon$NB.sys
		echo "% 15"   > $FILE
		echo "! MAIL" >> $FILE
		echo "\$d \$Tz Mailbox \$O-\$o (LINUX version)" >> $FILE
		NB=$[ $NB + 1 ]
	done
}

copy_files()
{
	if [ -d $SRC ] ; then
		echo
		echo "Copying binary files"
		echo -n "  Copying fbb ... "
		cp fbb /usr/sbin
		if [ $? -eq 0 ] ; then
			echo "OK"
		else
			echo "Error copying fbb. Giving up !"
			echo
			exit 1
		fi
		chmod +x /usr/sbin/fbb
		for FILE in clr_user epurmess epurwp maintinf reqdir xfbbC xfbbd
		do
			echo -n "  Copying $FILE ... "
 			cp $SRC/$FILE /usr/sbin
			if [ $? -eq 0 ] ; then
				echo "OK"
			else
				echo "Error copying src/$FILE. Giving up !"
				echo
				exit 1
			fi
			chmod +x /usr/sbin/$FILE
		done
	fi
	if [ -d $CONF ] ; then
		echo
		echo "Copying configuration files"
		for FILE in \
				bbs.sys cron.sys forward.sys \
				langue.sys passwd.sys protect.sys \
				redist.sys reject.sys swapp.sys themes.sys
		do
			echo -n "  Copying $FILE ... "
	 		cp $CONF/$FILE $CONFDIR
			if [ $? -eq 0 ] ; then
				echo "OK"
			else
				echo "Error !!"
			fi
		done
		for FILE in $CONF/lang/*
		do
			echo -n "  Copying `basename $FILE` ... "
	 		cp $FILE $CONFDIR/lang
			if [ $? -eq 0 ] ; then
				echo "OK"
			else
				echo "Error !!"
			fi
		done
		echo "Done"
	else
		echo
		echo "Warning : original configuration files not found in $CONF"
	fi
}

echo 
echo "FBB fast configuration tool"
echo 
echo "Warning ! This will erase the configuration files."
echo -n "Go on anyway ? (Y/N) "
read REP
if [ "$REP" = "N" -o "$REP" = "n" ] ; then
   	exit 0
fi

echo

CONF=`dirname $0`/conf
SRC=`dirname $0`/src

fbb_tree
copy_files
get_fbb_conf
get_fbb_port

echo
echo "Configuration done"
echo

exit 0
