#!/bin/sh
#
#   This script file makes a new TeX PK font, because one wasn't
#   found.  Parameters are:
#
#   name dpi bdpi magnification [[mode] subdir]
#
#   `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.
#
#   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 MF will be invoked over and over again.
#
#   If no METAFONT source is available for `name' MakeTeXPK tries to 
#   find a type1 font and if such a font is found ps2pk will be used
#   to render it. 
#   If the fontname is available in $TEXCONFIG/psfonts.map it will use
#   the real PostScript name found for `name' otherwise it will use 
#   `name' straight away.
#
#   Font sources can be put into a single directory or in different
#   subdirectories from $MFFACES and $T1FACES.
#
#   Of course, it needs to be set up for your site.
#

# Base directories where we have installed TeX and its programs
TEXDIR=/usr/local/lib/tex
TEXBINDIR=$TEX/bin

# we explicity set the PATH
PATH=/bin:/usr/bin:$TEXBINDIR:/usr/ucb; export PATH

# Provide a usage message to refresh human memories.
if test \( $# -lt 4 \) -o \( $# -gt 6 \)
then 
   echo "Usage: `basename $0` fontname dpi bdpi magnification [[mode] subdir]"
   exit 1
fi

# Where MakeTeXPK will install its fonts (everybody seems to choose
# something different)
DESTDIR=$TEXDIR/extra-fonts

# Where we look for METAFONT sources
MFSUBDIR=typefaces
MFFACES=/usr/local/lib/mf/$MFSUBDIR

# Where we look for Type1 fonts and AFM files (do you know a better place?)
T1SUBDIR=type1faces
T1FACES=/usr/local/lib/mf/$T1SUBDIR

# Where we look for dvips stuff
TEXCONFIG=$TEXDIR/ps

# What encoding scheme do we use for Type1 text fonts?
# DEF_TEXT_ENCODING=""		(default: AdobeStandardEncoding)
# DEF_TEXT_ENCODING="-eEC.enc"  (Extended Computer Modern!)
DEF_TEXT_ENCODING=""

#
# 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
if test $# -ge 5 ;then MODE=$5 ;fi
if test $# -ge 6 ;then SUBDIR=$6 ;fi

umask 0

if test "$MODE" = ""
then
   if test $BDPI = 300
   then
      MODE=imagen
   elif test $BDPI = 400
   then
      MODE=nexthi
   elif test $BDPI = 100
   then
      MODE=nextscreen
   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"
      echo "Have your system admin update MakeTeXPK"
      exit 1
   fi
fi

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

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

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

if test "$SUBDIR" != ""
then
   DESTDIR=$DESTDIR"$SUBDIR"
   if test ! -d $DESTDIR
   then
      mkdir $DESTDIR
   fi
fi

mkdir $TEMPDIR
cd $TEMPDIR

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

# check also in the standard place

if test "$SUBDIR" = ""
then
   if test -r $TEXDIR/fonts/pk/$PKNAME
   then
      echo $TEXDIR/fonts/pk/$PKNAME already exists!
      exit 0
   fi
else
   if test -r $TEXDIR/fonts/pk/$SUBDIR"$PKNAME"
   then
      echo $TEXDIR/fonts/pk/$SUBDIR"$PKNAME" already exists!
      exit 0
   fi
fi

# Do we have a METAFONT source for this typeface?
for TF in `find $MFFACES -type f -name "*$NAME.mf" -print`
do FACE=`expr $TF : "$MFFACES/\(.*\)/$NAME.mf"`
   break
done

if test -n "$FACE"
then
   # Found a METAFONT source for $NAME
   if test "$FACE" = typefaces 
   then MFINPUTS=.:$MFFACES
   else MFINPUTS=.:$MFFACES/$FACE
   fi
   export MFINPUTS

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

   gftopk ./$GFNAME ./$PKNAME

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

   mv $PKNAME $DESTDIR/pktmp.$$
   cd $DESTDIR
   mv pktmp.$$ $PKNAME

   exit 0
fi

# Find the full PostScript name for this virtual font in
# $TEXCONFIG/psfonts.map or use NAME as its real name
if test ! -f $TEXCONFIG/psfonts.map
then
   echo "You should install file psfonts.map in $TEXCONFIG!"
   exit 0
fi
LINE=`grep "^%*$NAME[ \t]" $TEXCONFIG/psfonts.map`
if test -z "$LINE"
then # take the NAME as default name
   FULLNAME=$NAME
else
   FULLNAME=`expr "$LINE" : "^%*$NAME[ ]*\([^ ]*\)"`
   if test -z "$FULLNAME"
   then
      echo "Can't figure out real PostScript name for $NAME!"
      exit 0
   fi
   SLANT=""
   SLANTFONT=`expr "$LINE" : '^.*"\([^ ]*\) SlantFont"'`
   if test ! -z "$SLANTFONT"
   then
      SLANT="-S$SLANTFONT"
   fi
   EXTEND=""
   EXTENDFONT=`expr "$LINE" : '^.*"\([^ ]*\) ExtendFont"'`
   if test ! -z "$EXTENDFONT"
   then
      EXTEND="-E$EXTENDFONT"
   fi
fi

# Try to find the directory containing the PostScript font and the 
# basename of the type1 font so we can find the AFM-file later
for TF in `find $T1FACES -type f -name "*$FULLNAME*" -print`
do FACE=`expr $TF : "$T1FACES/\(.*\)/$FULLNAME*"`
   EXT=`expr $TF : '.*\([.].*\)$'`
   if test "$EXT" = ""
   then FNAME=`basename $TF`
   else FNAME=`basename $TF "$EXT"`
   fi
   break
done

if test -n "$FACE"
then
   # Found a Type1 source for $NAME
   if test "$FACE" = type1faces 
   then 
      T1INPUTS=.:$T1FACES
      AFM=$T1FACES/$FNAME.afm
      TYPE1=$T1FACES/$FACE/$FNAME
   else 
      T1INPUTS=.:$T1FACES/$FACE
      AFM=$T1FACES/$FACE/$FNAME.afm
      TYPE1=$T1FACES/$FACE/$FNAME
   fi
   export T1INPUTS

   # Do we have a PFB/PFA file?
   if test ! -f "$TYPE1"
   then
      if test -f "$TYPE1.pfb"
      then 
         FULLNAME=$FULLNAME.pfb
      elif test -f "$TYPE1.pfa"
      then
         FULLNAME=$FULLNAME.pfa
      else
	 echo Strange: I do not see the $TYPE1 font . . .
	 exit 0
      fi
   fi
   
   # Do we have the AFM file?
   if test ! -f "$AFM"
   then 
      echo no AFM file available for $FULLNAME
      exit 0
   fi
   
   # If we don't use default AFM encoding then we have to check
   # if we can apply this encoding (text fonts only)
   if test "$DEF_TEXT_ENCODING" != "" 
   then
      # What is encoding scheme that the AFM file uses?
      ENC=`grep '^EncodingScheme' $AFM`
      if test -z "$ENC"
      then 
         echo $AFM: Invalid AFM file!
         exit 0
      fi
      EXT_ENC=`expr "$ENC" : '^EncodingScheme[ ]*\(.*\)$'`

      case $EXT_ENC in
      AdobeS*) ENCODING=$DEF_TEXT_ENC;;
      ISO*)    ENCODING=$DEF_TEXT_ENC;;
      *)       ENCODING="";;
      esac
   fi

   # Now we are ready to render the type1 font
   echo "ps2pk -v $ENCODING -X$DPI $SLANT $EXTEND $FULLNAME $PKNAME"
   ps2pk -v $ENCODING -X$DPI $SLANT $EXTEND $FULLNAME $PKNAME 

   mv $PKNAME $DESTDIR/pktmp.$$
   cd $DESTDIR
   mv pktmp.$$ $PKNAME

   exit 0
fi

echo No font source found for $NAME
exit 0