Appendix C Printer Font Metric Data Structure for the Universal Printer Driver

The following structure is used by all Printer Font Metrics (PFM) files
used by drivers that are supported by the Microsoft Windows Universal
Driver.

    typedef struct
    {
        short   sSize;       // size of this structure.
        short   iVersion;    // version number.
        WORD    fCaps;       // members describing capabilities.
        short   iFontID;     // unique font ID defined by the driver.
        short   sYAdjust;    // adjust y position before output character
                             // used by double height character.
        short   sYMoved;     // cursor moved after printing this font.
        short   iTransTab;   // index to translation table resource.
        short   sUnderlinePos;
        short   sDoubleUnderlinePos;
        short   sStrikeThruPos;
        LOCD    locdSelect;  // long offset to command descriptor.
        LOCD    locdUnSelect;// long offset to command descriptor to
                             // cancel selection.
        WORD    wPrivateData;// private data to be used by minidriver.
        short   sShift;      // number of pixels to shift each character.
    } DRIVERINFO;

Member                Description
---------------------------------------------------------------------------

sSize                 Specifies the size of the structure.

iVersion              Specifies the version number of this structure. This
                      specification describes version 0x0100 (implied
                      decimal for version 1.00).

fCaps                 Specifies the bit flags describing capabilities.

                      Value             Meaning
                      -----------------------------------------------------

                      DF_NOITALIC       This font cannot be italicized
                                        using FONTSIMULATION.

                      DF_NOUNDER        This font cannot be underlined
                                        using FONTSIMULATION.

                      DF_XM_CR          A carriage return is sent after
                                        using this font.

                      DF_NOBOLD         This font cannot be made bold using
                                        FONTSIMULATION.

                      DF_NO2UNDERLINE   This font cannot produce double
                                        underlines using FONTSIMULATION.

                      DF_NOSTRIKETHRU   This font cannot be struck through
                                        using FONTSIMULATION.

                      DF_BKSP_OK        This fonts uses a CTT_WTYPE_PAIRED
                                        character-translation table to
                                        determine how to overstrike
                                        characters. If it is set, it is
                                        assumed that a single backspace
                                        character can be used to move the
                                        cursor to the start of the bounding
                                        box of the previous character prior
                                        to overstriking. If it is not set,
                                        it is assumed that explicit
                                        x-movement commands are required to
                                        position the cursor for an
                                        overstrike. If the font does not
                                        use a CTT_WTYPE_PAIRED translation
                                        table, this flag is ignored.

iFontID               Reserved; do not use.

sYAdjust              Specifies the distance to move the current y
                      position, as expressed in master units, before
                      printing characters in this font and size. This
                      member is primarily used for double-height
                      characters, and the specified distance to align the
                      baseline accurately.

sYMoved               Specifies the distance to move the y position, as
                      expressed in master units, after printing with this
                      font and size. This member is also used to compensate
                      for fonts that do not restore the cursor to the
                      correct y position. It is primarily used for
                      double-height characters.

iTransTab             Specifies the index to character-translation table
                      resource for this font. This may zero, a positive, or
                      negative number. If this is zero, use the
                      character-translation table referred to in the
                      ModelData dialog box for this model. If this is a
                      negative number, the Universal Printer Driver will
                      take the absolute value and use its own
                      character-translation table resource with this ID. If
                      this is a positive value, the Universal Printer
                      Driver will use the driver-defined
                      character-translation table resource with this ID
                      value.

sUnderlinePos         Specifies the position of the hardware underline
                      created by FS_OCD_ST_UNDERLINE_ON from the bottom of
                      the character-bounding box. This member is measured
                      in master units.

sDoubleUnderlinePos   Specifies the position of the hardware double
                      underline created by FS_OCD_ST_DOUBLEUNDERLINE_ON
                      from the bottom of the character-bounding box. This
                      member is measured in master units.

sStrikeThruPos        Specifies the position of the hardware strikethrough
                      created by FS_OCD_ST_STRIKETHRU from the bottom of
                      the character-bounding box. This member is measured
                      in master units.

locdSelect            Specifies the long offset to the command descriptor
                      to select this font.

locdUnSelect          Specifies the long offset to the command descriptor
                      to cancel the selection of this font. This member is
                      NOOCD if not used.

wPrivateData          Specifies the private data to be used by the
                      minidriver.

sShift                Specifies the number of pixels to shift each
                      character to the left or right. Negative numbers
                      shift to the right; positive numbers shift to the
                      left.