PCC uses bitmapped fonts. Those come in the resource file (PCC 1.x: CC.RES), or in separate files (PCC2).

 +0   2 BYTEs   Signature, 'FN'
 +2     WORD    Number of fonts (styles) in this file
 +4  8n BYTEs   Font index. For each font, one record of
                 +0     DWORD   Font Address
                 +4     BYTE    Font Flags
                                 Bit 0  Bold
                                 Bit 1  Italic
                 +5     BYTE    Font Encoding
                                 0      System encoding
                                 1      Codepage 866 (Cyrillic)
                                 2      Unicode
                 +6   2 BYTEs   Unused, 0
 +?   n BYTEs   Font name, Pascal string (leading length byte)

The "Font Address" fields point to the individual fonts, which have this format:

 +0     WORD    Font type
                 1      Bitmap font
                 2      Reserved
                 3      Bitmap font with pseudo anti-aliasing
 +2     WORD    Font height
 +4     WORD    Number of characters
 +6  8n BYTEs   Character headers
                 +0     DWORD   Character Data Address
                 +4     WORD    Character Id
                 +6     WORD    Character Width

The "Character Data Address" field points to the font data. For bitmap fonts, this is "Font height" lines of "(Character width + 7) / 8" bytes in big-endian order: the left-most pixel is the MSB of the first byte.

For bitmap fonts with pseudo anti-aliasing, the anti-aliasing information follow as

 +0     WORD    Number of entries
 +2  2n WORDs   Pairs of (x,y). These pixels receive only half
                intensity. These pixels' values in the main bitmap
                are ignored. c2reshack saves them as zero, but this
                is not guaranteed.

The "Character Id" field contains the character code. Characters should be stored in order of ascending Character Id.
- The system encoding is codepage 437 for PCC 1.x, Latin-1 for PCC2. The Character Id is the character number; fonts must have 256 characters, where each character's index equals its Id. Codes 256*b+a are reserved for ligatures of the form "ab", but this was never implemented.
- Likewise, codepage 866 must have 256 characters in the correct order. This is supported by PCC 1.x only.
- For Unicode fonts, the character code is the character number. There is no way to represent characters outside the BMP. The character sequence can contain gaps.

Font Use in PCC

All PCCs support only one font per file. The font flags or name are not evaluated.

PCC 1.x uses additional nonstandard glyphs; not all fonts have all glyphs.

  Code  Glyph                           Note
  ----  ------------------------------  ----------------------------
     7  bullet                          regular symbol in VGA font
    16  right-pointing triangle         "play" or "FF" symbol
    17  left-pointing triangle          "REW" symbol
    18  tiny vertical bar               with 16 and 17 for "begin"/"end"
    26  right-pointing arrow            regular symbol in VGA font
    27  left-pointing arrow             regular symbol in VGA font
    29  bent arrow ("tab")
    30  up-arrow                        regular symbol in VGA font
    31  down-arrow                      regular symbol in VGA font
   124  small slash                     normally a "|"
   156  ornament left                   used in VCR
   157  ornament right                  used in VCR
   159  "times" symbol ("x")            normally a currency symbol
   221  left-pointing triangle          used in help
   222  right-pointing triangle         used in help

PCC2 originally re-used PCC 1.x fonts, but with Latin-1 encoding instead of codepage 437. Since 1.99.12, it uses Unicode fonts that support a superset of the WGL4 repertoire. In addition, the following characters are used with private encodings:

  Unicode    Glyph
  ---------  -----------------------------------------
  E100-E10F  Replacement characters 0..F upper-left
  E110-E11F  Replacement characters 0..F upper-right
  E120-E12F  Replacement characters 0..F bottom-left
  E130-E13F  Replacement characters 0..F bottom-right
             These are used to render unsupported characters.
  E140       bent arrow (PCC 1.x #29)
  E142       ornament left (PCC 1.x #156)
  E143       ornament right (PCC 1.x #157)
  E144       tiny vertical bar (PCC 1.x #18)