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)