BUILDING FONTS

The files in this directory help make the ditroff description files
for the PostScript "device" and its fonts.  Work is split up among
three files - the Makefile, an awk program (afmdit.awk) and a shell
script (afmdit).

The units in the device description for PostScript were determined by
certain limits internal to ditroff.  Ditroff uses bytes and shorts for
things (like current position and font widths) that would overflow if
we used a very fine PostScript coordinate system and 1000-unit-per-em
character widths.  In particular, ditroff stores character widths in
BYTES (hence, these must be <= 256) so we are forced to scale them and
lose precision.

The awk program (afmdit.awk) is used by afmdit to help convert an 
Adobe Metrics Format (AFM) file into a ditroff font description file.

It has a number of important constants defined inside it.  Among them, the 
PostScript "device" resolution, the font sizes available, and the font width
scaling factor.  Also present is a mapping from PostScript character names
to ditroff 2-character character names (e.g., em, mi).
This mapping is called "ditmap" and also has entries for characters for
which there is (presently) no PostScript equivalent.  The mapping called
"ascii" serves to identify the normal printing ascii characters (which
may have synonymns in ditmap).

The dependencies in the Makefile are triggered in a somewhat strange way.
The uncompiled font description entries (as input to makedev) have no
filename extension, and thus an automatic rule for them is hard to write.
The files [code].font are empty places holders for such a rule.
The font files are:

[code].map	holds the name of the PostScript font that this ditroff
		font code represents.  This file is used both in creating
		the font descriptions and in the ditroff to PostScript
		translator to do the inverse map.  The first line of 
		the file is the PostScript font name (as would be 
		presented to the findfont operator).  The file may have 
		a second line, containing the word "special" if it the 
		the special symbol font (see S.map).

[code].font	empty.  This is used by the makefile to trigger the creation
		of the [code] font description file.

[code]		This is the generated ditroff font description which is input
		to makedev (which creates a "compiled" version called 
		[code].out).  This contains information about ligatures,
		character set, character widths, and ascenders and
		descenders.  Also present is a (comment) reference
		to the PostScript character name for each character.

[code].aux	auxiliary info (real PostScript character widths) used by
		psdit

[code].out	This is the "compiled" version of the font description
		created by makedev. (See above.)

"Make install" will install all of the .out files and the .map files into
the destination directory from which ditroff reads them.  This is usually
/usr/lib/font/devpsc/  (devpsc stands for the PostScript device).  The .map
files go there too, as the ditroff to PostScript translator needs to inverse
map ditroff font codes to PostScript font names.  Care should be taken that
these files (and the directories) have the proper protections.


MAKING FONT FAMILIES

There are many troff documents that have been written using the R, I, and
B as font names (corresponding to Roman, Italic, and Bold).  In TranScript,
these fonts are installed as the corresponding fonts in the Times family:
Times-Bold, Times-Italic, and Times-Roman.  It is occasionally desirable
to print these documents in another font family, say, Helvetica.  This
requires redefining the R, I, and B fonts to be the corresponding Helvetica
fonts (Helvetica, Helvetica-Oblique, and Helvetica-Bold), rather than the
Times fonts.

TranScript implements this by making a different font directory for each
font family.  The first family installed is always Times.  Other families
are built by creating a new directory for the font family, making links
to all the files in the Times family directory, and changing the R, I,
B, and BI (BoldItalic) font definitions to be correct for the new family.
The "makefamily" script is used for this.
