CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по функциям C/C++
installuserdriver
installuserdriver
Функция Добавляет дополнительные драйверы устройств в
таблицу драйверов устройств BGI.
Синтаксис #include <graphics.h>
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 дал вам эту функцию
автодетектирования). Когда вы добавите драйвер с
помощью installuserdriver, вы передадите адрес
этой функции вместе с именем файла драйвера
устройства.
После того как вы добавили имя файла драйвера и
SGA-функцию автодетектирования, вы вызываете
initgraph и позволяете ему выполнять нормальный
процесс автодетектирования. Перед тем как
initgraph вызовет встроенную функцию
автодетектирования(detectgraph), он вызовет
SGA-функцию автодетектирования. Если эта
SGA-функция не находит аппаратные средства SGA,
она возвращает значение -11 (grError), а initgraph
продолжает нормальный процесс автодетектирования,
который может включать вызов других поставленных
производителем функций автодетектирования в том
порядке в каком они были добавлены). Если же,
однако, функция определит, что SGA присутствует,
она возвращает неотрицательный номер режима; затем
initgraph находит и загружает SGA.BGI, переводит
аппаратные средства в графический режим,
рекомендуемый функцией автодетектирования, и,
наконец, передает управление вашей программе.
Одновременно может быть добавлено до десяти
драйверов.
Возвращаемое Значение возвращаемое installuserdriver - это
значение номер драйвера, который вы передадите в initgraph
для того, чтобы выбрать вручную вновь добавленный
драйвер.
Переносимость Функция уникальна для Borland C++. Эта функция
пригодна только для компьютеров IBM PC и
совместимых с ними, оснащенных дисплейными
адаптерами, поддерживающими графический режим.
Функция не совместима с Windows.
Смотри также initgraph, registerbgidriver
Пример:
#include<graphics.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
/* прототипы функций */
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);
}
}
