Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ font(5) — DG/UX 4.30

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

troff(1)

troff(5)



     font(5)                    DG/UX 4.30                     font(5)



     NAME
          font - description files for device-independent troff

     SYNOPSIS
          troff -Tptty ...

     DESCRIPTION
          For each high-quality output device supported by troff(1)
          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
          name of the device.  Currently the only ptty supported is
          i10 for the IMAGEN laser printer.

          For a particular device, ptty, the ASCII file DESC in the
          directory /usr/lib/font/devptty describes its
          characteristics.  Each line starts with a word identifying
          the characteristic and 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 for a font

               spare2 num          available for use

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

               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.



     Licensed material--property of copyright holder(s)         Page 1





     font(5)                    DG/UX 4.30                     font(5)



                                   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.  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 Imagen laser printer's width is 1851
          increments.  Paperlength is the length of a sheet of paper
          in the basic increments.  The Imagen laser printer's length
          is 3703 increments.

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

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

               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.

               spare1              available for use

               spacewidth num      width of space if something other
                                   than 1/3 of the width of the \(em
                                   character is desired as a space.

               charset             The charset must come at the end.
                                   Each line following the word



     Licensed material--property of copyright holder(s)         Page 2





     font(5)                    DG/UX 4.30                     font(5)



                                   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.

               Troff and its postprocessors 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 {
               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     spare1;    /* in case of expansion */
               short     spare2;
               };



     Licensed material--property of copyright holder(s)         Page 3





     font(5)                    DG/UX 4.30                     font(5)



               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 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 */
               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



     Licensed material--property of copyright holder(s)         Page 4





     font(5)                    DG/UX 4.30                     font(5)



               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.

               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
               counterth position in the funny_char_index_table.  A
               string comparision 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 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



     Licensed material--property of copyright holder(s)         Page 5





     font(5)                    DG/UX 4.30                     font(5)



               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.

     FILES
          /usr/lib/font/dev{X}/DESC.out
                 description file for device X
          /usr/lib/font/dev{X}/{font}.out
                 font description files for device X

     SEE ALSO
          troff(1), troff(5).
          Using the Documenter's Tool Kit on the DG/UX System.
          Documenter's Tool Kit Technical Summary for the DG/UX
          System.







































     Licensed material--property of copyright holder(s)         Page 6



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