Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ font(5) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

dpost(1)

troff(1BSD)






       font(5)                                                      font(5)


       NAME
             font - font description files for troff and dpost

       SYNOPSIS
             troff -T ptty . . .

       DESCRIPTION
             For each typesetter or printer type supported by troff(1BSD)
             and available on this system, there is a directory containing
             files describing the device and its fonts.  This directory is
             named /usr/lib/font/devptty where ptty is the abbreviated name
             of the typesetter or printer type.  Currently supported
             devices are aps for the Autologic APS-5, post for PostScript
             printers, and i10 for the Imagen Imprint 10 laser printer.

             For a particular phototypesetter, ptty, the ASCII file DESC in
             the directory /usr/lib/font/devptty describes its
             characteristics.  Each line starts with a word identifying the
             characteristic which is followed by appropriate specifiers.
             Blank lines and lines beginning with a # are ignored.

             The legal lines for DESC are:

             res num             resolution of device in basic increments
                                 per inch

             hor num             smallest unit of horizontal motion

             vert num            smallest unit of vertical motion

             unitwidth num       pointsize in which widths are specified

             sizescale num       scaling for fractional pointsizes

             paperwidth num      width of paper in basic increments

             paperlength num     length of paper in basic increments

             biggestfont num     maximum size of a font

             spare2 num          available for use

             sizes num num . . . list of pointsizes available on typesetter





                           Copyright 1994 Novell, Inc.               Page 1













      font(5)                                                      font(5)


            fonts num name . . .
                                number of initial fonts followed by the
                                names of the fonts.  For example:
                                     fonts 4 R I B S

            charset             this always comes last in the file and is
                                on a line by itself.  Following it is the
                                list of special character names for this
                                device.  Names are separated by a space or
                                a newline.  The list can be as long as
                                necessary.  Names not in this list are not
                                allowed in the font description files.

            res is the basic resolution of the device in increments per
            inch.  hor and vert describe the relationships between motions
            in the horizontal and vertical directions.  If the device is
            capable of moving in single basic increments in both
            directions, both hor and vert would have values of 1.  If the
            vertical motions only take place in multiples of two basic
            units while the horizontal motions take place in the basic
            increments, then hor would be 1, while vert would be 2.  The
            unitwidth is the pointsize in which all width tables in the
            font description files are given.  troff automatically scales
            the widths from the unitwidth size to the pointsize it is
            working with.  sizescale is not currently used and is 1.
            paperwidth is the width of the paper in basic increments.  The
            APS-5 is 6120 increments wide.  paperlength is the length of a
            sheet of paper in the basic increments.  biggestfont is the
            maximum number of characters on a font.

            For each font supported by the phototypesetter, there is also
            an ASCII file with the same name as the font (e.g., R, 4).
            The format for a font description file is:

            name name           name of the font, such as R or 4

            internalname name   internal name of font

            special             sets flag indicating that the font is
                                special

            ligatures name . . . 0
                                Sets flag indicating font has ligatures.
                                The list of ligatures follows and is
                                terminated by a zero.  Accepted ligatures
                                are: ff fi fl ffi ffl.


                          Copyright 1994 Novell, Inc.               Page 2













       font(5)                                                      font(5)


             spare1              available for use

             spacewidth num      width of space if something other than 1/3
                                 of - is desired as a space.

             charset             The character set must come at the end.
                                 Each line following the word charset
                                 describes one character in the font.  Each
                                 line has one of two formats:
                                      name   width   kerning code
                                      name   "

                                 where name is either a single ASCII
                                 character or a special character name from
                                 the list found in DESC.  The width is in
                                 basic increments.  The kerning information
                                 is 1 if the character descends below the
                                 line, 2 if it rises above the letter 'a',
                                 and 3 if it both rises and descends.  The
                                 kerning information for special characters
                                 is not used and so may be 0.  The code is
                                 the number sent to the typesetter to
                                 produce the character.  The second format
                                 is used to indicate that the character has
                                 more than one name.  The double quote
                                 indicates that this name has the same
                                 values as the preceding line.  The kerning
                                 and code fields are not used if the width
                                 field is a double quote character.  The
                                 total number of different characters in
                                 this list should not be greater than the
                                 value of biggestfont in the DESC file (see
                                 above).

             troff and its postprocessors like dpost read this information
             from binary files produced from the ASCII files by a program
             distributed with troff called makedev.  For those with a need
             to know, a description of the format of these files follows:

             The file DESC.out starts with the dev structure, defined by
             dev.h:

             /*
              * dev.h: characteristics of a typesetter
              */
             struct dev {


                           Copyright 1994 Novell, Inc.               Page 3













      font(5)                                                      font(5)


            unsigned short      filesize; /* number of bytes in file, */
                                 /* excluding dev part */
            short   res;         /* basic resolution in goobies/inch */
            short   hor;         /* goobies horizontally */
            short   vert;
            short   unitwidth;   /* size at which widths are given*/
            short   nfonts;      /* number fonts physically available */
            short   nsizes;      /* number of pointsizes */
            short   sizescale;   /* scaling for fractional pointsizes */
            short   paperwidth;  /* max line length in units */
            short   paperlength;  /* max paper length in units */
            short   nchtab;      /* number of funny names in chtab */
            short   lchname;     /* length of chname table */
            short   biggestfont; /* max # of chars in a font */
            short   spare2;
            };

            filesize is just the size of everything in DESC.out excluding
            the dev structure.  nfonts is the number of different font
            positions available.  nsizes is the number of different
            pointsizes supported by this typesetter.  nchtab is the number
            of special character names.  lchname is the total number of
            characters, including nulls, needed to list all the special
            character names.  At the end of the structure are two spares
            for later expansions.

            Immediately following the dev structure are a number of
            tables.  First is the sizes table, which contains nsizes + 1
            shorts (a null at the end), describing the pointsizes of text
            available on this device.  The second table is the
            funny_char_index_table.  It contains indices into the table
            which follows it, the funny_char_strings.  The indices point
            to the beginning of each special character name which is
            stored in the funny_char_strings table.  The
            funny_char_strings table is lchname characters long, while the
            funny_char_index_table is nchtab shorts long.

            Following the dev structure will occur nfonts font.out files,
            which are used to initialize the font positions.  These
            font.out files, which also exist as separate files, begin with
            a font structure and then are followed by four character
            arrays:

            struct  font {        /* characteristics of a font */
            char    nwfont;       /* number of width entries */
            char    specfont;     /* 1 == special font */


                          Copyright 1994 Novell, Inc.               Page 4













       font(5)                                                      font(5)


             char    ligfont;      /* 1 == ligatures exist on this font */
             char    spare1;       /* unused for now */
             char    namefont[10]; /* name of this font, e.g., R */
             char    intname[10];  /* internal name of font, in ASCII */
             };

             The font structure tells how many defined characters there are
             in the font, whether the font is a ``special'' font and if it
             contains ligatures.  It also has the ASCII name of the font,
             which should match the name of the file it appears in, and the
             internal name of the font on the typesetting device (intname).
             The internal name is independent of the font position and name
             that troff knows about.  For example, you might say mount R in
             position 4, but when asking the typesetter to actually produce
             a character from the R font, the postprocessor which instructs
             the typesetter would use intname.

             The first three character arrays are specific for the font and
             run in parallel.  The first array, widths, contains the width
             of each character relative to unitwidth.  unitwidth is defined
             in DESC.  The second array, kerning, contains kerning
             information.  If a character rises above the letter 'a', 02 is
             set.  If it descends below the line, 01 is set.  The third
             array, codes, contains the code that is sent to the typesetter
             to produce the character.

             The fourth array is defined by the device description in DESC.
             It is the font_index_table.  This table contains indices into
             the width, kerning, and code tables for each character.  The
             order that characters appear in these three tables is
             arbitrary and changes from one font to the next.  In order for
             troff to be able to translate from ASCII and the special
             character names to these arbitrary tables, the
             font_index_table is created with an order which is constant
             for each device.  The number of entries in this table is 96
             plus the number of special character names for this device.
             The value 96 is 128 - 32, the number of printable characters
             in the ASCII alphabet.  To determine whether a normal ASCII
             character exists, troff takes the ASCII value of the
             character, subtracts 32, and looks in the font_index_table.
             If it finds a 0, the character is not defined in this font.
             If it finds anything else, that is the index into widths,
             kerning, and codes that describe that character.





                           Copyright 1994 Novell, Inc.               Page 5













      font(5)                                                      font(5)


            To look up a special character name, for example \(pl, the
            mathematical plus sign, and determine whether it appears in a
            particular font or not, the following procedure is followed.
            A counter is set to 0 and an index to a special character name
            is picked out of the counter'th position in the
            funny_char_index_table.  A string comparison is performed
            between funny_char_strings [funny_char_index_table[counter]]
            and the special character name, in our example pl, and if it
            matches, then troff refers to this character as ( 96 +
            counter).  When it wants to determine whether a specific font
            supports this character, it looks in font_index_table[(96 +
            counter)], (see below), to see whether there is a 0, meaning
            the character does not appear in this font, or a number, which
            is the index into the widths, kerning, and codes tables.

            Notice that since a value of 0 in the font_index_table
            indicates that a character does not exist, the 0th element of
            the width, kerning, and codes arrays are not used.  For this
            reason the 0th element of the width array can be used for a
            special purpose, defining the width of a space for a font.
            Normally a space is defined by troff to be 1/3 of the width of
            the \(em character, but if the 0th element of the width array
            is non-zero, then that value is used for the width of a space.

      REFERENCES
            dpost(1), troff(1BSD),

      FILES
            /usr/lib/font/devX/DESC.out   description file for phototypesetter X
            /usr/lib/font/devX/font.out   font description files for phototypesetter X


















                          Copyright 1994 Novell, Inc.               Page 6








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026