может быть произвольной (во всех четырех стандартных шрифтах это г массив имеет одинаковую длину — 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 — минимальное значение локальных координат для оси У. Локальные вертикальные координаты векторных команд могут иметь значения в диапазоне