summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ps2epsi')
-rwxr-xr-xlib/ps2epsi103
1 files changed, 16 insertions, 87 deletions
diff --git a/lib/ps2epsi b/lib/ps2epsi
index d992180f..7590cb5a 100755
--- a/lib/ps2epsi
+++ b/lib/ps2epsi
@@ -1,30 +1,22 @@
#!/bin/sh
+# Revised in 2020 to use the eps2write device (within ps2epsi.ps)
+
# This definition is changed on install to match the
-# executable name set in the makefile
+# executable name set in the makefile, but we check a couple of other
+# places (bin/ sibling to $LIBDIR and 'gs' on the $PATH)
GS_EXECUTABLE=gs
-gs="`dirname \"$0\"`/$GS_EXECUTABLE"
+LIBDIR=`dirname $0`
+gs="$LIBDIR/$GS_EXECUTABLE"
if test ! -x "$gs"; then
- gs="$GS_EXECUTABLE"
-fi
-GS_EXECUTABLE="$gs"
-
-# try to create a temporary file securely
-if test -z "$TMPDIR"; then
- TMPDIR=/tmp
-fi
-if which mktemp >/dev/null 2>/dev/null; then
- tmpfile="`mktemp $TMPDIR/ps2epsi.XXXXXX`"
-else
- tmpdir=$TMPDIR/ps2epsi.$$
- (umask 077 && mkdir "$tmpdir")
- if test ! -d "$tmpdir"; then
- echo "failed: could not create temporary file"
- exit 1
+ # Might be executing lib/ps2epsi with bin/ as sibling to lib/
+ gs="$LIBDIR/../bin/$GS_EXECUTABLE"
+ if test ! -x "$gs"; then
+ # Fallback to using any 'gs' on the path
+ gs="$GS_EXECUTABLE"
fi
- tmpfile="$tmpdir"/ps2epsi$$
fi
-trap "rm -rf \"$tmpfile\"" 0 1 2 3 7 13 15
+GS_EXECUTABLE="$gs"
export outfile
@@ -35,8 +27,7 @@ fi
infile=$1;
-if [ $# -eq 1 ]
-then
+if [ $# -eq 1 ]; then
case "${infile}" in
*.ps) base=`basename "${infile}" .ps` ;;
*.cps) base=`basename "${infile}" .cps` ;;
@@ -49,70 +40,8 @@ else
outfile=$2
fi
-"$GS_EXECUTABLE" -q -dBATCH -dNOPAUSE -P- -sDEVICE=bbox -sOutputFile=/dev/null "${infile}" 2>${outfile}
-
-ls -l "${infile}" |
-awk 'F==1 {
- cd="%%CreationDate: " $6 " " $7 " " $8;
- t="%%Title: " $9;
- f="%%For:" U " " $3;
- c="%%Creator: Ghostscript ps2epsi from " $9;
- next;
- }
- /^%!/ {next;}
- /^%%Title:/ {t=$0; next;}
- /^%%Creator:/ {c=$0; next;}
- /^%%CreationDate:/ {cd=$0; next;}
- /^%%For:/ {f=$0; next;}
- !/^%/ {
- print "/ps2edict 30 dict def";
- print "ps2edict begin";
- print "/epsititle (" t "\\n) def";
- print "/epsicreator (" c "\\n) def";
- print "/epsicrdt (" cd "\\n) def";
- print "/epsifor (" f "\\n) def";
- exit(0);
- }
- ' U="$USERNAME$LOGNAME" F=1 - F=2 "${infile}" >"$tmpfile"
-
-ls -l "${outfile}" |
-awk 'F==1 {
- b="%%BoundingBox: 0 0 0 0\\n";
- }
- /^%%BoundingBox:/ {b=$0; next;}
- /^%%HiResBoundingBox:/ {
- hb=$0;
- print "ps2edict where {pop} {/ps2edict 30 dict def} ifelse";
- print "ps2edict begin";
- print "/BBoxString (" b "\\n) def";
- print "/HiresBBoxString (" hb "\\n) def";
- print "end";
- exit(0);
- }
- ' F=1 - F=2 "${outfile}" >>"$tmpfile"
-
-"$GS_EXECUTABLE" -q -dNOPAUSE -P- -r72 -sDEVICE=bit -sOutputFile=/dev/null "$tmpfile" ps2epsi.ps "$tmpfile" <"${infile}" 1>&2
-rm -f "$tmpfile"
-rm -rf "$tmpdir"
-
-(
-cat << BEGINEPS
-save countdictstack mark newpath /showpage {} def /setpagedevice /pop load def
-%%EndProlog
-%%Page 1 1
-BEGINEPS
-
-cat "${infile}" |
-LC_ALL=C \
-sed -e '/^%%BeginPreview:/,/^%%EndPreview[^!-\~]*$/d' -e '/^%!PS-Adobe/d'\
- -e '/^%%[A-Za-z][A-Za-z]*[^!-\~]*$/d' -e '/^%%[A-Za-z][A-Za-z]*: /d'
-
-cat << ENDEPS
-%%Trailer
-cleartomark countdictstack exch sub { end } repeat restore
-%%EOF
-ENDEPS
-
-) >> "${outfile}"
+# Note, we expect 'ps2epsi.ps' to be in the same directory as 'ps2epsi'
+"$GS_EXECUTABLE" -q -dNOOUTERSAVE -dNODISPLAY -dLastPage=1 -sOutputFile="${outfile}" \
+ --permit-file-all="${infile}" -- "$LIBDIR/ps2epsi.ps" "${infile}" 1>&2
exit 0