File: //usr/bin/dvipdft
#!/bin/sh
#
# dvipdft, completely rewtitten by Thomas Esser for teTeX after an
# original script by Mark A. Wicks
#
# Copyright (C) 2004 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=1084580267 # seconds since `00:00:00 1970-01-01 UTC'
# date '+%s' (with GNU date)
help="Usage: $progname [options] dvifile
$progname --help
$progname --version"
tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX`
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 "$@" -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 "$@" "$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