#!/bin/sh

LPMODEL=/usr/spool/lp/model/hp4laser

#
#	Determine OS type
#
systype() {
	if [ -f /xenix ]; then
		echo xenix
	elif [ -f /bin/hp-pa ]; then
		echo hpux
	else
		echo unix
	fi
}

#
#	Set shell variable $2 in file $1 to value $3
#
setshellvar () {
	ed - <<-EOF $1
	/^$2=/s/=[^#;]*/="$3"	/
	w
	q
	EOF
}

#
#	initfiles - search for pattern in the init files
#		print list of matching files
#
initfiles() {
	pattern=$1
	filelist=""
	for i in /etc/inittab /etc/conf/cf.d/init.base /etc/conf/init.d/*
	do
		grep $pattern $i >/dev/null 2>&1
		if [ $? = 0 ]
		then
			filelist="$filelist $i"
		fi
	done
	echo $filelist
}

#
#  ttymode /dev/ttyNN respawn|off comment
#
#	This procedure will modify /etc/inittab so that "tty" will be
#	set to mode with "comment".  On XENIX, it uses enable/disable
#
ttymode() {
	# tty="`expr $1 : '.*\(tty[0-9][0-9]\)\$'`"
	tty="`expr $1 : '.*\(tty.*\)\$'`"
	# num=`expr "$tty" : '.*\(..\)'`
	num=`expr "$tty" : 'tty\(..\)'`
	shift
	mode="$1"; shift
	comment="$*"

	case "$OS" in
	xenix)
		if [ $mode = off ]
		then
			disable ${tty}
		else
			enable ${tty}
		fi
		;;
	*)
		EDIT_FILE=`initfiles ${tty}`
		if [ -z "$EDIT_FILE" ]
		then
			#echo $0 "Can't find ${tty} in init.base or init.d/* files"
			return
		fi

		for f in $EDIT_FILE
		do
			ed - $f <<-!End
				H
				g/^$num:/s/ *#.*//\\
				s/^\([^:]*:[^:]*\):[^:]*:/\1:$mode:/\\
				s/[ 	]#.*//\\
				s/\$/ # $comment/
				w
				q
		!End
		done

		case "$OS" in
		unix)	/etc/conf/bin/idmkinit -o /etc
		esac

		chmod 444 /etc/inittab
		chgrp bin /etc/inittab
		chown bin /etc/inittab
		/etc/init q
	esac
}

OS=`systype`
alldone=0
while [ $alldone = 0 ]
do
	tput clear
	echo "		JetRoff/DigiFAX LaserJet Printer Installation"
	echo;echo

	done=0
	while [ $done = 0 ]
	do
		echo
		echo "The following printer models are supported:"
		echo
		echo "	dj	DeskJet or DeskJet+"
		echo "	lj+	LaserJet+ or compatible"
		echo "	lj2	LaserJet Series II or compatible"
		echo "	lj3	LaserJet Series III or compatible"
		echo "	lj4	LaserJet Series IV"
		echo "	lj4ps	LaserJet Series IV with Adobe PS SIMM"
		echo "	none	No printer available"
		echo "	q	quit this procedure"
		echo
		echo "See your UNIX System Administrators Guide to install"
		echo "other types of printers."
		echo
		echo "What type of printer do you have: (dj, lj+, lj[234], none)? \c"
		read model
		case "$model" in
		dj)	done=1; jrmodel=dj;;
		lj+)	done=1; jrmodel=lj+;;
		lj2)	done=1; jrmodel=lj2;;
		lj3)	done=1; jrmodel=lj2;;
		lj4)	done=1; jrmodel=lj2;;
		lj4ps)	done=1; jrmodel=lj2;;
		none)
			echo
			echo "OK, no printer will be configured at this time"
			echo "Run 'jetconfig' to add a printer at a later time"
			exit 0;;
		q)	exit 0;;
		esac
	done

	done=0
	while [ $done = 0 ]
	do
		type=parallel; devices="/dev/*lp*"
		echo "Select printer interface (parallel,serial) [parallel]? \c"
		read ans
		case "$ans" in
		"")	done=1;;
		p*)	done=1; type=parallel; devices="/dev/*lp*";;
		s*)	done=1; type=serial; devices="/dev/tty*";;
		esac
	done

	done=0; speed=parallel;
	speeds="1200 2400 4800 9600 19200 38400 exta extb"
	while [ $type = "serial" -a $done = 0 ]
	do
		echo "Serial interface speed choices:"
		echo
		echo "	$speeds"
		echo
		echo "Select serial interface speed [19200]: \c"
		read speed
		case "$speed" in
		"")	speed=19200;done=1;;
		1200|2400|4800|9600|19200|38400)	done=1;;
		esac
	done

	done=0
	while [ $done = 0 ]
	do
		echo
		echo "The following $type devices are available:"
		echo
		COLUMNS=70 ls -C $devices | sed 's/^/	/'
		echo; echo "Choose one of the above $type devices: \c"
		read dev
		if [ -c "$dev" ]; then done=1; fi
	done

	done=0
	while [ $done = 0 ]
	do
		echo
		echo "The following paper sizes can be used:"
		echo
		echo "	letter		8.5 by 11 inches"
		echo "	a4		210 by 297 millimeters"
		echo "	legal		8.5 by 14 inches"
		echo "	executive	7.25 by 10.5 inches"
		echo
		echo "What is the usual paper size you use (letter, a4, ...) [letter]? \c"
		read ans
		case "$ans" in
		"")				paper=letter; done=1;;
		letter|legal|executive|a4)	paper="$ans"; done=1;;
		esac
	done

	done=0
	while [ $done = 0 ]
	do
		echo
		echo
		echo "Do you want a banner page printed for each job (yes, no) [no]? \c"
		read banner
		case "$banner" in
		y*)	banner=yes; done=1;;
		n*)	banner=no; done=1;;
		"")	banner=no; done=1;;
		esac
	done

	N=`lpstat -p | grep "${model}_[1-9][0-9]*" | wc -l`
	N=`expr ${N} + 1`
	echo; echo "The printer name is ${model}_${N}.\n"
	echo "If ${model}_${N} is OK, hit RETURN or"
	echo "if you would prefer another name, enter the name:  \c"
	read name
	name=${name:-"${model}_${N}"}

	echo; echo "You have selected the following configuration:"
	echo
	echo "Printer model \"$model\" named \"$name\""
	echo "Installed on the \"$type\" interface on port \"$dev\" \c"
	if [ $type = "serial" ]
	then
		echo " at $speed baud"
	else
		echo
	fi
	echo "Using default paper type \"$paper\""
	echo; echo "Is this configuration acceptable (yes, no) [no]? \c"
	read ans
	case "$ans" in
	y*|Y*)	alldone=1;;
	esac
done

#
#	Adjust model preferences
#
setshellvar $LPMODEL speed $speed
setshellvar $LPMODEL banner $banner
setshellvar $LPMODEL idlemode pcl
case "$model" in
lj4ps)	setshellvar $LPMODEL ps_simm yes;;
*)	setshellvar $LPMODEL ps_simm no;;
esac

tput clear
echo "			JetRoff Print Spooler Configuration"
echo;echo;echo

expr "$dev" : "/dev/tty.*" >/dev/null && ttymode ${dev} off "Printer"
chmod 600 ${dev}
chown lp ${dev}

/usr/lib/lpshut

case "$OS" in
xenix|hpux)	/usr/lib/lpadmin -p${name} -v${dev} -i$LPMODEL;;
*)		/usr/lib/lpadmin -p ${name} -v ${dev} -i $LPMODEL;;
esac

/usr/lib/lpsched

lpstat -r
/usr/lib/accept ${name}
enable ${name}
/usr/lib/lpadmin -d${name}

if [ $jrmodel != lj2 -o $paper != letter ]
then
	echo "all -P$paper -T!letter -T$paper -T$jrmodel" >/usr/lib/jetoptions
	chown bin /usr/lib/jetoptions
	chgrp bin /usr/lib/jetoptions
	chmod 644 /usr/lib/jetoptions
else
	rm -f /usr/lib/jetoptions
fi
