Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
7
Добавлен:
01.05.2014
Размер:
5.33 Кб
Скачать
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
<TITLE>13</TITLE>

<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.04z">
</HEAD>
<BODY BGCOLOR="#ffffff">
<H1><A NAME="ch13">13. Определение конфигурации (функция _getvideoconfig())</A>
</H1>
<P>
Одной из первоочередных задач, которые решает программист в процессе
создания собственных приложений, активно использующих возможности
видеоадаптера, является определение типа видеоадаптера и типа
дисплея, подключенных к компьютеру.
<P>
Наиболее простой способ решить эту проблемму в среде Microsoft
Quick C заключается в использовании библиотечной функции _getvideoconfig().
Функция _getvideoconfig() заполняет структуру videoconfig, опреденную
во включаемом файле graph.h следующим образом:
<PRE>
<FONT COLOR=#000080>struct videoconfig {
   numxpixels        // количество пикселов на оси x
   numypixels        // количество пикселов на оси y
   numtextcols       // количество символов в строке
   numtextrows       // количество текстовых строк
   numcolors         // количество используемых цветов
   bitsperpixel      // количество бит видеопамяти на пиксел
   numvideopages     // количество страниц видеопамяти
   mode              // текущий режим работы видеоадаптера
   adapter           // тип активного (первичного) видеоадаптера
   monitor           // тип активного дисплея
   memory            // объем видеопамяти в килобайтах
}
</FONT>
</PRE>
<P>
Поле adapter определяет тип первичного видеоадаптера. Оно может
принимать одно из следующих значений, определенных в файле graph.h:
<HR>
<PRE>
<FONT COLOR=#000080>Константа    Название видеоадаптера

_MDPA        MDA
_CGA         CGA
_OCGA        CGA фирмы Olivetti (AT&amp;T)
_EGA         EGA
_OEGA        EGA фирмы Olivetti (AT&amp;T)
_VGA         VGA
_OVGA        VGA фирмы Olivetti (AT&amp;T)
_MCGA        MCGA (Multicolor Graphics Array)
_HGC         Hercules
</FONT>
</PRE>
<HR>
<P>
Поле monitor определяет тип используемого в данный момент дисплея.
Оно может принимать одно из следующих значений, определенных в
файле graph.h:
<HR>
<PRE>
<FONT COLOR=#000080>Константа           Тип дисплея

_MONO               монохромный
_COLOR              цветной (или улучшенный цветной,
                    эмулирующий цветной)
_ENHCOLOR           улучшенный цветной
_ANALOGMONO         монохромный аналоговый
_ANALOGCOLOR        цветной аналоговый
_ANALOG             аналоговый
</FONT>
</PRE>
<HR>
<P>
Приведем программу, определяющую конфигурацию видеосистемы компьютера,
а также режим ее работы, при помощи функции _getvideoconfig()
из стандартной библиотеки трансляторов Microsoft Quick C 2.5,
Quick C 2.01 и C 6.0:
<PRE>
<FONT COLOR=#000080>#include &lt;stdio.h&gt;
#include &lt;graph.h&gt;

void main(void)
{
   struct videoconfig vc;

   // заполняем поля структуры vc

   _getvideoconfig( &amp;vc );

   // выводим на экран данные,записанные в структуру vc

   printf(&quot;\nТип видеоадаптера: &quot;);
   switch(vc.adapter) {
      case _MDPA : puts(&quot;MDA.&quot;);
                   break;

      case _CGA  : puts(&quot;CGA.&quot;);
                   break;

      case _EGA  : puts(&quot;EGA.&quot;);
                   break;

      case _VGA  : puts(&quot;VGA.&quot;);
                   break;

      case _MCGA : puts(&quot;MCGA.&quot;);
                   break;

      case _HGC  : puts(&quot;Hercules.&quot;);
                   break;

      default    : puts(&quot; неизвестный.&quot;);
   }

   printf(&quot;\nТип дисплея: &quot;);
   switch(vc.monitor) {
      case _MONO        : puts(&quot;монохромный.&quot;);
                          break;

      case _COLOR       : puts(&quot;цветной или эмулирующий его.&quot;);
                          break;

      case _ENHCOLOR    : puts(&quot;улучшенный цветной.&quot;);
                          break;

      case _ANALOGMONO  : puts(&quot;монохромный аналоговый.&quot;);
                          break;

      case _ANALOGCOLOR : puts(&quot;цветной аналоговый.&quot;);
                          break;

      case _ANALOG      : puts(&quot;аналоговый.&quot;);
                          break;

      default           : puts(&quot;неизвестный.&quot;);
   }

   printf(&quot;\nОбъем видеопамяти %dК байт.&quot;, vc.memory );

   printf(&quot;\n\nНомер режима: %d.&quot;, vc.mode );

   printf(&quot;\n\nЧисло доступных страниц видеопамяти: %d.&quot;,
         vc.numvideopages );

   // если режим работы видеоадаптера графический

   if(vc.numxpixels) {
    printf(&quot;\n\nРазрешающая способность:%dx%d пикселов.&quot;,
             vc.numxpixels, vc.numypixels );

    printf(&quot;\n\nКоличесво бит на пиксел: %d.&quot;,
       vc.bitsperpixel );
   }
   printf(&quot;\n\nЧисло символов в строке: %d.&quot;, vc.numtextcols );

   printf(&quot;\n\nЧисло строк: %d.&quot;, vc.numtextrows );

   printf(&quot;\n\nЧисло цветов: %d.&quot;, vc.numcolors );
}</FONT>
</PRE>
<P>
Другим, низкоуровневым способом определения типа первичного видеоадаптера,
является тестирование переменных BIOS, находящихся по адресам
0000:0410 и 0000:0487, а также вызов функций 1Ah и 12h десятого
прерывания.
</BODY>
</HTML>
Соседние файлы в папке Видеоадаптеры