Включение драйвера и шрифтов в тело программы
В Турбо Паскале имеется
возможность включения графического драйвера и штриховых шрифтов непосредственно
в тело программы. Такое включение делает программу независимой от местоположения
и наличия на диске драйверов и шрифтов, а также ускоряет подготовку графических
программ к работе (шрифты и драйвер загружаются вместе с программой).
Включение драйвера и
шрифтов осуществляется по следующей общей схеме. Сначала с помощью
вспомогательной программы BINOBJ.EXE, входящей в комплект поставки Турбо Паскаля,
драйвер и шрифты преобразуются в OBJ-файл (файл с расширением .OBJ). Для этого
вне среды Турбо Паскаля необходимо вызвать утилиту BINOBJ с тремя параметрами:
именем преобразуемого файла, именем получаемого OBJ-файла и глобальным именем
процедуры. Эти имена, в принципе, могут быть произвольными, правильными для
MS-DOS именами. Например:
c:\tp\binobj
cga.bgi cga cgadrv
В результате такого
обращения из каталога ТР на диске С будет вызвана программа BINOBJ и ей будут
переданы следующие параметры:
CGA.BGI - имя файла с
преобразуемым драйвером;
CGA - имя файла с
расширением .OBJ, т.е. CGA.OBJ, который будет получен в результате исполнения
программы BINOBJ;
CGADRV- глобальное имя,
под которым этот драйвер будет известен программе.
После этого можно написать
следующий фрагмент программы:
Uses Graph;
Procedure CGADRV;
external;
{$L CGA.OBJ}
var
d, r, e :
Integer;
begin
if
RegisterBGIDriver (@CGADRV) < 0 then
begin
WriteLn ('Ошибка
при регистрации драйвера');
halt
end;
d := CGA; r :=
CGAHi;
InitGraph (d, r,
'');
.......
Как видно из этого примера,
в программе объявляется внешняя процедура с именем CGADRV (глобальное имя,
указанное при обращении к BINOBJ), причем дается директива компилятору отыскать
в текущем каталоге и загрузить файл CGA.OBJ, в котором находится эта процедура.
Затем осуществляется регистрация драйвера путем обращения к функции
RegisterBGIDriver. Единственным параметром этой функции является адрес начала
драйвера в памяти (@CGADRV). Функция возвращает значение типа Integer, которое
служит для контроля правильности завершения процедуры регистрации драйвера: если
это значение меньше нуля, обнаружена ошибка, в противном случае функция
возвращает номер зарегистрированного драйвера. В примере контролируется
правильность регистрации драйвера и, если ошибка не обнаружена, инициируется
графический режим работы экрана.
Аналогичным образом можно
присоединить к программе стандартные штриховые шрифты (матричный шрифт 8x8
входит в состав модуля Graph и поэтому присоединять его не надо). Присоединение
шрифта строится по описанной схеме за тем исключением, что для его регистрации
вызывается функция RegisterBGIFont. Например, после преобразования
c:\Pascal\binobj
litt.chr litt litt
можно использовать
операторы
Procedure
Litt;External;
{$L Litt.obj}
.......
if
RegisterBGIFont (@litt) < 0 then ...
Обратите внимание:
регистрация и драйвера, и шрифтов должна предшествовать инициации графического
режима.
Регистрировать можно также
драйверы (шрифты), которые не компилируются вместе с программой, а загружаются в
динамическую память. Например:
Uses Graph;
var
р: Pointer;
f: file;
begin
Assign(f,'Litt.chr'); {Открываем файл}
Reset(f,1); {LITT.CHR
для чтения}
GetMem(p,FileSize(f)) ; {Резервируем для него область кучи
нужного размера}
BlockRead(f,pA,FileSize(f)){Читаем файл}
WriteLn(RegisterBGIFont (p)){Регистрируем шрифт}
end.