Сегодня первый выпуск рассылки, не знаю будет ли читать ее кроме
меня. Сегодня в нашем выпуске:
1. ) Работе с экраном в текстовом режиме и что использовать для
крашения программ.
1. ) аботе с экраном в текстовом режиме и что использовать для
крашения программ.
Текстовый режим экрана, структура видеопамяти.
Текстовые режимы были первыми, появившимися на экранах компьютеров. В свое время
даже существовали мониторы вообще не имевшие возможности отображать графическую
информацию (алфавитно-цифровые терминалы). В применении к 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), что позволяет
не заботится о выводе только
в пределах окна и подобных им.