[net.sources] Laserjet+ interface and printer script

wescott@sauron.UUCP (Michael Wescott) (03/21/86)

There are two shell scripts here.  hplp.sh is an program that goes
into /usr/bin or /usr/local or ... hplp is an LP spooler interface program.
It is set up for parallel port operation but should be easily modified for
serial port operation. Hplp.sh is the program that handles setting up the
data sent to the Laserjet for various options like changing fonts, portrait or
landscape selection etc. It is invoked on the command line and automatically
invokes "lp -dhplp ..."

Sorry, no man page.

	pr -l110 file1 file2 file3 | hplp -Flp -l110

puts 100 lines of text (from the files) plus 5 line headers and trailers.  It
specifies portrait orientation and the line printer font.


# This is a shell archive.  Remove anything before this line, then
# unpack it by saving it in a file and typing "sh file".  (Files
# unpacked will be owned by you and have default permissions.)
#
# This archive contains:
# hplp hplp.sh

echo x - hplp
cat > "hplp" << '//E*O*F hplp//'

#
#lp interface for hp laser jet
#staight cat of file - no banner
#
x="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
echo "\\033E\\c"
echo "\\033&k2G\\c"
echo "$x\n$x\n$x\n$x\n"
banner "$2"
echo "\n"
user=`grep "^$2:" /etc/passwd | line | cut -d: -f5`
if [ -n "$user" ]
then
	echo "User: $user\n"
else
	echo "\n"
fi
echo "Request id: $1     Printer: `basename $0`\n"
date
echo "\n"
if [ -n "$3" ]
then
	banner $3
fi
copies=$4
echo "\n Copies: ${copies}"
#reset
echo "\\033E\\c"
shift; shift; shift; shift; shift
files="$*"
i=1
while [ $i -le $copies ]
do
	for file in $files
	do
		cat $file 2>&1

	done
	i=`expr $i + 1`
done
#reset
echo "\\033E\\c"
exit 0
//E*O*F hplp//

echo x - hplp.sh
cat > "hplp.sh" << '//E*O*F hplp.sh//'
#! /bin/sh
# filter to set up for feeding data to the hp laserjet+
# -L = landscape	-P = portrait
# -m = margins off; use "pr -l## -f -t" instead of cat
# -c ## = # of copies
# -F xx = set font (for now only lp has effect, only in portrait mode)
# -l xxx = set number of printed lines per page (used to calc VMI)
# -a = set auto feed
# -h = set hand feed
# -n no conv of nl to cr + nl
# -t no tabs expanded
# -T xxxx -> title
# defaults  -Pa -l66 -c1
destination=hplp
portrait=1
copies=1
lines=0
margin=1
autofeed=1
autocrnl=1
font=courier
tabs=1
CAT=/bin/cat
NEWF="newform -i -l200"
set -- `getopt nPLc:ahl:mF:T: $*`
if [ $? != 0 ]
then
	echo "usage: hplp [-[PLFmaht] [-l##] [-c##]] [files]"
	exit 2
fi
for i in $*
do
	case $i in
		-L) portrait=0; shift;;
		-P) portrait=1; shift;;
		-m) margin=0; shift;;
		-h) autofeed=0; shift;;
		-a) autofeed=1; shift;;
		-F) shift; font=$1; shift;;
		-T) shift; title=$1; shift;;
		-l) shift; lines=$1; shift;;
		-c) shift; copies=$1; shift;;
		-n) autocrnl=0; shift;;
		-t) tabs=0; shift;;
		--) shift; break;;
	esac
done
if [ ${portrait} = 1 ]
then
	if [ ${lines} = 0 ]
	then
		lines=66
	fi
	if [ ${margin} = 1 ]
	then
		pagelength=10.0
	else
		pagelength=10.5
		CAT="/bin/pr -l${lines} -t -f"
	fi
else
	if [ ${lines} = 0 ]
	then
		lines=48
	fi
	if [ ${margin} = 1 ]
	then
		pagelength=7.5
	else
		pagelength=8.0
		CAT="/bin/pr -l${lines} -t -f"
	fi
fi
if [ -z "${title}" ]
then
	title=$LOGNAME
fi
if [ -z "${title}" ]
then
	title="Laserjet"
fi
# set VMI
VMI=`dc <<XxXxXxX
4k 48 ${pagelength} * ${lines} / pq
XxXxXxX`
( echo "\033E\c"	# reset
  if [ ${portrait} != 1 ] 
  then
	echo "\033&l1O\c"	# set landscape
  else
	if [ ${font} = lp ]
	then
		echo "\033(0U\033(s16.6h8.5v0s-3b0T\c"  # line printer font
	fi
  fi
  echo "\033&l${lines}f${VMI}C\c"	# set text length and VMI
  echo "\033&s1C\c"			# no auto wrap at eol
  if [ ${margin} = 0 ] 
  then
	echo "\033&l0L\033&a0r0C\c"	# reset perf skip; goto 0,0
  fi
  if [ ${autocrnl} = 1 ]
  then
	echo "\033&k2G\c"		# set lf = cr + lf
  fi
  if [ ${autofeed} = 0 ]
  then
	echo "\033&l2H\c"		# set manual feed
  fi
  if [ tabs = 0 ]
  then
	if test $1 
	then
		for i in $*
		do
			if test -r $i
			then
				${CAT} $i
			fi
		done
	else
		${CAT} -
	fi
  else
	if test $1 
	then
		for i in $*
		do
			if test -r $i
			then
				${CAT} $i
			fi
		done
	else
		${CAT} -
	fi | ${NEWF}
  fi
) | lp -d${destination} -n${copies} -t${title}
//E*O*F hplp.sh//

exit 0