HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail


 
 

Turbo Pascal Documentation

Функция InstallUserDriver

Модуль Graph


     Функция: Включает в таблицу драйверов  устройств  фирма
BGI (Борланд) драйверы, поставляемый другими фирмами.
     Описание: InstallUserDriver(имя : string; AutoDetectPtr
: pointer)
     Тип результата: слово (word).
     Примечания: Данная процедура позволяет вам использовать
драйверы устройств, отличающиеся от драйверов фирмы Борланд.
Параметр "имя" представляет собой имя нового  драйвера  уст-
ройства.  AutoDetectPrt  -  это  указатель на необязательную
функцию автоматического распознавания, которая может  прила-
гаться  к  новому драйверу. Эта функция автоматического рас-
познавания не требует параметров и возвращает  целое  значе-
ние.
     Если внутренняя таблица драйверов заполнена, то  проце-
дура  InstallUserDriver возвращает значение -11 (grError). В
противном случае данная процедура присваивает  и  возвращает
для нового драйвера устройства номер этого драйвера.
     Драйвер пользователя можно использовать двумя  способа-
ми. Предполохим, у вас имеется новая видеоплата SGA и фирма,
изготовливающая  эту  плату,  поставляет  для  нее   драйвер
SGA.BGI. Наиболее простой способ использования этого драйве-
ра   состоит   в   его   установке   с   помощью   процедуры
InstallUserDriver и передачи возвращаемого значения (присво-
енного номера драйвера) непосредственно процедуре InitGraph:

  var
    Driver, Mode : integer;
  begin
    Driver := InstallUserDriver('SGA.BGI', Nil);
    if Driver = grError then   { таблица переполнена? }
       Halt(1);
    Mode := 0;      { каждый драйвер поддерживает режим 0 }
    InitGraph(Driver, Mode, ''); { изменить автоматическое
                                   распознавание }
    ...             { нет графики }
  end.

     Значение nil параметра AutoDetectPtr  при  обращении  к
процедуре  InstallUserDriver  показывает,  что для платы SGA
функция автоматического распознавания отсутствует.
     Другой, более общепринятый способ состоит в использова-
нии этого драйвера для связи функции автоматического распоз-
навания,  которая  будет  вызываться  при  работе  процедуры
InitGraph. Предположим, фирма-изготовитель платы SGA предос-
тавила вам функцию  автоматического  распознавания,  которая
выглядит следующим образом:

  {F+}
   function DetectSGA : integer;
  var Found : Boolean;
  begin
    DetectSGA := grError; { предположим, плата отсутствует }
    Found := ...           { поиск соответствующего аппарат-
                             ного обеспечения }
    if not Found then
       Exit;               { код возврата = -11 }
    DetectSGA := 3;        { возвратить рекомендуемый и наз-
                             начаемый по умолчанию видео-
                             режим }
  end.
  {F-}

     Задача функции DetectSGA состоит в поиске во время  ра-
боты  программы аппаратного обеспечения SGA. Если плата SGA
не обнаружена, то данная  функция  возвращает  значение  -11
(grError).  В  противном случае возвращаемое значение предс-
тавляет собой принятый по умолчанию видеорежим для платы SGA
(обычно он обеспечивает наилучшее сочетание цвета и разреша-
ющей сопсобности, которые можно достичь на данном аппаратном
обеспечении).
     Заметим, что эта фукнция не требует параметров и  возв-
ращает  целочисленное  значение  со знаком. Она должна иметь
дальний тип обращения. При установке драйвера (путем обраще-
ния  к  процедуре  InstallUserDriver)  вы передаете наряду с
именем  файла,   содержащего   драйвер   устройства,   адрес
DetectSGA:

  var
    Driver, Mode : integer;
    begin
      Driver := InstallUserDriver('SGA.GBI', @DetectSGA);
      if Driver = grError then
         Halt(1);
      Driver := Detect;
      { не будем учитывать драйвер SGA, доверимся средствам
        автоматического распознавания }
       InitGraph(Driver, Mode, '');
      ...
  end.

     После того, как  вы  установите  драйвер  устройства  и
функцию  автоматического распознавания, можно вызвать проце-
дуру InitGraph, которая выполнит обычный  процесс  автомати-
ческого  распознавания.  Перед  тем, как процедура InitGraph
вызывает свою встроенную функцию автоматического распознава-
ния  (DetectGraph),  она вызывает сначала функцию DetectSGA.
Если DetectSGA не найдет аппаратных средств SGA, то  возвра-
щается значение -11 (grError), а процедура InitGraph продол-
жит выполнение обычного процесса автоматического распознава-
ния (который также может включать в себы вызов пользователь-
ских функций автоматического распознавания в том порядке,  в
котором они были установлены). Если же функция DetectSGA оп-
ределит наличие SGA, то она возвращает неотрицательное  зна-
чение  режима,  а  InitGraph найдет и загрузит файл SGA.BGI,
переведет аппаратное обеспечение в нужный режим  (рекомендо-
ванный  функцией  DetectSGA) и, наконец, передаст управление
вашей программе.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Прочее: См. также процедуры  InitGraph  и  RegisterBGI-
Driver.
     Пример:

uses Graph;
var
   Driver, Mode,
   TestDriver,
   ErrCode : integer;
{F+}
function TestDetect : integer;
{ фукнция автоматического распознавания: если имеются
   соответствующие аппаратные средства, она возвращает
   значение, равное соответствующему принимаемому по
   умолчанию режиму }
begin
    TestDetect := 1;  { по умолчанию режим = 1 }
end;
{F-}
begin
   { установить драйвер }
   TestDriver := InstallDriver('TEST', @TestDetect);
   if GraphResult <> grOk then
   begin
     Writeln('Ошибка при установке драйвера');
     Halt(1);
   end;
   Driver := Detect; { перейти в графический режим }
   InitGraph(Driver, Mode, '');
   ErrCode := GraphResult;
   If ErrCode <> grOk then
   begin
     Writeln('Устанавливаемый драйвер поддерживается...');
     Readln;
     CloseGraph;
  end.




HOME