#!/bin/sh # $Id: dvihp,v 1.3 1996/12/03 19:53:56 karl Exp karl $ # Run dvicopy, then dvilj[k]. kb@mail.tug.org, 1994. Public domain. # Try to accept arguments a la dvips, from Thomas Esser. : ${DVILJ=dvilj4} # the dvilj variant to run : ${SPOOL=lpr} # used to print an LJ file : ${TMP=/tmp} # for the dvicopy output TMPDIR=`mktemp -d ${TMPDIR}/dvihp.XXXXXX` || { echo "cannot create secure temporary directory."; exit 1; } trap ' cd "${TMP}" test -d "$TMPDIR" && { rm -f "$TMPDIR"/*; rmdir "$TMPDIR"; } exit 0 ' 0 1 2 3 6 7 13 15 rcs_revision='$Revision: 1.3 $' version=`set - $rcs_revision; echo $2` usage="Usage: `basename $0` [OPTIONS] [DVIFILE[.dvi]]. Translate the given DVIFILE to Hewlett-Packard PCL by calling dvicopy and then \$DVILJ (dvilj4 by default). In the absence of other options, pipe the PCL to \$SPOOL (lpr by default). Options are recognized from dvips where possible: -A print odd pages -B print even pages -d # set debug bits to # (see documentation) -D # set resolution to # -f run as filter -l # don't print pages after # -m manual feed -n # print # pages -O #,# set/change paper offset to #,# mm -o s output to s instead of spooling -p # don't print pages before # -Ps pass directly to lpr -v verbose operation -x # set magnification to # Other options are passed to the dvilj program. Email bug reports to tex-k@mail.tug.org." if test $# -eq 0; then echo "`basename $0`: Missing argument(s)." >&2 echo "Try \``basename $0` --help' for more information." >&2 exit 0 fi unset infile opt output output_opt=-e verbose=false while test $# -gt 0; do case "$1" in -help|--help) echo "$usage"; exit 0;; -version|--version) echo "`basename $0` (Dviljk 2.6) $version" echo "There is NO warranty. This script is public domain." exit 0;; -A) opt="$opt -D1";; # -A => -D1 (odd pages) -B) opt="$opt -D2";; # -B -> -D2 (even pages) -d) shift; opt="$opt --D$1";; # -d => --D (debug) -d*) opt="$opt `echo $1 | sed s/d/-D/`";; -D) shift; opt="$opt -R$1";; # -D => -R (resolution) -f) infile=; output=-;; # -f (run as filter) -l) shift; opt="$opt -t$1";; # -l => -t (ending page) -l*) opt="$opt `echo $1 | sed s/l/t/`";; -m) opt="$opt -A";; # -m => -A (manual feed) -n) shift; opt="$opt -p$1";; # -n => -p (page count) -n*) opt="$opt `echo $1 | sed s/^-n/-p/`";; -o) if test $# -eq 1; then # -o (output file) # No remaining args, output to foo.lj. output=`basename $infile .dvi`.lj else shift; output="$1"; fi;; -o*) output="`echo $1 | sed 's/^-o//'`";; -O) shift; x=`echo $1 | sed 's/,.*//'` # -O => -x, -y (page offsets) y=`echo $1 | sed 's/.*,//'`; opt="$opt -x$x -y$y";; -O*) temp="`echo $1 | sed 's/^-O//'`" x=`echo $temp | sed 's/,.*//'` y=`echo $temp | sed 's/.*,//'`; opt="$opt -x$x -y$y";; -p) shift; opt="$opt -f$1";; # -p => -f (starting page) -p*) opt="$opt `echo $1 | sed s/p/f/`";; -P) shift; output=; spool_opt="-P$1";; # -Pprinter -P*) output=; spool_opt="$1";; -v) verbose=true; opt="$opt -v";; -x) shift; opt="$opt -m$1";; # -x => -m (magnification) -x*) opt="$opt `echo $1 | sed s/x/m/`";; --) shift; infile="$1"; break;; # -- => end of options -*) opt="$opt $1";; # pass other options through *) infile="$1";; esac shift done # Make sure the filenames are unique on MS-DOS vfless_dvi="$TMPDIR"/dvi$$.vf # Expand VF references. # If $infile is null, this will read standard input. # dvilj can't read from a pipe, so always write to a file. $verbose && echo "Running dvicopy $infile >$vfless_dvi" >&2 if dvicopy $infile >"$vfless_dvi"; then :; else echo "$0: dvicopy $infile failed." >&2 exit 1 fi $verbose && ls -l "$vfless_dvi" >&2 if test -z "$output"; then output=- # output to stdout # Doing this pipe means the true exit status might get lost, but it # seems worth it to avoid the temporary file. (Bad enough to have one.) maybe_spool_cmd="| $SPOOL $spool_opt" else maybe_spool_cmd= fi # Translate DVI to LJ. cmd="$DVILJ $opt $output_opt$output \"$vfless_dvi\" $maybe_spool_cmd" $verbose && echo "Running $cmd" >&2 if eval $cmd; then :; else echo "$0: $DVILJ failed." >&2 exit 2 fi