How Windows 3.11 Stored Fonts in the System Directory

In Microsoft Windows 3.11, font management relied on a combination of 16-bit executable resource files stored primarily in the C:\WINDOWS\SYSTEM directory and text-based configuration entries inside WIN.INI. Unlike modern operating systems that deploy unified OpenType font stores and centralized system registries, Windows 3.11 differentiated between raster, vector, and TrueType fonts using dedicated file formats—specifically .FON, .FOT, and .TTF files—packaged as New Executable (NE) structures to interface directly with the Graphics Device Interface (GDI).

Raster and Vector Fonts (.FON Files)

Screen fonts, system dialog typography, and legacy vector fonts were compiled directly into .FON files located within the SYSTEM directory. Common examples included VGASYS.FON, SSERIFE.FON, and MODERN.FON.

Architecturally, a .FON file was not a raw font data stream; it was an empty Windows 16-bit Dynamic Link Library (DLL) adhering to the New Executable (NE) format. It contained no executable machine code, but instead housed font data within its read-only resource table:

  • RT_FONTDIR (Resource Type 0x2007): A directory structure listing the metrics, font type, character pitch, and face names of all font variations bundled within the file.
  • RT_FONT (Resource Type 0x2008): The raw character bitmap tables or stroke vectors containing the glyph descriptions.

Because these resources were standard Windows DLL payloads, the GDI module could page individual glyph resources in and out of 16-bit memory via standard Windows resource-loading functions without reading the entire font file at once.

TrueType Implementation (.FOT and .TTF Files)

Windows 3.1 introduced native support for scalable TrueType outlines, handled through a two-file architecture within the SYSTEM folder:

  1. .TTF Files: The raw TrueType outline data file containing standard TrueType tables such as cmap (character-to-glyph mapping), glyf (glyph outlines), and head (font header).
  2. .FOT Files: TrueType Font resource headers.

Windows 3.11 did not load .TTF files directly into the GDI font table. When a user installed a TrueType font through the Control Panel, Windows generated a small (typically 1 to 2 KB) .FOT file inside the SYSTEM directory. The .FOT file was structured as an NE format resource containing metadata, the font family name, licensing flags, and an internal hardcoded file pointer indicating the exact physical path to the corresponding .TTF file. This architecture allowed the heavy outline files (.TTF) to remain either in the SYSTEM directory or on remote network shares and external media, while the operating system loaded the lightweight .FOT stub into memory.

Mapping Font Files via WIN.INI

The cataloging of font files stored in SYSTEM was governed by the initialization file WIN.INI rather than the Windows Registration Database (REG.DAT).

During startup, GDI.EXE parsed the [fonts] section of C:\WINDOWS\WIN.INI. This section created a direct 1-to-1 link between the user-facing descriptive name and the file residing in the SYSTEM directory:

[fonts]
Arial (TrueType)=ARIAL.FOT
Courier 10,12,15 (VGA res)=COURF.FON
MS Sans Serif 8,10,12,14,18,24 (VGA res)=SSERIFE.FON
Times New Roman (TrueType)=TIMES.FOT

If a path was omitted from the right-hand side of the declaration, Windows defaulted to searching the C:\WINDOWS\SYSTEM directory. For raster fonts, GDI loaded the metrics directly from the referenced .FON file. For TrueType fonts, GDI read the referenced .FOT file, extracted the pointer to the .TTF file, and initialized the TrueType rasterizer engine to generate dynamic bitmaps at runtime.