#!/bin/sh # # dvipdft, completely rewtitten by Thomas Esser for teTeX after an # original script by Mark A. Wicks # # Thomas Esser. Public Domain. # # This script makes a first (fast) run with dvipdfm, then calls gs on # the resulting pdf file to get the thumbnails and finally calls dvipdfm. test -f /bin/sh5 && test -z "$RUNNING_SH5" \ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; } unset RUNNING_SH5 test -f /bin/bsh && test -z "$RUNNING_BSH" \ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; } unset RUNNING_BSH # hack around a bug in zsh: test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' progname=dvipdft version=1111942378 # seconds since `00:00:00 1970-01-01 UTC' # date '+%s' (with GNU date) help="Usage: $progname [options] dvifile $progname --help $progname --version" tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$ quoteit() { echo "x$1" | sed "s@.@@; s@'@'\\\\''@; s@^@'@; s@\$@'@" } # process args 1 to (n-1) and scan for a -o argument keep a properly # quoted backup of the options, so that they can be restored later unset s outfile while test $# -gt 1; do case $1 in -o) outfile=$2;; esac s="$s${s+ }"`quoteit "$1"` shift done # check for last argument case $1 in --help) echo "$help" exit 0 ;; --version) echo "$progname version $version by Thomas Esser" exit 0 ;; "") echo "$help" exit 1 ;; esac # args 1 to (n-1) are gone, last one must be the dvifile dvifile=$1 # outfile comes from -o argument, else it is derived from the input file test -n "$outfile" \ || outfile=`echo "$dvifile" | sed 's@.*/@@; s@\.dvi$@@; s@$@.pdf@'` # outBase is part of the thumbname files just as dvipdfm expects them: outBase=`echo "$outfile" | sed 's@\.pdf$@@'` # restore args 1 to (n-1): eval set x "$s"; shift # Run dvipdfm with the fastest options for the first pass echo "$progname: running dvipdfm $@ -e -z0 $dvifile" >&2 dvipdfm ${1+"$@"} -e -z0 "$dvifile" || { echo "$progname: dvipdfm failed." >&2 exit 1 } # before we create the tmpdir, set trap for cleanup trap ' rm -rf $tmpdir exit 1 ' 1 2 3 7 13 15 mkdir "$tmpdir" || { echo "$progname: failed to create temp directory." >&2 exit 1 } # if outBase contains a /, we might need to create a directory case $outBase in */*) fq=`echo "$tmpdir/$outBase" | sed 's@//@/@g; s@/[^/]*$@@'` test -d "$fq" || mkdir -p "$fq" || { echo "$progname: failed to create temp thumbnail directory." >&2 rm -rf $tmpdir exit 1 } ;; esac # run gs echo "$progname: running gs" >&2 gs -r10 -dNOPAUSE -dBATCH -sDEVICE=png256 \ -sOutputFile="$tmpdir/$outBase.%d" "$outfile" || { echo "$progname: gs failed." >&2 rm -rf $tmpdir exit 1 } # run dvipdfm with the users specified options for the last pass echo "$progname: running dvipdfm -dt $@ $dvifile" >&2 TMP=$tmpdir dvipdfm -dt ${1+"$@"} "$dvifile" || { echo "$progname: dvipdfm failed." >&2 rm -rf $tmpdir exit 1 } # nothing failed, so cleanup and report success to caller rm -rf $tmpdir exit 0