#!/bin/bash

ECPATH=$(type -p voxren)

ECPATH=${ECPATH%/voxren}
ECPATH=${ECPATH%/bin}
LPRCONFPATH=${ECPATH}/share/eccet/config/modules/save/GENPPM
TEMPLATECONFPATH=${ECPATH}/share/eccet/config/modules/save/PPMTOHTML

echo "Install Path is $ECPATH"
echo

#
# Do some preliminary checks about available programs.
#


# ppmtops filter for eccet.

PROG=$(type -p eccet_ppmtops)
[ "$PROG" == "" ] && \
	{ echo "eccet_ppmtops is required for printing."; \
	  echo "Looks like your Eccet setup is imcomplete."; \
	  exit 1; }
[ -x $PROG ] || \
	{ echo "eccet_ppmtops is there but not executable."; \
	  echo "Looks like your Eccet setup is imcomplete."; \
	  exit 1; }


# ppmtohtml filter for eccet.

PROG=$(type -p eccet_ppmtohtml)
[ "$PROG" == "" ] && \
	{ echo "eccet_ppmtohtml is required for printing."; \
	  echo "Looks like your Eccet setup is imcomplete."; \
	  exit 1; }
[ -x $PROG ] || \
	{ echo "eccet_ppmtohtml is there but not executable."; \
	  echo "Looks like your Eccet setup is imcomplete."; \
	  exit 1; }

# ppmtopng

PROG=$(type -p pnmtopng)
[ "$PROG" == "" ] && \
	{ echo "pnmtopng is required for printing."; \
	  echo "Please install the netpbm package."; \
	  exit 1; }
[ -x $PROG ] || \
	{ echo "pnmtopng is there but not executable."; \
	  echo "Please install the netpbm package correctly."; \
	  exit 1; }

# m4

PROG=$(type -p m4)
[ "$PROG" == "" ] && \
	{ echo "The m4 macro processor is required for printing."; \
	  echo "Please install the m4 package."; \
	  exit 1; }
[ -x $PROG ] || \
	{ echo "The m4 macro processor is there but not executable."; \
	  echo "Please install the m4 package correctly."; \
	  exit 1; }

# html2ps

PROG=$(type -p html2ps)
[ "$PROG" == "" ] && \
	{ echo "The html2ps utility is required for printing."; \
	  echo "Please install the html2ps package."; \
	  exit 1; }
[ -x $PROG ] || \
	{ echo "The html2ps utility is there but not executable."; \
	  echo "Please install the html2ps package correctly."; \
	  exit 1; }


PROG=$(type -p lpr)
[ "$PROG" == "" ] && \
	{ echo "The lpr utility is required for printing."; \
	  echo "Please install the lpr package or a lpr compatibility kit for your print spooler."; \
	  exit 1; }
[ -x $PROG ] || \
	{ echo "The lpr utility is there but not executable."; \
	  echo "Please install the lpr package or a lpr compatibility kit for your print spooler correctly."; \
	  exit 1; }

if [ $# == 0 ] ; then
	echo "Usage: $0 [-d] -p printername|all -t template|all"
	echo "Sets up or deletes a Printer for use by Eccet."
	echo "See man ${0##*/} for details."
	exit 1
fi

DO_DELETE=0
PRINTERS=""
ALLPRINTERS=$(/usr/sbin/lpc status | grep "^[a-zA-Z0-9]*:" | \
		sed -e 's/[^a-zA-Z0-9]//g' | tr "
" " ")
TEMPLATES=""
ALLTEMPLATES=$(cd $TEMPLATECONFPATH; ls *.m4 | sed -e 's/\.m4$//' | tr "
" " ")

while getopts "dp:t:" OPTCHAR; do
	case "$OPTCHAR" in
		"d")
			DO_DELETE=1
		;;
		"p")
			PRINTERS=$PRINTERS" "$OPTARG
		;;
		"t")
			TEMPLATES=$TEMPLATES" "$OPTARG
		;;
	esac
done

PRINTERS=${PRINTERS# }
TEMPLATES=${TEMPLATES# }


if [ "$DO_DELETE" == "1" ] ; then

	TODELETE=""
	cd $LPRCONFPATH
	for printer in $PRINTERS ; do
		if [ "$printer" == "all" ] ; then 
			printer="*"
		fi
		for template in $TEMPLATES ; do
			if [ "$template" == "all" ] ; then
				template="*"
			fi
			TDNEW=$(ls LPR_${printer}_${template}.test 2>/dev/null | sed -e 's/\.test//g' )
			TODELETE=$TODELETE" "${TDNEW}
		done
	done
	TODELETE=${TODELETE# }
	echo
	echo "The following printer bindings (format: LPR_printer_template)"
	echo "have been selected for deletion:"
	for a in $TODELETE; do
		echo $a
	done
	if [ "$TODELETE" == "" ] ; then
		echo "No configured printers found. Aborting."
		exit 1;
	fi
	echo 
	echo "Do you want to delete these bindings? (yes or no)"
	while read a; do
		if [ "$a" == "yes" ]; then
			break;
		elif [ "$a" == "no" ] ;  then
			echo "O.k. - aborting."
			exit 1;
		else
			echo "Please answer yes or no."
		fi
	done
	echo "O.k. - deleting."
	for a in $TODELETE; do
		rm -f $a $a.test
	done
	exit
fi

if [ "$PRINTERS" == "all" ] ; then
	PRINTERS="$ALLPRINTERS"
fi
if [ "$TEMPLATES" == "all" ] ; then
	TEMPLATES="$ALLTEMPLATES"
fi

echo "You requested to add Eccet printer bindings for "
echo "these printers: $PRINTERS"
echo "using these templates: $TEMPLATES"

for a in $PRINTERS; do 
	for b in $TEMPLATES; do
		if [ -f $LPRCONFPATH/LPR_${a}_${b} ] ; then
			echo "Config file for printer $a template $b exists. Unchanged."
			echo "Please delete it first, if you want to update that."
		else
			echo "No config file for printer $a template $b. Setting up one."
			cat >$LPRCONFPATH/LPR_${a}_${b} <<EOF
|eccet_ppmtolpr $a $b %s %s %08d
EOF
			cat >$LPRCONFPATH/LPR_${a}_${b}.test <<EOF
#!/bin/bash
PRINTER=$a

PROG=\$(type -p eccet_ppmtops)
[ "\$PROG" == "" ] && exit 1
[ -x \$PROG ] || exit 1
PROG=\$(type -p eccet_ppmtohtml)
[ "\$PROG" == "" ] && exit 1
[ -x \$PROG ] || exit 1 
PROG=\$(type -p pnmtopng)
[ "\$PROG" == "" ] && exit 1
[ -x \$PROG ] || exit 1
PROG=\$(type -p m4)
[ "\$PROG" == "" ] && exit 1
[ -x \$PROG ] || exit 1
PROG=\$(type -p html2ps)
[ "\$PROG" == "" ] && exit 1
[ -x \$PROG ] || exit 1
PROG=\$(type -p lpr)
[ "\$PROG" == "" ] && exit 1
[ -x \$PROG ] || exit 1

#lpq -P"$PRINTER" >/dev/null || exit 1
EOF
			chmod a+x $LPRCONFPATH/LPR_${a}_${b}.test
		fi
	done
done
