Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

13

13. Определение конфигурации (функция _getvideoconfig())

Одной из первоочередных задач, которые решает программист в процессе создания собственных приложений, активно использующих возможности видеоадаптера, является определение типа видеоадаптера и типа дисплея, подключенных к компьютеру.

Наиболее простой способ решить эту проблемму в среде Microsoft Quick C заключается в использовании библиотечной функции _getvideoconfig(). Функция _getvideoconfig() заполняет структуру videoconfig, опреденную во включаемом файле graph.h следующим образом:

struct videoconfig {
   numxpixels        // количество пикселов на оси x
   numypixels        // количество пикселов на оси y
   numtextcols       // количество символов в строке
   numtextrows       // количество текстовых строк
   numcolors         // количество используемых цветов
   bitsperpixel      // количество бит видеопамяти на пиксел
   numvideopages     // количество страниц видеопамяти
   mode              // текущий режим работы видеоадаптера
   adapter           // тип активного (первичного) видеоадаптера
   monitor           // тип активного дисплея
   memory            // объем видеопамяти в килобайтах
}

Поле adapter определяет тип первичного видеоадаптера. Оно может принимать одно из следующих значений, определенных в файле graph.h:


Константа    Название видеоадаптера

_MDPA        MDA
_CGA         CGA
_OCGA        CGA фирмы Olivetti (AT&T)
_EGA         EGA
_OEGA        EGA фирмы Olivetti (AT&T)
_VGA         VGA
_OVGA        VGA фирмы Olivetti (AT&T)
_MCGA        MCGA (Multicolor Graphics Array)
_HGC         Hercules


Поле monitor определяет тип используемого в данный момент дисплея. Оно может принимать одно из следующих значений, определенных в файле graph.h:


Константа           Тип дисплея

_MONO               монохромный
_COLOR              цветной (или улучшенный цветной,
                    эмулирующий цветной)
_ENHCOLOR           улучшенный цветной
_ANALOGMONO         монохромный аналоговый
_ANALOGCOLOR        цветной аналоговый
_ANALOG             аналоговый


Приведем программу, определяющую конфигурацию видеосистемы компьютера, а также режим ее работы, при помощи функции _getvideoconfig() из стандартной библиотеки трансляторов Microsoft Quick C 2.5, Quick C 2.01 и C 6.0:

#include <stdio.h>
#include <graph.h>

void main(void)
{
   struct videoconfig vc;

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

   _getvideoconfig( &vc );

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

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

      case _CGA  : puts("CGA.");
                   break;

      case _EGA  : puts("EGA.");
                   break;

      case _VGA  : puts("VGA.");
                   break;

      case _MCGA : puts("MCGA.");
                   break;

      case _HGC  : puts("Hercules.");
                   break;

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

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

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

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

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

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

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

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

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

   printf("nnНомер режима: %d.", vc.mode );

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

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

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

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

   printf("nnЧисло строк: %d.", vc.numtextrows );

   printf("nnЧисло цветов: %d.", vc.numcolors );
}

Другим, низкоуровневым способом определения типа первичного видеоадаптера, является тестирование переменных BIOS, находящихся по адресам 0000:0410 и 0000:0487, а также вызов функций 1Ah и 12h десятого прерывания.


  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте