#! /bin/csh -f
#
# Usage: TEX [-flags ...] filename
#
# The various flags are described below, but only one filename should
# be given; stdin is not used. File types are indicated by the filename
# suffix. Input files may have one of the following suffixes:
#	.tex -- a file with tex commands, equations.
#	.dvi -- device independent format.
#	.ver -- output of verser1 (for the varian or AED)
#	.imp -- output of dvi-imagen (or dviimp)
# Anything else is assumed to be in .tex format.
# If TEX sees a .dvi, .ver, or .imp suffix, it will skip ahead to the right
# point in the processing sequence. Specifically,
#	texeqn	accepts .tex, outputs .tex
#	tex	accepts .tex, outputs .dvi and .log
#	latex	accepts .tex, outputs .dvi and .log
#	verser1	accepts .dvi, outputs .ver (for the varian or AED, not on hanuma).
#	lpr	accepts .ver, outputs raster
#	ipr	accepts	.imp, outputs raster
#
# Flags:
# -latex uses LaTeX.
# -log	 saves a log file from the tex run in filename.log.
# -d	 quits once the .dvi file has been made.
# -x	 makes two passes on the (latex) input, so cross-references
#	 are resolved.
# -v	 output device is the varian (imagen is the default)
# -q	 quits once the .imp file has been made if the imagen is the target printer
#	 or after the .ver file	(i.e. after verser1 stage) if the AED or the varian
#	 is the target printer.
# -eqn	 strips out the equations with texeqn and typeset them.
#
# Authors: Kamal Al-Yahya, Jeff Thorson, and Chuck Sword, Stanfor University
#
umask 0
onintr removal
set name=() host=()
set destdir = /usr/local
set tmp = TEX$$
set device = imagen
set st = 0
unset latex x d q eqn log

if ($#argv == 0) then
	echo "usage: TEX [-latex] [-eqn] [-log] [-d] [-q] [-x] filename"
	exit(-1)
endif

while ($#argv > 0 && !($?inf))
	switch ($argv[1])
		case -latex:
			set latex
			breaksw

		case -x:
			set x
			breaksw

		case -q:
			set q
			breaksw

		case -d:
			set d
			breaksw

		case -v:
			set device = varian
			breaksw

		case -eqn:
			set eqn
			breaksw

		case -log:
			set log
			breaksw

		case -*:
			echo unknown flag $argv[1], ignored
			breaksw
                default:
			set inf = $argv[1]
			if !(-e $inf) then

#  filename not found, try with .tex ending

				if !(-e $inf.tex) then 
					echo $0 'cannot find file' $inf.
					exit(-1)
				else
					set inf = ($inf.tex)
				endif
			endif
			breaksw
		endsw
	shift argv
end

set name = $inf:t
set sname = $name:r
set name = $cwd/$name
set suffix = $name:e

if ($suffix == dvi) then
	echo TEX: starting with .dvi file
	set name = $name:r
	set dvifile = $inf
	goto dvi
endif

if ($suffix == ver) then
	echo TEX: starting with .ver file
	set name = $name:r
	set verfile = $inf
	goto ver
endif

if ($suffix == imp) then
	echo TEX: starting with .imp file
	set name = $name:r
	set impfile = $inf
	goto imp
endif

if ($suffix == tex || $suffix == eqn) then
	set name = $name:r
endif

echo "\batchmode" > $tmp.tex

if ($?eqn) then
	$destdir/texeqn < $inf >> $tmp.tex
else
	cat $inf >> $tmp.tex
endif

echo "\bye" >> $tmp.tex

# Choose tex or latex

if ($?latex) then
	if (-e $name.aux) then
		cp $name.aux $tmp.aux
	endif
	$destdir/latex $tmp:t
	if ($status != 0) then
		goto oops
	else
		if (-e $tmp.aux) then
			cp $tmp.aux $name.aux
		endif
	endif

	if ($?x) then
		echo "Starting second pass"
		$destdir/latex $tmp
		if ($status != 0) then
			goto oops
		endif
		if (-e $tmp.aux) then
			cp $tmp.aux $name.aux
		endif
	endif

else	$destdir/tex $tmp
	if ($status != 0) then
oops:
		echo TEX could not process your file.
		echo Error messages are in $name.log
		mv -f $tmp.log $name.log
		set st = -1
		goto removal
	endif
endif

if ($?log) then
	mv -f $tmp.log $name.log
	if (-e $tmp.aux) then
		mv -f $tmp.aux $name.aux
	endif
endif

set dvifile = $tmp.dvi

if ($?d) then
	mv -f $dvifile $name.dvi
	goto removal
endif

dvi:

if($device == imagen) then
	$destdir/dvi-imagen -s $dvifile > $tmp.imp
	if ($?q) then
		mv -f $tmp.imp $name.imp
		goto removal
	endif
	set impfile = $tmp.imp
imp:
	(echo -n \@document\(owner \"$user\", site \"$host\", spooldate \
	\"`date`\", language \"imPress\", jobheader off, \
	jamresistance on\) ; cat $impfile ) | $destdir/ipr
	goto removal
endif

if($device == varian) then
	$destdir/verser1 < $dvifile > $tmp.ver
	if ($status != 0) then
		echo TEX bombed out on verser1.
		set st = -1
		goto removal
	endif
	set verfile = $tmp.ver

	if ($?q) then
		mv -f $verfile $name.ver
		goto removal
	endif
ver:
	lpr -d -s -Pvarian $tmp.ver
endif

removal:
/bin/rm -f $tmp.tex $tmp.log $tmp.dvi $tmp.ver $tmp.imp $tmp.aux
exit($st)