Вот и подошёл к концу наш конкурс! Поздравляем победителей!!! Подробнее.
Проект Programmers.kz и школа hotPen3D2D предлагает Вам курсы по веб-дизайну, веб-программированию и компьютерной графике. Подробности здесь.
- Просмотров: 1390
- Автор: КазКиберГетик
Операции с текстовым экраном
Категория: Программирование » Pascal / Turbo Pascal » Уроки Pascal
Текстовый режим экрана,
структура видеопамяти
Текстовые режимы были первыми, появившимися на экранах компьютеров. В свое время даже существовали мониторы вообще не имевшие возможности отображать графическую информацию (алфавитно-цифровые терминалы). В применении к IBM РС-совместимым компьютерам, о текстовых режимах можно говорить как о наиболее общих для всех моделей. Как следствие изучение их представляет достаточный интерес.
С другой стороны, несмотря на свою простоту, текстовые режимы в IBM PC (под MS-DOS) обладают достаточно широкими возможностями, в частности, являются оконно-ориентированными. В данном контексте изучение и использование таких режимов может быть полезным с методических целей: без особой технической сложности в них реализуются оконные интерфейсы и, как следствие программы, управляемые событиями обретают наглядность.
Наиболее часто используемым режимом является режим 03 и его модификации. Экран в данном режиме разделен на 25 строк и 80 столбцов, что позволяет адресовать 2000 ячеек, называемых знакоместами. На каждом знакоместе может быть отображен один из 256 символов, образы которых содержатся в таблицах знакогенератора. Каждый символ таким образом кодируется одним байтом. Как правило кодирование производится в соответствии с одной из таблиц ASCII. Преобразование однобайтового кода символа в его изображение производится аппаратно.
Коды символов, отображаемых в каждый момент на экране хранятся в видеопамяти. Видеопамять в текстовом режиме с точки зрения программиста представляет собой часть адресного пространства ЦВМ, начинающуюся с адреса B800:000 и кончающуюся B800:7FFF. Так как на описание одного знакоместа требуется 2 байта (код символа и атрибут) существует возможность хранить (и последовательно отображать на экране) до 8 страниц (отдельных изображений).
Как упоминалось выше содержимое каждого знакоместа описывается не только кодом символа, но и атрибутом. Атрибут характеризует цвет, которым отображаются символ и фон за ним. В видеопамяти коды символов располагаются по четным адресам, а атрибуты - по нечетным.
Вывод символа на экран как следствие вышесказанного производится записью пары байт в некоторое место видеопамяти, определяемое активной страницей и положением знакоместа на ней. Делается это либо с помощью прямого обращения либо с использованием функций BIOS или DOS.
Такого рода вывод достаточно утомителен с точки зрения высокоуровневого программирования; вследствие этого, как уже упоминалось в ЯП высокого уровня включают механизмы ввода-выода.
Цвета и окна,
или сделаем программы красивыми
Стандартно Pascal предполагает работу с текстовым экраном с помощью процедур и функций модуля CRT. Однако не запрещается работа с видеопамятью напрямую. Один из вариантов прямых обращений к видеопамяти реализован в модуле Direct_V. Вторым способом является размещение двумерного массива по абсолютному адресу начала видеопамяти. Главным недостатком прямого доступа является отсутствие каких бы то ни было функций работы с окнами, позиционирования курсора и т.п., который приходится реализовывать непосредственно программисту. С другой стороны, программист может реализовать те же функции более эффективно, чем программисты Borland International (в настоящее время - часть Inprise Corporation).
Модуль CRT содержит следующие процедуры и функции для работы с текстовым экраном (более подробную информацию можно получить из справочной системы, int-файла или исходного текста модуля).
| procedure AssignCrt(var F: Text); | ассоциирует текстовый файл с экраном |
| procedure TextMode(Mode: Integer); | устанавливает текстовый режим с соответствующим номером |
| procedure Window(X1,Y1,X2,Y2: Byte); | организует окно вывода в абсолютных координатах |
| procedure GotoXY(X,Y: Byte); | позиционирует курсор в локальных координатах |
| function WhereX: Byte; | возвращает Х-координату курсора |
| function WhereY: Byte; | |
| procedure ClrScr; | очищает текущее окно |
| procedure ClrEol; | очищает строку от курсора до границы окна |
| procedure InsLine; | вставляет строку в окно (в позиции курсора) |
| procedure DelLine; | удаляет строку |
| procedure TextColor(Color: Byte); | устанавливает цвет выводимых символов |
| procedure TextBackground(Color: Byte); | то же для фона |
| procedure LowVideo; | уменьшает яркость текущих атрибутов |
| procedure HighVideo; | увеличивает яркость текущих атрибутов |
| procedure NormVideo; | восстанавливает первоначальные атрибуты вывода |
Приведенные процедуры и функции позволяют организовывать различные текстовые интерфейсы, в том числе и многооконные. Главным достоинством данного модуля является его полная согласованность с процедурами Write(ln) и Read(ln), что позволяет не заботится о выводе только в пределах окна и подобных им.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.




