Функция Добавляет дополнительные драйверы устройств
в таблицу драйверов устройств BGI.
Синтаксис #include
int far installuserdriver(char far *name,
int huge(*detect)(void));
Файл, содержащий graphics.h
прототип
Описание installuserdriver позволяет вам добавлять
дополнительные драйверы во встроенную BGI
таблицу. Параметр name - это имя (.BGI) фай-
ла нового драйвера, а параметр detect -
указатель на дополнительную функцию автооп-
ределения, которая может сопровождать новый
драйвер. Эта функция не берет никаких пара-
метров и возвращает целое значение.
Существует два способа использования драй-
веров, поставляемых продавцами. Предположим
у вас есть новая видеокарта, называющаяся
Spiffy Graphic Array (SGA) и производитель
этой SGA обеспечивает вас также BGI-драйве-
ром (SGA.BGI). Наипростейший способ исполь-
зования драйвера состоит в добавлении его с
помощью installuserdriver, а затем передаче
возвращаемого значения (присвоенный номер
драйвера) непосредственно в initgraph.
Другой, более общий способ использования
этого драйвера состоит во встраивании его в
функцию автоопределения, которая вызывается
initgraph как часть его драйвероопределяю-
щей логики (вероятно, производитель SGA дал
вам эту функцию автодетектирования). Когда
вы добавите драйвер с помощью installuser-
driver, вы передадите адрес этой функции
вместе с именем файла драйвера устройства.
После того как вы добавили имя файла драй-
вера и SGA-функцию автодетектирования, вы
вызываете initgraph и позволяете ему выпол-
нять нормальный процесс автодетектирования.
Перед тем как initgraph вызовет встроенную
функцию автодетектирования(detectgraph),
он вызовет SGA-функцию автодетектирования.
Если эта SGA-функция не находит аппаратные
средства SGA, она возвращает значение -11
(grError), а initgraph продолжает нормаль-
ный процесс автодетектирования, который мо-
жет включать вызов других поставленных про-
изводителем функций автодетектирования в
том порядке в каком они были добавлены).
Если же, однако, функция определит, что SGA
присутствует, она возвращает неотрицатель-
ный номер режима; затем initgraph находит и
загружает SGA.BGI, переводит аппаратные
средства в графический режим, рекомендуемый
функцией автодетектирования, и, наконец,
передает управление вашей программе.
Одновременно может быть добавлено до десяти
драйверов.
Возвращаемое Значение возвращаемое installuserdriver -
значение это номер драйвера, который вы передадите
в initgraph для того, чтобы выбрать вручную
вновь добавленный драйвер.
Переносимость Функция уникальна для Turbo C++. Эта функция
пригодна только для компьютеров IBM PC и совмести-
мых с ними, оснащенных дисплейными адаптерами,
поддерживающими графический режим.
Смотри также initgraphregisterbgidriver
Пример:
#include
#include
#include
#include
/* прототипы функций */
int huge detectEGA(void);
void checkerrors(void);
int main(void)
{
int gdriver,gmode;
/* инсталлировать драйвер, написанный пользователем */
gdriver = installuserdriver("EGA",detectEGA);
/* инициировать автоопределение */
gdriver = DETECT;
/* проверить на ошибки инсталляции */
checkerrors();
/* инициализация графики и локальных переменных */
initgraph(&gdriver,&gmode,"");
/* проверить на ошибки иннициализации */
checkerrors();
/* нарисовать линию */
line(0,0,getmaxx(),getmaxy());
/* очистка */
getch();
closegraph();
return 0;
}
/* определение платы EGA или VGA */
int huge detectEGA(void)
{
int driver, mode, sugmode = 0;
detectgraph(&driver,&mode);
if((driver == EGA) || (driver == VGA))
/* вернуть предполачаемый номер режима */
return sugmode;
else
/* вернуть код ошибки */
return grError;
}
/* проверка и сообщение о появлении ошибок */
void checkerrors(void)
{
int errorcode;
errorcode = graphresult();
if(errorcode != grOk)
{
printf("Ошибка графики %s\n",grapherrormsg(errorcode));
printf("Для завершения нажмите любую клавишу... ");
getch();
exit(1);
}
}