#!/usr/local/plan9/bin/rc
if (! ~ $DEBUG '') flag x +
REVFLAG=''
if (~ $LPCLASS *reverse*) {
	switch ($REVERSE) {
	case '';
		REVFLAG=1
	case 1;
		REVFLAG=''
	}
}
if (! ~ $REVFLAG '')
	postreverse

if (~ $NOHEAD '') {
	DATE=`{date}
	face='FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
	facedom=`{awk '{ if(match("'$LPMACHID'", $1)) {print $2; exit}}' $PLAN9/face/.machinelist}
	if (~ $#facedom 0) facedom=$LPMACHID

	facefile=`{awk '/^'$facedom'\/'$LPUSERID' /{print $2}' $PLAN9/face/48x48x4/.dict}
	facedepth=4

	if (~ $#facefile 0) {
		facefile=`{awk '/^'$facedom'\/'$LPUSERID' /{print $2}' $PLAN9/face/48x48x2/.dict}
		facedepth=2
	}

	if (~ $#facefile 0) {
		facefile=`{awk '/^'$facedom'\/'$LPUSERID' /{print $2}' $PLAN9/face/48x48x1/.dict}
		facedepth=1
	}

	if (~ $#facefile 0) {facefile=u/unknown.1; facedepth=1}
	facefile=$PLAN9/face/48x48x$facedepth/$facefile

	if (! ~ $#facefile 0 1)
		facefile=$facefile(1)

	if (~ $#facefile 0 || ! test -f $facefile ) {facefile=$PLAN9/face/48x48x2/u/unknown.1; facedepth=2}
	if (test -r $facefile ) {
		switch($facedepth){
		case 1 2
			face=`{cat $facefile |
				sed -e 's/0x//g' -e 's/, *//g' |
				tr 0123456789abcdef fedcba9876543210 };
		case 4
			face=`{iconv -u -c k4 $facefile |
				dd -bs 60 -skip 1 >[2]/dev/null |
				xd -b | sed 's/^[^ ]+ //;s/ //g'  }
		}
	}
}

# We have to make sure the face information is set before rc sees the HERE file
# so the cat has to be in a separate if statement.  This is an rc bug.
if (~ $NOHEAD '') cat <<EOF
%!PS-Adobe-2.0	div 112 page header - research!pg
/banner {
	/saveobj save def
	erasepage initgraphics
	/#copies 1 def
	/inch {72 mul} bind def
	/pageborder {
		25 747 moveto
		590 747 lineto
		590 25 lineto
		25 25 lineto
		closepath
		2 setlinewidth
		0 setgray
		stroke
	} def

	/topborder {
		25 773 moveto
		590 773 lineto
		590 747 lineto
		25 747 lineto
		closepath
		2 setlinewidth
		0 setgray
		stroke
	} def

	/toptext {
		120 756 moveto
		/Courier-Bold findfont 14 scalefont setfont
		($LPUSERID $DATE) show
	} def

	/prface {
		gsave
		translate rotate scale
		setgray
		48 48 $facedepth [48 0 0 -48 0 48] {<$face>} image
		grestore
	} def
EOF
if (~ $NOHEAD '') switch ($LPCLASS) {
case *hp4simx*;
	echo '
%% set the default papertray to be the lower tray for HP4siMX printers
	statusdict begin defaultpapertray end 1 ne {
		statusdict begin
			1 setdefaultpapertray
		end
	} if'
}
if (~ $NOHEAD '') cat <<EOF
	statusdict /setduplexmode known {statusdict begin false setduplexmode end} if
	statusdict begin /manualfeed false def end
	pageborder
	topborder
	toptext
	0 14 14 0 94 752 prface
	.3 180 180 -90 3.0 inch 10.2 inch prface
	showpage
	saveobj
	restore
} bind def
banner
EOF

if (~ $REVFLAG '') cat
exit ''
