[comp.text.tex] PK font makefile generator

ramsdell@linus.UUCP (John D. Ramsdell) (03/01/90)

Here is an awk program that generates the makefile for PK fonts.
To install, follow the instructions in Makefile.fake.
John

#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	Makefile.fake
#	font-list.text
#	pk-maker.sh
# This archive created: Thu Mar  1 08:08:11 1990
export PATH; PATH=/bin:$PATH
if test -f 'Makefile.fake'
then
	echo shar: will not over-write existing file "'Makefile.fake'"
else
cat << \SHAR_EOF > 'Makefile.fake'
# Fake makefile.
# Installation:
# 1. Place pk-maker.sh and font-list.text in the directory
#    above the ones used to hold the fonts.
# 2. Place this file in the font directory.
# 3. Edit parameters below.
# 4. Type "make -f Makefile.fake".
# 5. The new make file knows how to make itself, 
#    so you can delete this file.

MFINPUT=/usr/local/lib/mf/inputs
DPI=300
MODE=localfont
SAVE_TFM=

Makefile:
	/bin/sh ../pk-maker.sh $(MFINPUT) $(DPI) $(MODE) $(SAVE_TFM)\
		< ../font-list.text > Makefile
SHAR_EOF
fi # end of overwriting check
if test -f 'font-list.text'
then
	echo shar: will not over-write existing file "'font-list.text'"
else
cat << \SHAR_EOF > 'font-list.text'
cmb10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmbsy10	0.0 0.5 1.0
cmbx10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmbx12	0.0 0.5 1.0
cmbx5	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmbx6	0.0 0.5 1.0
cmbx7	0.0 0.5 1.0 2.0 3.0 4.0 5.0 5/7 6/7
cmbx8	0.0 0.5 1.0
cmbx9	0.0 0.5 1.0
cmbxsl10	0.0 0.5 1.0
cmbxti10	0.0 0.5 1.0
cmcsc10	0.0 0.5 1.0 2.0 3.0 4.0 5.0 8/10 9/10
cmdunh10	0.0 0.5 1.0
cmex10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmff10	0.0 0.5 1.0
cmfi10	0.0 0.5 1.0
cmfib8	0.0 0.5 1.0
cminch	0.0
cmitt10	0.0 0.5 1.0
cmmi10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmmi12	0.0 0.5 1.0
cmmi5	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmmi6	0.0 0.5 1.0
cmmi7	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmmi8	0.0 0.5 1.0
cmmi9	0.0 0.5 1.0
cmmib10	0.0 0.5 1.0 9/10
cmr10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmr12	0.0 0.5 1.0
cmr17	0.0 0.5 1.0
cmr5	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmr6	0.0 0.5 1.0
cmr7	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmr8	0.0 0.5 1.0
cmr9	0.0 0.5 1.0
cmsl10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmsl12	0.0 0.5 1.0
cmsl8	0.0 0.5 1.0
cmsl9	0.0 0.5 1.0
cmsltt10	0.0 0.5 1.0
cmss10	0.0 0.5 1.0 2.0 3.0 4.0 5.0 8/10 9/10
cmss12	0.0 0.5 1.0
cmss17	0.0 0.5 1.0
cmss8	0.0 0.5 1.0
cmss9	0.0 0.5 1.0
cmssbx10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmssdc10	0.0 0.5 1.0
cmssi10	0.0 0.5 1.0
cmssi12	0.0 0.5 1.0
cmssi17	0.0 0.5 1.0
cmssi8	0.0 0.5 1.0
cmssi9	0.0 0.5 1.0
cmssq8	0.0 0.5 1.0
cmssqi8	0.0 0.5 1.0
cmsy10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmsy5	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmsy6	0.0 0.5 1.0
cmsy7	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmsy8	0.0 0.5 1.0
cmsy9	0.0 0.5 1.0
cmtcsc10	0.0 0.5 1.0
cmtex10	0.0 0.5 1.0
cmtex8	0.0 0.5 1.0
cmtex9	0.0 0.5 1.0
cmti10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmti12	0.0 0.5 1.0
cmti7	0.0 0.5 1.0 5/7
cmti8	0.0 0.5 1.0
cmti9	0.0 0.5 1.0
cmtt10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
cmtt12	0.0 0.5 1.0
cmtt8	0.0 0.5 1.0
cmtt9	0.0 0.5 1.0
cmu10	0.0 0.5 1.0
cmvtt10	0.0 0.5 1.0
lasy10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
lasy5	0.0 0.5 1.0 2.0 3.0 4.0 5.0
lasy6	0.0 0.5 1.0
lasy7	0.0 0.5 1.0 2.0 3.0 4.0 5.0
lasy8	0.0 0.5 1.0
lasy9	0.0 0.5 1.0
lasyb10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
lcircle10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
lcirclew10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
lcmss8	3.0 4.0 5.0 6.0 7.0
lcmssb8	3.0 4.0 5.0 6.0 7.0
lcmssi8	3.0 4.0 5.0 6.0 7.0
line10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
linew10	0.0 0.5 1.0 2.0 3.0 4.0 5.0
logo10	0.0 0.5 1.0
SHAR_EOF
fi # end of overwriting check
if test -f 'pk-maker.sh'
then
	echo shar: will not over-write existing file "'pk-maker.sh'"
else
cat << \SHAR_EOF > 'pk-maker.sh'
#!/bin/sh

# Makefile generator for PK fonts.  John D. Ramsdell --- March 1990

# Usage: $ME MFINPUT DPI MODE < font-list.text
# where MFINPUT is the directory which contains the METAFONT sources.
#       DPI is the dots-per-inch of the device,
#       MODE is the METAFONT mode used to generate fonts,
#   and font-list is a sequence of records in the form
#             font-name		size_1 ... size_n
#       where size is the magstep if it has no "/", otherwise it is
#	      a fraction which gives the magnification.
#
# Place this file and the font-list in the parent directory of the
# directory which is to hold the fonts.  After the first Makefile 
# has been generated, updates are are made by simply typing
# "make Makefile".

# To create fonts, type "make -k > make.log 2>&1 &" to /bin/sh, or
# "make -k >& make.log &" to /bin/csh.  If all looks fine in make.log,
# type "make clean".

MFINPUT=$1
DPI=$2
MODE=${3-localfont}
SAVE_TFM=$4

ME=`basename $0`
USAGE="$ME MFINPUT DPI [MODE] [SAVE_TFM]"

if test ! "$MFINPUT"
then
  echo Missing MFINPUT. 1>&2
  echo Usage: "$USAGE" 1>&2
  exit 1
fi

if test ! "$DPI"
then
  echo Missing DPI. 1>&2
  echo Usage: "$USAGE" 1>&2
  exit 1
fi

echo $ME MFINPUT DPI and MODE: ${MFINPUT} ${DPI} ${MODE} 1>&2

awk '
BEGIN {
  dpi = int('$DPI'+0.5)
  mode = "'$MODE'"
  base = log(1.2)
  type = "pk"
  font_data = 0
}
{ 
  for (i = 2; i <= NF; i++) {
    basename[font_data] = $1
    if ($i == "0.0")
      scale[font_data] = 1.0
    else if ($i !~ /\//)
      scale[font_data] = exp($i*base)
    else if (split($i, fraction, "/") == 2)
      scale[font_data] = fraction[1] / fraction[2]
    else scale[font_data] = 0.0
    if (scale[font_data] > 0.0)
      font[$1 "." int(dpi*scale[font_data]+0.5)] = font_data
    else print "'$ME': Bad input record \"" $0 "\"." | "cat 1>&2"
    font_data += 1
  }
}
END {
# basename[font_data] is the font basename.
# scale[font_data] is the font scale (with 1.0 as no scaling).
# font[filename] is the font_data associated with filename.
# The use of the font array eliminates duplicates

  print "# Makefile for " dpi " lines per inch fonts using mode " mode "."
  print "# Fake targets are all and clean."
  print "# Set \"SAVE_TFM=true\" to save tfm files."
  print ""
  print "MFINPUT='$MFINPUT'"
  print "DPI=" dpi
  print "MODE=" mode
  print "SAVE_TFM='$SAVE_TFM'"
  print ""
  
  printf("all:")		# all is the default target.
  for (filename in font) {
    print " \\"
    printf("  %s", filename type)
  }
  print ""

  print ""
  print "Makefile:\t../font-list.text ../'$ME'"
  print "\trm -f Makefile.bak; mv Makefile Makefile.bak"
  print "\t/bin/sh ../'$ME' $(MFINPUT) $(DPI) $(MODE) $(SAVE_TFM) < ../font-list.text > Makefile"
  print ""
  print "clean:"
  print "\t-rm -f *gf *.log"
  
  for (filename in font) {
    bn = basename[font[filename]]
    print ""
    print filename type ":\t$(MFINPUT)/" bn ".mf"
    printf("\tmf '\''\\mode:=%s;'\'' \"batchmode;\" ", mode)
    if (scale[font[filename]] != 1.0)
      printf("\"mag:=%s;\" ", scale[font[filename]])
    print "input " bn ".mf"
    printf("\t-rm -f %s.log\n", bn)
    printf("\t-if test ! \"$(SAVE_TFM)\"; then rm -f %s.tfm; fi\n", bn)
    printf("\tgftopk %sgf\n", filename)
    printf("\t-rm -f %sgf\n", filename)
  }
}
'
SHAR_EOF
fi # end of overwriting check
#	End of shell archive
exit 0

rcpt@tuegate.tue.nl (Piet Tutelaers) (03/02/90)

I have designed a set of tools (UMFT: Unix MetaFont Tools) which can be
used to generate PK-fonts too! Instead of providing people with the `nitty
gritty details' of make, I have designed a set of tools that makes the
generation of fonts more userfriendly. Here is an short introduction to UMFT:

Unix MetaFont Tools (version 1.0)
=================================

Here is a collection of Unix tools that can be used to generate
MetaFonts in a user friendly way. For a comprehensive description of
all offered features you can read umft/man/umft.man.te (a troff manual
page that can be printed with `tbl umft.man.te | eqn | psroff -man' or
something equivalent). For installation instructions and a short
description of its usage you can read the umft/README file.

Here is how you install the `basic+extra+slitex' set of fonts
(after some preparation):

  - generatefonts -s "basic extra slitex" cheapo | sh
  - installfonts -m cheapo | sh

if `cheapo' is the printer of your choice. The `basic+extra+slitex'
fonts were suggested by Bart Childs (TUGboat, aug'88) and Joachim Schrod
(TUGboat, dec'88) as their working set for TeX and LaTeX. To generate your
favourite set of fonts you only need to provide the names of the fonts and
the wanted magsteps into an ASCIIfile.

For further information see subject `UMFT: Unix MetaFont Tools v1.0' in this
discussion group. 

Piet Tutelaers
rcpt@urc.tue.nl