#!/usr/local/plan9/bin/rc

#
# we don't go through postscript, because to
# get to postscript, we send the pdf through gs!
# much easier to just go directly.
#

# usage: pdfgs pdffile [gsdev]

switch($#*) {
case 2
	GSDEVICE=$2
case 1
	GSDEVICE=`{echo $LPCLASS | sed 's/(.*\+)?gs!([^+]*)(\+.*)?/\2/'}
case *
	echo 'usage: pdfgs pdffile [gsdev]' >[1=2]
}

GSTMPFILE=/tmp/pdf^$pid
GSOPT=('-sDEVICE='$GSDEVICE '-sOutputFile='^$GSTMPFILE -dSAFER -dNOPAUSE -dQUIET -dBATCH -dNOPAUSE)

#
# RSC: pswrite produces weird overbars on various
# letters, most notably Times-Roman A and h, unless
# we use LanguageLevel=1.  This doesn't seem to be 
# constrained to hp4simx printers, so just use LanguageLevel 1
# all the time.
#

#if(~ $dev pswrite && ~ $LPCLASS *hp4simx*)
#	GSOPT=($GSOPT '-dLanguageLevel=1')
if(~ $GSDEVICE pswrite)
	GSOPT=($GSOPT '-dLanguageLevel=1')

if(~ $OLIST '')
	gs $GSOPT $1
if not {
	PGLIST=`{echo $OLIST | sed 's/-o//;s/,/ /g;s/	/ /g' | tr -cd '0-9 -'}
	GSPGLIST=()
	for(i in $PGLIST){
		switch($i){
		case -*
			GSPGLIST=($GSPGLIST `{seq 1 `{echo $i|tr -d '-'}})
		case *-
			# BUG assume 100 >= number of pages
			GSPGLIST=($GSPGLIST `{seq `{echo $i|tr -d '-'} 100})
		case *-*
			GSPGLIST=($GSPGLIST `{seq `{echo $i|tr '-' ' '}})
		case *
			GSPGLIST=($GSPGLIST $i)
		}
	}
	GSPGLIST=$"GSPGLIST
	echo '
		/Page null def
		/Page# 0 def
		/PDFSave null def
		/DSCPageCount 0 def
		/DoPDFPage {dup /Page# exch store pdfgetpage pdfshowpage} def
		GS_PDF_ProcSet begin
		pdfdict begin
		('^$1^') (r) file pdfopen begin
		/npage pdfpagecount def
		['^$GSPGLIST^']
		{
			dup dup
				1 ge exch npage le and 
				{ DoPDFPage }
				{ pop }
			ifelse
		} forall
	' | gs $GSOPT - >/dev/null >[2=1]
}

cat $GSTMPFILE
rm -f $GSTMPFILE
exit ''
