#!/bin/sh
#
#   This script file makes a new TeX PK font, because one wasn't found.
#
#   It must echo the name of the generated PK file (and nothing else) to
#   standard output or to the designated file descriptor.
#   Yes, this is different from the original dvips.
#
#   Parameters are:
#
#   name dpi bdpi magnification [mode [destdir [redirect]]]
#
#   `name'          is the name of the font, such as `cmr10'.
#   `dpi'           is the resolution the font is needed at.
#   `bdpi'          is the base resolution, useful for figuring out the mode to
#                   make the font in.
#   `magnification' is a string to pass to MF as the magnification.
#   `mode'          (if supplied) is the mode to use.  If it's `default,'
#                   then we guess.
#   `destdir'       (if supplied) is the absolute directory name to use.
#   `redirect'      (if supplied) is a string of the form '>&n', where n is the
#                   number of the file descriptor which is to receive,
#                   instead of stdout, the name of the newly created pk file.
#
#   Note that this file must execute Metafont, and then gftopk,
#   and place the result in the correct location for the PostScript
#   driver to find it subsequently.  If this doesn't work, it will
#   be evident because this file will be invoked over and over again.
#
#   Of course, it needs to be set up for your site.
#
TEXDIR=/usr/lib/tex
LOCALDIR=/LocalLibrary/Fonts/TeXFonts
DESTDIR=$LOCALDIR/pk
#
# TEMPDIR needs to be unique for each process because of the possibility
# of simultaneous processes running this script.
#
if test "$TMPDIR" = ""
then
   TEMPDIR=/tmp/mtpk.$$
else
   TEMPDIR=$TMPDIR/mtpk.$$
fi
NAME=$1
DPI=$2
BDPI=$3
MAG=$4
MODE=$5
#
#   Prevent display under the X Window System.  Except it doesn't always work;
#   some sh'ells don't seem to understand unset.  There are also some
#   versions of METAFONT that don't work if the DISPLAY isn't set and
#   the term type is set to xterm.
#
# unset DISPLAY
umask 0

if test "$MODE" = ""
then
   if test $BDPI = 300
   then
      MODE=imagen
   elif test $BDPI = 200
   then
      MODE=FAX
   elif test $BDPI = 360
   then
      MODE=nextII
   elif test $BDPI = 400
   then
      MODE=nexthi
   elif test $BDPI = 100
   then
      MODE=nextscreen
   elif test $BDPI = 72
   then
      MODE=seventwo
   elif test $BDPI = 635
   then
      MODE=linolo
   elif test $BDPI = 1270
   then
      MODE=linohi
   elif test $BDPI = 2540
   then
      MODE=linosuper
   else
      echo "I don't know the mode for $BDPI" >&2
      echo "Have your system admin update MakeTeXPK" >&2
      exit 1
   fi
fi

#  Something like the following is useful at some sites.
# DESTDIR=/usr/local/lib/tex/fonts/pk.$MODE
GFNAME=$NAME.$DPI'gf'
PKNAME=$NAME.$DPI'pk'

if test "$6" != ""
then
   DESTDIR="$6"
fi

if test ! -d $DESTDIR
then
   mkdir $DESTDIR
   chmod 777 $DESTDIR
fi

REDIRECT=
if test -n "$7"; then
  REDIRECT=`echo "$7" | sed 's/^>&//'`
  if test `(cat /dev/null >&$REDIRECT) 2>&1 | wc -l` -ne 0; then
    echo "$0: argument '$7' ignored - bad file number" >&2
    REDIRECT=
  fi
fi


# added by gwb, to allow searching in current dir before cd'ing
if test "$MFINPUTS" != ""
then
   MFINPUTS=$MFINPUTS:`pwd`; export MFINPUTS
fi


# Beginning of main function definition.
generate()
{

mkdir $TEMPDIR
cd $TEMPDIR

if test -r $DESTDIR/$PKNAME
then
   echo "$DESTDIR/$PKNAME already exists!"
   showname $DESTDIR/$PKNAME
   exit 0
fi

# check also in the standard place

if test -r $TEXDIR/fonts/pk/$PKNAME
then
   echo $TEXDIR/fonts/pk/$PKNAME already exists!
   showname $TEXDIR/fonts/pk/$PKNAME
   exit 0
fi

if gsftopk -t $NAME
  then

    gsftopk $NAME $DPI || exit 1

  else

    unset DISPLAY
    echo "mf \"\\mode:=$MODE; mag:=$MAG; scrollmode; input $NAME\" </dev/null"
    mf "\mode:=$MODE; mag:=$MAG; scrollmode; input $NAME" </dev/null
    if test ! -r $GFNAME
    then
       echo "Metafont failed for some reason on $GFNAME"
       exit 1
    fi

    gftopk -v ./$GFNAME ./$PKNAME

fi

# Install the PK file carefully, since others may be doing the same
# as us simultaneously.

mv $PKNAME $DESTDIR/pktmp.$$
cd $DESTDIR
mv pktmp.$$ $PKNAME
chmod a+r $PKNAME
showname $DESTDIR/$PKNAME

}
# end of main function definition


if test -z "$REDIRECT"; then

  showname()
  {
    echo "$@" > $TEMPDIR/mtout.$$
  }

  # Clean up on normal or abnormal exit.
  trap 'cd /; test -f $TEMPDIR/mtout.$$ && cat $TEMPDIR/mtout.$$; rm -rf $TEMPDIR; trap "" 0; exit 0' 0 1 2 15

  (generate) >&2

else

  showname()
  {
    echo "$@" >&$REDIRECT
  }

  # Clean up on normal or abnormal exit.
  trap 'cd /; rm -rf $TEMPDIR; trap "" 0; exit 0' 0 1 2 15

  generate

fi
