#! /bin/csh -f
# 
# 
# rcsid('$Author: pleuk $',
# 	'$Date: 1993/05/17 15:05:40 $',
# 	'$Revision: 1.0 $',
# 	'$Source: /usr/export/home/projects/ltg2/Pleuk/Distribution/Pleuk/PS/RCS/hardcopy,v $',
# 	'$State: Exp $').
# 
# $Log: hardcopy,v $
# Revision 1.0  1993/05/17  15:05:40  pleuk
# Version 1.00beta from Jo
#
# Revision 1.0  1993/05/04  10:30:38  pleuk
# Version 1.00beta from Jo
#
# Revision 0.11  1992/04/16  14:04:23  pleuk
# revisions from SLE - April 1992
#
# Revision 0.10  1992/01/24  12:35:48  pleuk
# revisions from Jo - January 1992
#
# Revision 0.9  1991/10/21  12:45:37  pleuk
# revisions up to SLE visit 10 October 1991
#
# Revision 0.8  1991/09/25  13:08:54  pleuk
# revisions up to SLE tape 27 September 1991
#
# Revision 0.7  1991/09/21  02:11:57  pleuk
# version for Jo
#
# Revision 0.6  1991/09/02  13:11:25  pleuk
# revisions up to SLE visit 20 August 1991
#
# Revision 0.5  1991/07/15  10:52:33  pleuk
# Changes following SLE visit 7/91
#
# Revision 0.1  1991/03/06  13:53:05  pleuk
# *** empty log message ***
#
# 
# 
# Usage: hardcopy [-l] [-n] [-s scale] [-c caption] [-nocmr] [-p] [file]
# Add appropriate wrappers to postscript given in file
# The options run as follows
# -l landscape mode rather than portrait
# -n don't include the file ~/.ghostscript
# -s scale the picture is scaled by positive real scale
# -c caption use an alternative caption
# -nocmr don't include a version of Computer Modern Roman font 
# -p send to standard output rather than to a printer

# Thu Jul 23 11:35:50 1992 JC
# Altered to deal with Encapsulated PostScript.

# Tue Jul 28 13:24:31 1992 JC
# Added possible environment variable, PLEUKPRINTHOST
# to specify a remote host to do the print spooling.

# Thu Jan 28 15:45:53 1993 JC
# Altered error reporting so that messages are sent to /dev/tty

# Wed Mar 24 13:49:10 1993 JC
# Altered handling of inferior ghostscript process so as to catch
# errors. 
# Added label badexit to make certain we get rid of temp. files. 

# The following value /usr/chrisbr/Pleuk/PS supplied during the make 

set PLEUK_PS=/usr/chrisbr/Pleuk/PS

set PLEUKTOP=${PLEUK_PS}/epsheader.ps
set PLEUKCMR=${PLEUK_PS}/epscmr.ps
set PLEUKCODE=${PLEUK_PS}/epsdraw_avm.ps
set PLEUKTRAILER=${PLEUK_PS}/epstrailer.ps
set PLEUKPSMETRICS=${PLEUK_PS}/epsmetrics.ps
set PLEUKNONINT=${PLEUK_PS}/noninteract.ps
set PRINT=lpr

set landscapefile=${PLEUK_PS}/epsportrait.ps
set SCALE=1

set mygsfile = ""
if (-e ${HOME}/.ghostscript)	set mygsfile = ${HOME}/.ghostscript

if ${?PLEUKPRINTHOST} then
    set PRINT = "rsh ${PLEUKPRINTHOST} lpr"
endif

set COUNT = 0
while ($#argv > $COUNT )
@ COUNT++
switch ($argv[$COUNT])
    case -n:
	set mygsfile = ""
	breaksw
    case -l:
	set landscapefile=${PLEUK_PS}/epslandscape.ps
	breaksw
    case -s:
	if ($COUNT == $#argv) goto usage
    	@ COUNT++
	set SCALE = $argv[$COUNT]
 	breaksw
    case -c:
	if ($COUNT == $#argv) goto usage
    	@ COUNT++
	set CAPTION = ( $argv[$COUNT] )
 	breaksw
    case -nocmr:
	set PLEUKCMR = ""
	breaksw
    case -p:
	set PRINT = cat
	set OUTPUTTOFILE = ""
	breaksw
    default:
	if ($COUNT != $#argv) goto usage
	set psfile = $argv[$COUNT]
endsw

end

if ( ${?psfile}) then
	if ( ! -e $psfile) goto badfile
	else
	set psfile = ""		# use standard in
endif

# Argument processing finished
# Set up temporary and output files

set PSINFILE=/tmp/pspleuk$$
set EPSTMPFILE=/tmp/epspleuka$$

# squirrel away a copy of the input
# We prepend stuff like scale because that affects the calculations of
# boundingbox etc. 
cat $psfile > $PSINFILE
if ($?CAPTION) then
    echo \($CAPTION\) set_caption >> $PSINFILE
endif

#build up the output

set STATE=prepleukstate

cat $PLEUKTOP > $EPSTMPFILE
echo '%%For: ' $USER >> $EPSTMPFILE
#gs -q -dNODISPLAY -dNOPAUSE -dfs_scale_factor=$SCALE\
gs -dNODISPLAY -dNOPAUSE -dfs_scale_factor=$SCALE\
	$PLEUKNONINT $PLEUKCODE $PLEUKCMR $landscapefile \
	$PSINFILE $PLEUKPSMETRICS >> $EPSTMPFILE 

set gsstatus = $status
if ($gsstatus > 0) goto gsfails

if (! {$?OUTPUTTOFILE}) then
    echo /$STATE save def  >>$EPSTMPFILE
endif
echo '%%BeginProlog' >>$EPSTMPFILE
cat $PLEUKNONINT >> $EPSTMPFILE
cat $PLEUKCODE >> $EPSTMPFILE
echo '%%EndProlog' >> $EPSTMPFILE
echo '%%BeginSetup' >> $EPSTMPFILE
if ("${PLEUKCMR}X" != "X") then
    cat $PLEUKCMR >> $EPSTMPFILE
endif
cat $landscapefile >> $EPSTMPFILE
echo /fs_scale_factor $SCALE def >> $EPSTMPFILE
echo /xorigin xorigin fs_scale_factor div  def >> $EPSTMPFILE
echo /yorigin yorigin fs_scale_factor div  def >> $EPSTMPFILE
echo '%%EndSetup'>> $EPSTMPFILE
cat $PSINFILE >> $EPSTMPFILE
cat $PLEUKTRAILER >> $EPSTMPFILE
if (! {$?OUTPUTTOFILE}) then
    echo $STATE restore  >>$EPSTMPFILE
endif
#cat $EPSTMPFILE | ${PRINT}

#rm -f $EPSTMPFILE $PSINFILE 
exit 0

usage:
	echo usage: $0 '[-l] [-s scale] [-c caption] [file]' > /dev/tty
	goto badexit

badfile:
	echo $0 no such file:  $psfile > /dev/tty
	goto badexit	

gsfails:
	if ("X$psfile" == "X") then
		set OUTFILE = "standard input"
	else
		set OUTFILE = $psfile
	endif
	if ($gsstatus == 2) then	# GS has reported error 
					# incorrect # of elements on stack
	else
	  if ($gsstatus == 1) then
		echo Object to be drawn is not in correct format > /dev/tty
	  endif
	endif
	echo ${0}: Error processing $OUTFILE > /dev/tty
	goto badexit

badexit: 
	rm -f $EPSTMPFILE $PSINFILE 
	exit 1
