#!/bin/sh
##########################
##
## Ricoh Aficio AP3800C
## Unix Printing Interface Program
## Last Update 12/09/2004
## Copyright 1999-2004
## All rights reserved
## Ricoh Engineering
##
##########################

##########################
##
## Update History
##
## 5/20/2002 Add text file release
## 3/20/2001 First release
##
##########################

##########################
##
## Debug Flag, set to y to leave temp files in /tmp
##
##########################

DEBUG=

##########################
##
## Parse arguments passed as -o option of lp command
##
##########################

parse () {
	echo "`expr \"$1\" : \"^[^=]*=\(.*\)\"`"
}

##########################
#
# This program is invoked as
#
# ${SPOOLDIR}/.../printer request-id user title copies options files...
#
# The first three arguments are simply reprinted on the banner page,
# the fourth (copies) is used to control the number of copies to print,
# the fifth (options) is a blank separated list (in a single argument)
# of user or Spooler supplied options (without the -o prefix),
# and the last arguments are the files to print.
#
##########################

printer=`basename $0`
request_id=$1
user_name=$2
title=$3
copies=$4
option_list=$5

shift 5
files="$*"

nobanner="no"
nofilebreak="no"
stty=
inlist=

device_tmp=
prtout_tmp=
ps_tmp=
is_TXT=
is_PS=
is_PCL=
TXT=
PS=
PCL=
is_DSC=

##########################
#
# Change the following line to match to
# the remote printer's name
#
##########################

REMOTE_PRINTER=

##########################
#
# device_tmp stores device option commands
# prtout_tmp holds actual printout to the printer
# ps_tmp is used to hold pre-processed input PS file
#
##########################

device_tmp="/tmp/afcdev_$$.tmp"
prtout_tmp="/tmp/afcprt_$$.tmp"
ps_tmp="/tmp/afcps_$$"
pjl_tmp="/tmp/afcpjl_$$"
pcl_tmp="/tmp/afcpcl_$$"

##########################
#
# Store some default values
#
##########################

##########################
#
# Auto-detect input file type here
#
# If is_PS=1, input file is PostScript
# If is_PS=0, input file is text
# is_PS is overwritten, if user specified
#	input file type with "-o text" or "-o ps" option
#
##########################

OS_NAME=`uname -s`

case $OS_NAME in
SunOS)
	is_PS=`file $* | grep -c PostScript`
	;;
HP-UX)
	is_PS=`file $* | grep  -c postscript`
	;;
*)
	is_PS=`file $* | grep -c PostScript`
	;;
esac

##########################
#
# Device options (e.g. -o value=a) are identified
# and processed here.
#
##########################
##########################
# added for collate option.
# number of copies

echo "<</NumCopies $copies>>setpagedevice" >> $device_tmp
printf "\033&l%dx" $copies >> $pcl_tmp


for i in ${option_list}
do
	case "${inlist}${i}" in

	nobanner )
		nobanner="yes"
		;;

	nofilebreak )
		nofilebreak="yes"
		;;

##########################
#
# Debug option
#
##########################

	debug )
		DEBUG=Y
		;;

##########################
#
# Text option
#
##########################

	text )
		TXT=1
		;;

##########################
#
# PS option
#
##########################

	ps )
		PS=1
		;;

##########################
#
# PCL option
#
##########################

	pcl|nofilter )
		PCL=1
		;;

##########################
# LNX_TUB_B
#
# Paper Orientation (Default=Portrait)
#
##########################
        portrait  )
		printf "\033&l0o" >> $pcl_tmp
		;;

	landscape )
		printf "\033&l1O" >> $pcl_tmp
		;;

        rportrait )
		printf "\033&l2O" >> $pcl_tmp
		;;

	rlandscape )
		printf "\033&l3O" >> $pcl_tmp
		;;

##########################
#
# Character compresser (16.5 or 16.7 per line)
#
##########################
        compress )
		printf "\033&k2S" >> $pcl_tmp
		;;

##########################
#
# Line Spacing
#
##########################
        lpi* )
		lpi=`expr $i : 'lpi\([0-9]*\)'`
		printf "\033&l%dD" $lpi >> $pcl_tmp
		;;

##########################
#
# Pitch (character per inch)
#
##########################
	cpi* )
		pitch=`expr $i : 'cpi\([0-9.]*\)'`
		if [ -n "$pitch" ]
		then
			printf "\033(s%.2fH" $pitch >> $pcl_tmp
		fi
		;;

	duplex=* )
		duplex=`parse ${i}`
		;;

	toner=* )
		toner=`parse ${i}`
		;;

	staple=* )
		staple=`parse ${i}`
		;;

	punch=* )
		punch=`parse ${i}`
		;;

	mediatype=* )
		mediatype=`parse ${i}`
		;;

	resolution=* )
		resolution=`parse ${i}`
		;;

	trayswitch=* )
		trayswitch=`parse ${i}`
		;;

	itray=* )
		itray=`parse ${i}`
		;;

	colorsettings=* )
		colorsettings=`parse ${i}`
		;;

	profile=* )
		profile=`parse ${i}`
		;;

	gradation=* )
		gradation=`parse ${i}`
		;;

	dithering=* )
		dithering=`parse ${i}`
		;;

	black=* )
		black=`parse ${i}`
		;;

	blackoverprint=* )
		blackoverprint=`parse ${i}`
		;;

	outbin=* )
		outbin=`parse ${i}`
		;;

	collate=* )
		collate=`parse ${i}`
		;;

	color=* )
		color=`parse ${i}`
		;;

	paper=* )
		paper=`parse ${i}`
		;;

	esac

done

##############################################################
#
# Check some relational conditions here:
#
##############################################################

if [ "$itray" = "bypass" ]
then
	staple=off
	punch=off
fi

if [ -n "$staple" -a "$staple" != "off" ]
then
	collate="on"
	if [ -z "$outbin" ]
	then
		outbin="shift2"
	fi
fi

if [ -n "$punch" -a "$punch" != "off" ]
then
	if [ -z "$outbin" ]
	then
		outbin="shift2"
	fi
fi

##############################################################
#
# The order below is somehow important:
#
##############################################################

##########################
#
# Paper Size (Default=Letter)
#
##########################

		case "$paper" in

		A3 )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [842 1191] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l27A" >> $pcl_tmp
			)
			;;

		A4 )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [595 842] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l26A" >> $pcl_tmp
			)
			;;

		A5 )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [421 595] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l2000A" >> $pcl_tmp
			)
			;;

		A6 )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [298 421] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l2001A" >> $pcl_tmp
			)
			;;

		B4 )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [728 1031] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l46A" >> $pcl_tmp
			)
			;;

		B5 )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [516 729] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l45A" >> $pcl_tmp
			)
			;;

		legal )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [612 1008] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l3A" >> $pcl_tmp
			)
			;;

		letter )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [612 792] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l2A" >> $pcl_tmp
			)
			;;

		55x85|halfletter|statement )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [396 612] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l2008A" >> $pcl_tmp
			)
			;;

		11x17|tabloid|ledger )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [792 1224] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l6A" >> $pcl_tmp
			)
			;;

		executive )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [522 756] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l1A" >> $pcl_tmp
			)
			;;

		825x13|folio )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [595 935] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l2012A" >> $pcl_tmp
			)
			;;

		8x13 )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [576 936] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l2011A" >> $pcl_tmp
			)
			;;

		85x13|foolscap )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [612 936] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l2007A" >> $pcl_tmp
			)
			;;

		envelope|envelop-com10 )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [297 684] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l81A" >> $pcl_tmp
			)
			;;

		env-monarch )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [279 540] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l80A" >> $pcl_tmp
			)
			;;

		env-c5 )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [459 649] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l91A" >> $pcl_tmp
			)
			;;

		env-c6 )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [323 459] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l2022A" >> $pcl_tmp
			)
			;;

		env-dl )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [311 623] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l90A" >> $pcl_tmp
			)
			;;

		8k )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [757 1106] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l2030A" >> $pcl_tmp
			)
			;;

		16k )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [553 757] /ImagingBBox null>> setpagedevice" >> $device_tmp
			printf "\033&l2031A" >> $pcl_tmp
			)
			;;

		* )
			(
			echo "<< /DeferredMediaSelection true
  			/Policies << /PageSize 2 /MediaType 2 >>
  			/PageSize [612 792] /ImagingBBox null >> setpagedevice" >> $device_tmp
			printf "\033&l2A" >> $pcl_tmp
			)
			;;

		esac

##########################
#
# Input Tray Selection	(Default=AutoSelect)
#
##########################

		case "$itray" in

		bypass )
			(
			echo "<</MediaPosition 0>> setpagedevice" >> $device_tmp
			printf "\033&l2H" >> $pcl_tmp
			)
			;;

		tray1 )
			(
			echo "<</MediaPosition 1>> setpagedevice" >> $device_tmp
			printf "\033&l8H" >> $pcl_tmp
			)
			;;

		tray2 )
			(
			echo "<</MediaPosition 2>> setpagedevice" >> $device_tmp
			printf "\033&l1H" >> $pcl_tmp
			)
			;;

		tray3 )
			(
			echo "<</MediaPosition 3>> setpagedevice" >> $device_tmp
			printf "\033&l4H" >> $pcl_tmp
			)
			;;

		tray4 )
			(
			echo "<</MediaPosition 4>> setpagedevice" >> $device_tmp
			printf "\033&l30H" >> $pcl_tmp
			)
			;;

		* )
			(
			printf "\033&l7H" >> $pcl_tmp
			)
			;;

		esac

##########################
#
# Auto Tray Switching (Default=On)
#
##########################

		case "$trayswitch" in

		on )
			(
			echo "<</TraySwitch true>>setpagedevice" >> $device_tmp
			echo "@PJL SET AUTOTRAYCHANGE=ON" >> $pjl_tmp
			)
			;;

		off )
			(
			echo "<</TraySwitch false>>setpagedevice" >> $device_tmp
			echo "@PJL SET AUTOTRAYCHANGE=OFF" >> $pjl_tmp
			)
			;;

		* )
			(
			echo "<</TraySwitch true>>setpagedevice" >> $device_tmp
			echo "@PJL SET AUTOTRAYCHANGE=ON" >> $pjl_tmp
			)
			;;

		esac

##########################
#
# Resolution (Default=600)
#
##########################

		case "$resolution" in

		1200 )
			(
			echo "<</HWResolution[1200 1200]>>setpagedevice
			/version (3010.103) def" >> $device_tmp
			echo "@PJL SET RESOLUTION=1200" >> $pjl_tmp
			)
			;;

		600 )
			(
			echo "<</HWResolution[600 600]>>setpagedevice
  			/version (3010.103) def" >> $device_tmp
			echo "@PJL SET RESOLUTION=600" >> $pjl_tmp
			)
			;;

		* )
			(
			echo "<</HWResolution[600 600]>>setpagedevice
  			/version (3010.103) def" >> $device_tmp
			echo "@PJL SET RESOLUTION=600" >> $pjl_tmp
			)
			;;

		esac

##########################
#
# Gradation (Default=Fast)
#
##########################

		case "$gradation" in

		fast )
			(
			echo "1 setbitsperpixel" >> $device_tmp
			)
			;;

		standard )
			(
			echo "2 setbitsperpixel" >> $device_tmp
			)
			;;

		* )
			(
			echo "1 setbitsperpixel" >> $device_tmp
			)
			;;

		esac

##########################
#
# Toner Saver (Default=Off)
#
##########################

		case "$toner" in
		off )
			(
			echo "<< /PostRenderingEnhance false >> setpagedevice " >> $device_tmp
			echo "@PJL SET ECONOMODE=OFF" >> $pjl_tmp
			)
			;;
		on )
			(
			echo "<</PostRenderingEnhance true
				/PostRenderingEnhanceDetails <</Type 34 /OutputMode 3>>
				>> setpagedevice " >> $device_tmp
			echo "@PJL SET ECONOMODE=ON" >> $pjl_tmp
			)
			;;
		* )
			(
			echo "<< /PostRenderingEnhance false >> setpagedevice " >> $device_tmp
			echo "@PJL SET ECONOMODE=OFF" >> $pjl_tmp
			)
			;;
		esac

##########################
#
# Duplex (Default=OFF)
#
##########################

		case "$duplex" in

		off )
			(
			echo "<</Duplex false>>setpagedevice" >> $device_tmp
			echo "@PJL SET DUPLEX=OFF" >> $pjl_tmp
			)
			;;

		long )
			(
			echo "<</Duplex true /Tumble false>>setpagedevice" >> $device_tmp
			echo "@PJL SET DUPLEX=ON" >> $pjl_tmp
			echo "@PJL SET BINDING=LONGEDGE" >> $pjl_tmp
			)
			;;

		short )
			(
			echo "<</Duplex true /Tumble true>>setpagedevice" >> $device_tmp
			echo "@PJL SET DUPLEX=ON" >> $pjl_tmp
			echo "@PJL SET BINDING=SHORTEDGE" >> $pjl_tmp
			)
			;;

		* )
			(
			echo "<</Duplex false>>setpagedevice" >> $device_tmp
			echo "@PJL SET DUPLEX=OFF" >> $pjl_tmp
			)
			;;

		esac

##########################
#
# Color / Grayscale (Default=Yes)
#
##########################

		case "$color" in

		yes|on )
			(
			echo "(cmyk) RCsetdevicecolor" >> $device_tmp
			echo "@PJL SET DATAMODE=COLOR" >> $pjl_tmp
			)
			;;

		no|off )
			(
			echo "(gray) RCsetdevicecolor" >> $device_tmp
			echo "@PJL SET DATAMODE=GRAYSCALE" >> $pjl_tmp
			)
			;;

		* )
			(
			echo "(cmyk) RCsetdevicecolor" >> $device_tmp
			echo "@PJL SET DATAMODE=COLOR" >> $pjl_tmp
			)
			;;

		esac

##########################
#
# Color Settings (Default=Fine)
#
##########################

		case "$colorsettings" in

		off )
			(
			echo "(none) RCsetrgbrevision" >> $device_tmp
			)
			;;

		vivid )
			(
			echo "(vivid-std) RCsetrgbrevision" >> $device_tmp
			)
			;;

		supervivid )
			(
			echo "(vivid-dark) RCsetrgbrevision" >> $device_tmp
			)
			;;

		fine )
			(
			echo "(precision-std) RCsetrgbrevision" >> $device_tmp
			)
			;;

		superfine )
			(
			echo "(precision-dark) RCsetrgbrevision" >> $device_tmp
			)
			;;

		* )
			(
			echo "(precision-std) RCsetrgbrevision" >> $device_tmp
			)
			;;
		esac

##########################
#
# Color Profile (Default=Business)
#
##########################

		case "$profile" in

		photo )
			(
			echo "(photo) RCsetcolorprofile" >> $device_tmp
			)
			;;

		business )
			(
			echo "(business) RCsetcolorprofile" >> $device_tmp
			)
			;;

		solidcolor )
			(
			echo "(colorimetric) RCsetcolorprofile" >> $device_tmp
			)
			;;

		* )
			(
			echo "(business) RCsetcolorprofile" >> $device_tmp
			)
			;;

		esac

##########################
#
# Dithering (Default=Photo)
#
##########################

		case "$dithering" in

		photo )
			(
			echo "(photo) RCsethalftonetype" >> $device_tmp
			)
			;;

		text )
			(
			echo "(text) RCsethalftonetype" >> $device_tmp
			)
			;;

		* )
			(
			echo "(photo) RCsethalftonetype" >> $device_tmp
			)
			;;

		esac

##########################
#
# Pure Black (Default=K)
#
##########################

		case "$black" in

		k )
			(
			echo "(on) RCsetpureblack" >> $device_tmp
			)
			;;

		cmyk )
			(
			echo "(off) RCsetpureblack" >> $device_tmp
			)
			;;

		* )
			(
			echo "(on) RCsetpureblack" >> $device_tmp
			)
			;;

		esac

##########################
#
# Black	Over Print (Default=Off)
#
##########################

		case "$blackoverprint" in

		off )
			(
			echo "(off) RCsetblackoverprint" >> $device_tmp
			)
			;;

		on )
			(
			echo "(on) RCsetblackoverprint" >> $device_tmp
			)
			;;

		* )
			(
			echo "(off) RCsetblackoverprint" >> $device_tmp
			)
			;;

		esac

##########################
#
# Collate (Default=off)
#
##########################

		case "$collate" in

		off )
			(
			echo "<</Collate false>>setpagedevice" >> $device_tmp
			echo "@PJL SET JOBOFFSET=OFF" >> $pjl_tmp
			printf "\033&l%dx" $copies >> $pcl_tmp
			)
			;;

		on )
			(
			echo "<</Collate true/CollateDetails
			<</Type 6 /AlignSet true>> >>setpagedevice" >> $device_tmp
			echo "@PJL SET QTY=$copies" >> $pjl_tmp
			printf "\033&l1x" >> $pcl_tmp
			)
			;;

		* )
			(
			echo "<</Collate false>>setpagedevice" >> $device_tmp
			echo "@PJL SET JOBOFFSET=OFF" >> $pjl_tmp
			printf "\033&l%dx" $copies >> $pcl_tmp
			)
			;;

		esac

##########################
#
# Media Type (Default=Plain)
#
##########################

		case "$mediatype" in

		plain )
			(
			echo "<< /MediaType (Plain) >> setpagedevice" >> $device_tmp
			printf "\033&n6WdPlain" >> $pcl_tmp
			)
			;;

		recycled )
			(
			echo "<< /MediaType (Recycled) >> setpagedevice" >> $device_tmp
			printf "\033&n9WdRecycled" >> $pcl_tmp
			)
			;;

		special )
			(
			echo "<< /MediaType (Special) >> setpagedevice" >> $device_tmp
			printf "\033&n8WdSpecial" >> $pcl_tmp
			)
			;;

		color )
			(
			echo "<< /MediaType (Color) >> setpagedevice" >> $device_tmp
			printf "\033&n6WdColor" >> $pcl_tmp
			)
			;;

		letterhead )
			(
			echo "<< /MediaType (Letterhead) >> setpagedevice" >> $device_tmp
			printf "\033&n11WdLetterhead" >> $pcl_tmp
			)
			;;
		preprinted )
			(
			echo "<< /MediaType (Preprinted) >> setpagedevice" >> $device_tmp
			printf "\033&n11WdPreprinted" >> $pcl_tmp
			)
			;;

		prepunched )
			(
			echo "<< /MediaType (Prepunched) >> setpagedevice" >> $device_tmp
			printf "\033&n11WdPrepunched" >> $pcl_tmp
			)
			;;

		labels )
			(
			echo "<< /MediaType (Labels) >> setpagedevice" >> $device_tmp
			printf "\033&n7WdLabels" >> $pcl_tmp
			)
			;;

		bond )
			(
			echo "<< /MediaType (Bond) >> setpagedevice" >> $device_tmp
			printf "\033&n5WdBond" >> $pcl_tmp
			)
			;;

		cardstock )
			(
			echo "<< /MediaType (Cardstock) >> setpagedevice" >> $device_tmp
			printf "\033&n10WdCardstock" >> $pcl_tmp
			)
			;;

		transparency )
			(
			echo "<< /MediaType (Transparency) >> setpagedevice" >> $device_tmp
			printf "\033&n13WdTransparency" >> $pcl_tmp
			)
			;;

		thick )
			(
			echo "<< /MediaType (Thick) >> setpagedevice" >> $device_tmp
			printf "\033&n6WdThick" >> $pcl_tmp
			)
			;;

		duplexplain )
			(
			echo "<< /MediaType (PlainDuplexBackSide) >> setpagedevice" >> $device_tmp
			printf "\033&n20WdPlainduplexbackside" >> $pcl_tmp
			)
			;;

		duplexthick )
			(
			echo "<< /MediaType (ThickDuplexBackSide) >> setpagedevice" >> $device_tmp
			printf "\033&n20WdThickduplexbackside" >> $pcl_tmp
			)
			;;

		* )
			(
			echo "<< /MediaType (Plain) >> setpagedevice" >> $device_tmp
			printf "\033&n6WdPlain" >> $pcl_tmp
			)
			;;

		esac

##########################
#
#  Output Bin (Default=Printer's Default)
#
##########################

		case "$outbin" in

		default )
			(
			echo "<</OutputType null>>setpagedevice" >> $device_tmp
			)
			;;

		standard )
			(
			echo "<</OutputType (Standard)>>setpagedevice" >> $device_tmp
			echo "@PJL SET OUTBIN=UPPER" >> $pjl_tmp
			echo "@PJL SET OUTBIN=OPTIONALOUTPUTBIN1" >> $pjl_tmp
			)
			;;

		external )
			(
			echo "<</OutputType (Standard2)>>setpagedevice" >> $device_tmp
			echo "@PJL SET OUTBIN=LOWER" >> $pjl_tmp
			)
			;;

		shift1 )
			(
			echo "<</OutputType (Fin2250Upper)>>setpagedevice" >> $device_tmp
			echo "@PJL SET OUTBIN=FINISHERPROOF" >> $pjl_tmp
			)
			;;

		shift2 )
			(
			echo "<</OutputType (Fin2250Lower)>>setpagedevice" >> $device_tmp
			echo "@PJL SET OUTBIN=FINISHERSHIFT" >> $pjl_tmp
			)
			;;

		mbin1 )
			(
			echo "<</OutputType (MailBin1)>>setpagedevice" >> $device_tmp
			echo "@PJL SET OUTBIN=OPTIONALOUTPUTBIN2" >> $pjl_tmp
			)
			;;

		mbin2 )
			(
			echo "<</OutputType (MailBin2)>>setpagedevice" >> $device_tmp
			echo "@PJL SET OUTBIN=OPTIONALOUTPUTBIN3" >> $pjl_tmp
			)
			;;

		mbin3 )
			(
			echo "<</OutputType (MailBin3)>>setpagedevice" >> $device_tmp
			echo "@PJL SET OUTBIN=OPTIONALOUTPUTBIN4" >> $pjl_tmp
			)
			;;

		mbin4 )
			(
			echo "<</OutputType (MailBin4)>>setpagedevice" >> $device_tmp
			echo "@PJL SET OUTBIN=OPTIONALOUTPUTBIN5" >> $pjl_tmp
			)
			;;

		* )
			(
			echo "<</OutputType null>>setpagedevice" >> $device_tmp
			)
			;;

		esac

##########################
#
# Staple (Default=OFF)
#
##########################

		case "$staple" in

		off )
			(
			echo "<< /Staple 0 >> setpagedevice" >> $device_tmp
			echo "@PJL SET STAPLE=OFF" >> $pjl_tmp
			)
			;;

		tleftslant )
			(
			echo "<< /Collate true  /CollateDetails <</Type 6 /AlignSet true>>
			  /Staple 2  /StapleDetails << /Type 14 /Angle 0 /Position 0 >>
			  >> setpagedevice" >> $device_tmp
			echo "@PJL SET STAPLE=LEFTTOPSLANTPORT" >> $pjl_tmp
			echo "@PJL SET QTY=$copies" >> $pjl_tmp
			printf "\033&l1x" >> $pcl_tmp
			)
			;;

		trightslant )
			(
			echo "<< /Collate true  /CollateDetails <</Type 6 /AlignSet true>>
			  /Staple 2  /StapleDetails << /Type 14 /Angle 0 /Position 6 >>
			  >> setpagedevice" >> $device_tmp
			echo "@PJL SET STAPLE=RIGHTTOPSLANTPORT" >> $pjl_tmp
			echo "@PJL SET QTY=$copies" >> $pjl_tmp
			printf "\033&l1x" >> $pcl_tmp
			)
			;;

		tleft )
			(
			echo "<< /Collate true  /CollateDetails <</Type 6 /AlignSet true>>
			  /Staple 2  /StapleDetails << /Type 14 /Angle 0 /Position 0 >>
			  >> setpagedevice" >> $device_tmp
			echo "@PJL SET STAPLE=LEFTTOP" >> $pjl_tmp
			echo "@PJL SET QTY=$copies" >> $pjl_tmp
			printf "\033&l1x" >> $pcl_tmp
			)
			;;

		tright )
			(
			echo "<< /Collate true  /CollateDetails <</Type 6 /AlignSet true>>
			  /Staple 2  /StapleDetails << /Type 14 /Angle 0 /Position 6 >>
			  >> setpagedevice" >> $device_tmp
			echo "@PJL SET STAPLE=RIGHTTOP" >> $pjl_tmp
			echo "@PJL SET QTY=$copies" >> $pjl_tmp
			printf "\033&l1x" >> $pcl_tmp
			)
			;;

		bleft )
			(
			echo "<< /Collate true  /CollateDetails <</Type 6 /AlignSet true>>
			  /Staple 2  /StapleDetails << /Type 14 /Angle 0 /Position 2 >>
			  >> setpagedevice" >> $device_tmp
			)
			;;

		bright )
			(
			echo "<< /Collate true  /CollateDetails <</Type 6 /AlignSet true>>
			  /Staple 2  /StapleDetails << /Type 14 /Angle 0 /Position 4 >>
			  >> setpagedevice" >> $device_tmp
			)
			;;
		2atleft )
			(
			echo "<< /Collate true  /CollateDetails <</Type 6 /AlignSet true>>
			  /Staple 2  /StapleDetails << /Type 14 /Angle 0 /Position 1 >>
			  >> setpagedevice" >> $device_tmp
			echo "@PJL SET STAPLE=LEFT2PORT" >> $pjl_tmp
			echo "@PJL SET QTY=$copies" >> $pjl_tmp
			printf "\033&l1x" >> $pcl_tmp
			)
			;;

		2atright )
			(
			echo "<< /Collate true  /CollateDetails <</Type 6 /AlignSet true>>
			  /Staple 2  /StapleDetails << /Type 14 /Angle 0 /Position 5 >>
			  >> setpagedevice" >> $device_tmp
			echo "@PJL SET STAPLE=RIGHT2PORT" >> $pjl_tmp
			echo "@PJL SET QTY=$copies" >> $pjl_tmp
			printf "\033&l1x" >> $pcl_tmp
			)
			;;

		2attop )
			(
			echo "<< /Collate true  /CollateDetails <</Type 6 /AlignSet true>>
			  /Staple 2  /StapleDetails << /Type 14 /Angle 0 /Position 7 >>
			  >> setpagedevice" >> $device_tmp
			echo "@PJL SET STAPLE=TOP2PORT" >> $pjl_tmp
			echo "@PJL SET QTY=$copies" >> $pjl_tmp
			printf "\033&l1x" >> $pcl_tmp
			)
			;;

		2atbottom )
			(
			echo "<< /Collate true  /CollateDetails <</Type 6 /AlignSet true>>
			  /Staple 2  /StapleDetails << /Type 14 /Angle 0 /Position 3 >>
			  >> setpagedevice" >> $device_tmp
			)
			;;

		* )
			(
			echo "<< /Staple 0 >> setpagedevice" >> $device_tmp
			echo "@PJL SET STAPLE=OFF" >> $pjl_tmp
			)
			;;

		esac

##########################
#
# Punch (Default=Off)
#
##########################

		case "$punch" in

		off )
			(
			echo "<< /Punch 0 >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=OFF" >> $pjl_tmp
			)
			;;

		2atleft|us2atleft )
			(
			echo "<< /Punch 2 /PunchDetails << /Type 4 /Position 0 /NumHoles 2 >>
				>> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=LEFTPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=US2" >> $pjl_tmp
			)
			;;

		eu2atleft )
			(
			echo "<< /Punch 2 /PunchDetails << /Type 4 /Position 0 /NumHoles 2 >>
				>> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=LEFTPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=JP2" >> $pjl_tmp
			)
			;;

		3atleft )
			(
			echo "<< /Punch 2
  			/PunchDetails << /Type 4 /Position 0 /NumHoles 3 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=LEFTPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=US3" >> $pjl_tmp
			)
			;;

		4atleft|eu4atleft )
			(
			echo "<< /Punch 2
			/PunchDetails << /Type 4 /Position 0 /NumHoles 4 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=LEFTPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=EU4" >> $pjl_tmp
			)
			;;

		neu4atleft )
			(
			echo "<< /Punch 2
			/PunchDetails << /Type 4 /Position 0 /NumHoles 4 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=LEFTPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=NEU4" >> $pjl_tmp
			)
			;;

		2atright|us2atright )
			(
			echo "<< /Punch 2
			/PunchDetails << /Type 4 /Position 2 /NumHoles 2 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=RIGHTPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=US2" >> $pjl_tmp
			)
			;;
		eu2atright )
			(
			echo "<< /Punch 2
			/PunchDetails << /Type 4 /Position 2 /NumHoles 2 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=RIGHTPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=JP2" >> $pjl_tmp
			)
			;;
		3atright )
			(
			echo "<< /Punch 2
  			/PunchDetails << /Type 4 /Position 2 /NumHoles 3 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=RIGHTPORT" >> $pjl_tmp			)
			echo "@PJL SET PUNCHHOLE=US3" >> $pjl_tmp			;;

		4atright|eu4atright )
			(
			echo "<< /Punch 2
			/PunchDetails << /Type 4 /Position 2 /NumHoles 4 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=RIGHTPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=EU4" >> $pjl_tmp
			)
			;;

		neu4atright )
			(
			echo "<< /Punch 2
			/PunchDetails << /Type 4 /Position 2 /NumHoles 4 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=RIGHTPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=NEU4" >> $pjl_tmp
			)
			;;

		2attop|us2attop )
			(
			echo "<< /Punch 2
			/PunchDetails << /Type 4 /Position 3 /NumHoles 2 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=TOPPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=US2" >> $pjl_tmp
			)
			;;

		eu2attop )
			(
			echo "<< /Punch 2
			/PunchDetails << /Type 4 /Position 3 /NumHoles 2 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=TOPPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=JP2" >> $pjl_tmp
			)
			;;

		3attop )
			(
			echo "<< /Punch 2
  			/PunchDetails << /Type 4 /Position 3 /NumHoles 3 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=TOPPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=US3" >> $pjl_tmp
			)
			;;

		4attop|eu4attop )
			(
			echo "<< /Punch 2
			/PunchDetails << /Type 4 /Position 3 /NumHoles 4 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=TOPPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=EU4" >> $pjl_tmp
			)
			;;

		neu4attop )
			(
			echo "<< /Punch 2
			/PunchDetails << /Type 4 /Position 3 /NumHoles 4 >> >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=TOPPORT" >> $pjl_tmp
			echo "@PJL SET PUNCHHOLE=NEU4" >> $pjl_tmp
			)
			;;

		2atbottom )
			(
			echo "<< /Punch 2
  			/PunchDetails << /Type 4 /Position 1 /NumHoles 2 >> >> setpagedevice" >> $device_tmp
			)
			;;

		3atbottom )
			(
			echo "<< /Punch 2
  			/PunchDetails << /Type 4 /Position 1 /NumHoles 3 >> >> setpagedevice" >> $device_tmp
			)
			;;

		4atbottom )
			(
			echo "<< /Punch 2
  			/PunchDetails << /Type 4 /Position 1 /NumHoles 4 >> >> setpagedevice" >> $device_tmp
			)
			;;
		* )
			(
			echo "<< /Punch 0 >> setpagedevice" >> $device_tmp
			echo "@PJL SET PUNCH=OFF" >> $pjl_tmp
			)
			;;

		esac

##########################
# LNX_TUB_E
#
# Print the file
#
##########################

for i in $*
do

##########################
#
# Auto-detect input file type here
#
# If is_PS=1, input file is PostScript
# If is_TXT=1, input file is text
# else, input file is PCL/PJL
# is_PS is overwritten, if user specified
#	input file type with "-o text" or "-o ps" option
#
##########################

if [ -n "$PS" ]
then
	is_PS=1
	is_TXT=0
elif [ -n "$TXT" ]
then
	is_TXT=1
	is_PS=0
elif [ -n "$PCL" ]
then
	is_PS=0;
	is_TXT=0;
else

	OS_NAME=`uname -s`

	case $OS_NAME in
	SunOS)
		is_PS=`file $i | grep -c PostScript`
		;;
	HP-UX)
		is_PS=`file $i | grep  -c postscript`
		;;
	*)
		is_PS=`file $i | grep -c PostScript`
		;;
	esac
		file $i | egrep -i 'ASCII|text|script' > /dev/null
		is_TXT=`expr "$?" = 0`
fi

if [ "$is_PS" -eq 1 ]
then

	##########################
	#
	# Check if the input file has %%EndSetup string in it
	#
	##########################

	is_DSC=`cat $i | grep -c "%EndSetup"`

	##########################
	#
	# Check if is_DSC variable is empty
	#
	##########################

	case $is_DSC in

	1)

		if grep '^setup' $i > /dev/null
		then
			csplit -f $ps_tmp $i "/^setup/"
		else
			csplit -f $ps_tmp $i "/%%EndSetup/"
		fi
		cat $device_tmp >> $ps_tmp"00"
		cat $ps_tmp"00" $ps_tmp"01" > $prtout_tmp

		;;
	*)
		echo "%!PS-Adobe-3.0" > $prtout_tmp
		echo "%%BeginSetup" >> $prtout_tmp
		cat $device_tmp >> $prtout_tmp
		echo "%%EndSetup" >> $prtout_tmp
		cat $i >> $prtout_tmp
		;;
	esac

elif [ "$is_TXT" -eq 1 ]
then

	##########################
	#
	# If text file, apply a filter to remove stair case effect
	#
	##########################

	printf "\033%%-12345X" > $prtout_tmp

	echo "@PJL SET JOB NAME=\"$title\"" >> $prtout_tmp

	cat $pjl_tmp >> $prtout_tmp

	echo "@PJL ENTER LANGUAGE=PCL" >> $prtout_tmp

	printf "\033E" >> $prtout_tmp

	cat $pcl_tmp >> $prtout_tmp; echo >> $prtout_tmp

	cat $i | awk '{print $0, "\r"}' >> $prtout_tmp

	printf "\033%%-12345X" >> $prtout_tmp

else

	##########################
	#
	# If PCL file, send to print directly
	#
	##########################

	cat $i > $prtout_tmp

fi

##########################
#
# Loop for printing
#
##########################

cat $prtout_tmp | lp -d $REMOTE_PRINTER

done

##########################
#
# Remove temporary files if DEBUG=empty
#
##########################

if test -z "$DEBUG"
then
	if test -f "$device_tmp"
	then
		/usr/bin/rm $device_tmp
	fi

	if test -f "$prtout_tmp"
	then
		/usr/bin/rm $prtout_tmp
	fi

	if test -f $ps_tmp"00"
	then
		/usr/bin/rm $ps_tmp"00"
	fi

	if test -f $ps_tmp"01"
	then
		/usr/bin/rm $ps_tmp"01"
	fi

	if test -f $pjl_tmp
	then
		/usr/bin/rm $pjl_tmp
	fi

	if test -f $pcl_tmp
	then
		/usr/bin/rm $pcl_tmp
	fi

fi

exit_code=0 exit 0
