может быть произвольной (во всех четырех стандартных шрифтах это г массив имеет одинаковую длину — 83 байта), т.к. он всегда заканчивается полем CopyrightEnd, содержащим символ #26 (#$1А) — конец файла.
Сразу за полем CopyrightEnd следует двухбайтное поле HeaderSize, содержащее длину заголовка в байтах плюс 1 (в стандартных шрифтах это поле имеет значение 128).
Поле FontName содержит четырехбуквенное название шрифта; это название передается процедуре InstallUserFont и должно совпадать с именем CHR— файла.
Двухбайтное поле FileSize содержит длину CHR— файла за вычетом длины заголовка, т.е. оно равно
FileSize(File)- HeaderSize.
Трехбайтное поле FontVersion в стандартных шрифтах содержит значения 1, 0, 1 и, по всей видимости, означает номер версии шрифта. При разработке собственных шрифтов лучше сохранить это поле таким же, как в стандартных шрифтах.
Остальная часть заголовка не имеет значения и может быть произвольной.
Поле ParPrefix отстоит на HeaderSize байт от начала файла (в стандартных шрифтах — на 128 байт). Оно открывает блок параметров шрифта и всегда содержит символ '+'. В поле CharsCount указывается общее количество символов, начертания которых определены в CHR— файле, а в FirstChar — код первого определенного символа. Совокупность полей CharsCount и FirstChar задают диапазон кодов символов; в стандартных шрифтах они обычно содержат значения 32 и 223, что означает, что эти шрифты определяют начертания ASCII— символов, начиная с #32 (Пробел) и до символа # 254 включительно.
Поле DataOffset содержит расстояние в байтах от поля ParPrefix до поля FirstData. Его значение определяется по формуле
DataOffset = 16+3*CharsCount,
в которой слагаемое 16 учитывает мину блока параметров, a Z'CharsCount — длину двух таблиц, следующих сразу за блоком параметров. Для стандартных шрифтов из файлов Trip, Goth и Litt это поле содержит
16 + 3*223 = 685
(для этих шрифтов CharsCount = 254-32+1 = 223).
Поле FillFlag содержит так называемый флаг заливки символов: если он сброшен (имеет нулевое значение), процедуры OutText и OutTextXY вы — водят только векторный «скелет» каждого символа, а при ненулевом значении заливают его текущим рисунком заполнения (устанавливается процедурой SetFillStyle). Поскольку контуры многих символов незамкнуты, заливка может разлиться по всему экрану, поэтому в стандартных шрифтах это поле всегда имеет значение 0.
Поле UpperMargin содержит максимальное, a LowerMargin — минимальное значение локальных координат для оси У. Локальные вертикальные координаты векторных команд могут иметь значения в диапазоне