#! /bin/bash
# Last edited on 2024-04-01 10:53:15 by stolfi

usage="$0 TMPNAME [-dpi RESOLUTION] < PSFILE > PPMFILE"

# Converts an encapsulated postscript image to a ppm image.
# The PSFILE must include %%BoundingBox line

if [[ $# -lt 1 ]]; then
  echo "bad args; usage = ${usage}" 1>&2; exit 1
fi

tmp="$1"; shift;
log=${tmp}.log

dpi=300
while [[  ( $# > 0 ) && ( "/$1" =~ /-* )  ]]; do
  if [[  ( $# > 1 ) && ( "/$1" == "/-dpi" )  ]]; then
    dpi="$2"; shift; shift;
  else
    echo "bad option ($1); usage = ${usage}" >> ${log};
    exit 1
  fi
done

if [[  $# != 0  ]]; then
  echo "bad args; usage = ${usage}" >> ${log}; exit 1
fi

pbmdir="${STOLFIHOME}/pkg/netpbm-1mar1994-1/PUB/${PLATFORM}/bin"

cat > ${tmp}.ps

bbox=( `egrep '^%%BoundingBox' ${tmp}.ps` )

if [[ ${#bbox[@]} -ne 5 ]]; then
  echo 'bad or missing "%%BoundingBox" directive' >> ${log}; exit 1
fi

wd=$(( ${bbox[4]} - ${bbox[2]} ))
ht=$(( ${bbox[5]} - ${bbox[3]} ))

mag=$(( ( ${dpi} + 71 ) / 72  ))

wdx=$(( ${wd} * ${mag} ))
htx=$(( ${ht} * ${mag} ))
dpix=$(( 72 * ${mag} ))

echo "$0 $*" >> ${log}
echo "wd = ${wd} ht = ${ht}" >> ${log}
echo "dpi = ${dpi}" >> ${log}
echo "mag = ${mag}" >> ${log}
echo "wdx = ${wdx} htx = ${htx}" >> ${log}
echo "dpix = ${dpix}" >> ${log}

gs \
    -q \
    -dNOPLATFONTS -dQUIET -dNOPAUSE \
    -sDEVICE=ppmraw \
    -r${dpix} -g${wdx}x${htx} \
    -sOutputFile=${tmp}.ppm \
    ${tmp}.ps \
  < /dev/null \
  >> ${log}

rm -f ${tmp}.ps

exit 0
