3. Текстовый режим работы видеоадаптера
Из предыдущих лекций Вам уже известно, что современные видеоадаптеры могут работать в различных видеорежимах, которые можно подразделить на текстовые и графические. Часть функций текстового вывода также уже рассмотрена. В основном эти функции рассчитаны на потоковый вывод информации и могут быть использованы как для вывода на экран, так и для вывода в файл. В данной лекции приводится описание функций, позволяющих работать с текстовой информацией на экране более сложным образом. Эти функции не могут применяться для вывода в файл, так как они используют особенности видеопамяти, предоставляющей произвольный доступ к содержимому (в отличие от потоковых механизмов работы с файлами).
Рассмотрим подробнее работу видеоадаптера в текстовом режиме. Экран в текстовом режиме разбивается на столбцы и строки символов. Количество столбцов и строк зависит от установленного видеорежима. Размеры экрана для стандартных видеорежимов приведены в табл. 1. По умолчанию программы под MS-DOS работают в цветном видеорежиме 80×25 (C80), однако при запуске их под Windows NT/2000/XP система предлагает по умолчанию видеорежим 80×50 (C4350). Для обеспечения корректной работы программ нужно либо устанавливать режим самостоятельно (функцией textmode), либо определять размеры экрана (функцией gettextinfo) и осуществлять вывод с учетом полученных значений.
Помимо перечисленных, в современных видеоадаптерах существуют режимы с шириной экрана, равной 132 символа. В этих режимах на экран помещается значительно больше информации. В то же время качество вывода текста практически не ухудшается, так как современные мониторы поддерживают значительно большие разрешения и имеют большие размеры экрана, чем на заре развития ЭВМ. Однако эти режимы не поддерживаются Borland C++, потому что они появились несколько позже соответствующих библиотек языка Си.
Таблица 1
Характеристики текстовых видеорежимов
Размеры экрана | Количество цветов | Константа Си |
40×25 | 16 оттенков серого | BW40 |
40×25 | 16 цветов | C40 |
80×25 | 16 оттенков серого | BW80 |
80×25 | 16 цветов | C80 |
80×25 | 2 (монохромный) | MONO |
80×43 (EGA) 80×50 (VGA) | 16 цветов | C4350 |
Под один символ выделяется так называемое знакоместо – область экрана, находящаяся на пересечении строки и столбца. Все знакоместа имеют одинаковый размер и составляют прямоугольную матрицу. В одном знакоместе может быть записан только один символ.
На каждое знакоместо в видеопамяти отводится два байта. В один из них записывается ASCII-код символа, который должен выводиться в соответствующем месте экрана. Другой байт называется байтом атрибутов текста и содержит информацию о цвете символа. Младшие 4 бита атрибутов определяют цвет текста, старшие – цвет фона. Коды цветов приведены в табл. 2. Знакоместа записываются в видеопамяти последовательно слева направо, сверху вниз.
Таблица 2
Коды цветов текстового режима
Код | Цвет | Константа Си | Код | Цвет | Константа Си |
0 | Черный | BLACK | 8 | Черный | DARKGRAY |
1 | Темно-синий | BLUE | 9 | Светло-синий | LIGHTBLUE |
2 | Темно-зеленый | GREEN | 10 | Светло-зеленый | LIGHTGREEN |
3 | Темно-голубой | CYAN | 11 | Светло-голубой | LIGHTCYAN |
4 | Темно-красный | RED | 12 | Светло-красный | LIGHTRED |
5 | Темно-розовый | MAGENTA | 13 | Светло-розовый | LIGHTMAGENTA |
6 | Коричневый | BROWN | 14 | Желтый | YELLOW |
7 | Светло-серый | LIGHTGRAY | 15 | Белый | WHITE |
Поскольку на один символ тратится всего два байта, текстовый режим является очень экономным с точки зрения расходования видеопамяти. Своеобразным побочным эффектом такой экономии является значительное упрощение функций работы с экраном и более высокое быстродействие этих функций. Особенно хорошо это заметно на старых компьютерах без аппаратного ускорения графики.
За формирование изображения на экране из ASCII-кодов и атрибутов текста отвечает видеоадаптер. Программисту не приходится затрачивать для этого практически никаких усилий. Преобразование ASCII-кода в растровый образ символа, выводимый на экран, осуществляется «на лету» в процессе развертки кадра. При этом используется шрифт, который либо «прошит» в ПЗУ видеоадаптера, либо заранее загружен из ОЗУ пользователем. Шрифты, используемые по умолчанию в системе MS-DOS, содержат во второй половине таблицы европейские символы. В связи с этим для вывода кириллицы в текстовом режиме требуется настройка системы на 866 кодовую страницу либо установка русификатора перед запуском программы. И в том, и в другом случае с диска подгружается русифицированный шрифт и устанавливается в качестве текущего шрифта для видеоадаптера.
Помимо символов, в текстовом режиме автоматически формируется изображение текстового курсора, который находится в заданной позиции на экране и имеет заданный внешний вид. Под внешним видом понимается высота курсора: он может выглядеть как черточка под символом, может покрывать все знакоместо или вообще быть отключен.
Система координат на экране выглядит так же, как и в графическом режиме: ось X направлена вправо, ось Y – вниз. Левый верхний угол имеет координаты (1; 1), в отличие от графического режима (где он имеет нулевые координаты). Во многих случаях текстовые функции Си работают не непосредственно с экраном, а с некоторой его прямоугольной областью, называемой окном вывода. По умолчанию окно занимает весь экран, но его координаты могут быть изменены программистом. При выводе в окно содержимое экрана за пределами окна не изменяется, а перенос слишком длинных строк производится по границе окна, а не экрана.
4. Функции текстового режима
Для использования описанных ниже функций необходимо подключить заголовочный файл <conio.h>.
4.1 Общие параметры
void textmode(int newmode)
Устанавливает заданный текстовый видеорежим (см. табл. 1).
void window(int left, int top, int right, int bottom)
Устанавливает новое текстовое окно. Задание некорректных координат приводит к игнорированию обращения к функции window. Параметры left и top задают координаты экрана для верхнего левого угла окна, bottom и right определяют координаты экрана для нижнего правого угла окна.
По умолчанию окно занимает весь экран. Например, в режиме 80×25 по умолчанию координаты окна равны 1,1,80,25.
void gettextinfo(struct text_info *pinfo)
Заполняет структуру text_info, на которую указывает pinfo, видеоинформацией о текущем режиме. С помощью этой функции, в частности, можно узнать текущие координаты окна, установленный видеорежим, размеры экрана.
... типами устройств. Согласованность составных систем является балансом между согласованностью физической, синтаксической, семантической и стремлением получить преимущества оптимальных возможностей системы. ПРЕИМУЩЕСТВА СОГЛАСОВАННОГО ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ Согласованный интерфейс приносит пользователям и разработчикам экономию времени и средств. Пользователи выигрывают от того, если им понадобится ...
... недостаточно). Возможно включение комплекса в план учебного процесса, для обучения студентов. 2. Специальная часть разработка программного обеспечения для организации интерфейса программно-методического комплекса 2.1 Разработка технического задания на реализацию специальной части дипломного проекта Наименование программного изделия - "Интерфейс программно - методического комплекса для ...
... (магнитные диски и ленты, электронно-лучевые трубки и т.д.), реализация которых возможна лишь специальными контроллерами. Сложность внешнего интерфейса определяется как сложностью периферийных устройств, так и степенью совместимости их с ЭВМ. Под совместимостью будем понимать возможность объединения отдельных компонентов системы в единую операционную сеть посредством программных и аппаратных ...
... неудобной системой, особенно если рядом нет удобной системы с аналогичными возможностями. С пользователем-любителем все наоборот. Пока в уголовном кодексе не предусмотрено наказание типа "заключения в пользовательский интерфейс", он имеет право выбора (не между одной программой и другой, а между компьютером и телевизором или даже книгой). Он хочет за компьютером развлекаться, и тратить время и ...
0 комментариев