294________________________________________________Приложение
положение указателя. Перед тем как поместить отредактированный символ в таблицу, Вы должны убедиться в том, что эта линия задает правильный межсимвольный промежуток.
П3.2. Описание программы
Работа программы проходит в три этапа и реализуется процедурами /nit. Run и Done. На этапе выполнения процедуры uii't осуществляются следующие действия:
• вводится имя редактируемого или вновь создаваемого CHR— файла, содержащего нужный векторный шрифт (процедура Namelnputf;
• если файл уже существует, программа проверяет его структуру и считывает данные (процедура ReadData), в противном случае — запрашивает параметры вновь создаваемого файла и готовит его описание (процедура NewFUef;
• переводит экран в графический режим, инициирует мышь и готовит для нее графические указатели, расчерчивает поле редактирования, выводит таблицу символов и готовит меню для работы с мышью (процедура BuildScreenf. Основная работа реализуется процедурой Run. тело которой состоит из бесконечного цикла While True do begin ... end. В ходе этого цикла непрерывно сканируется состояние мыши, и в зависимости от результатов сканирования выполняются следующие действия:
• если мышью выбран один из элементов меню (т.е. указатель подведен к соответствующей надписи и нажата левая кнопка мыши), вызывается одна из процедур GetChar, SetChar, ClearWE, Pattern, SaveFont или Exit в зависимости от сделанного выбора;
• если нажата левая кнопка мыши, а указатель при этом был в поле редактора, вызывается процедура MouseInNed, проверяющая выбор того или иного узла поля редактора; если узел выбран, он становится исходной точкой и от него вслед за указателем мыши будет тянуться «резиновая нить»; если «резиновая нить» уже была сформирована предыдущим обращением к MouseInNed, обращение к этой процедуре вызовет формирование нового векторного элемента редактируемого символа;
• если нажата правая кнопка и указатель располагался в поле редактора, вызывается процедура MouseInLine, проверяющая выбор того или иного вектора и осуществляющая его стирание, если вектор выбран;
• если не нажата ни одна кнопка, но мышь изменила свое положение, будет вызвана процедура MouseMove, реализующая «резиновую нить».
Завершающий этап работы программы реализуется процедурой Done. В ходе ее выполнения вызывается процедура SaveFont для сохранения в файле сделанных изменений, и восстанавливается текстовый режим работы экрана.
В программе используются процедуры и функции из модулей F_GrText (для формирования меню и вывода номера элемента ASCII— таблицы), F_Mouse (для обслуживания мыши и контроля выбора элемента меню) и F_Anti (для автоматической защиты программы от нападения вирусов).
1$Х+} ^——————————————————————————————+
¦ Редактор векторных шрифтов формата CHR ¦
+--------—----—--—-----------—----------——+
;
Uses CRT,Graph,F_GrText,F_Mouse,F Anti;
{
Глобальные определения
}
type
TChar4 = array [1..4] o? Char;
TFontHead = record {Структура заголовка шрифта}
case Byte of
0:(FontFileID: TChar4) ;
1:(B: array [1..128] of byte; ;
end;
TFontPara = record {Блок параметров шрифта}
case Byte of