В модуле определены следующие константы цветов:
CONST
Black = 0;{чёрный}
Blue = 1;{синий}
Green = 2;{эелёный}
Cyan = 3;{голубой}
Red = 4;{красный}
Magenta = 5;{фиолетовый}
Brown = 6;{коричневый}
LightGray = 7;{светло-серый}
DarkGray = 8;{тёмно-серый}
LightBlue = 9;{ярко-синий}
LightGreen = 10;{ярко-зелёный}
LightCyan = 11;{ярко-голубой}
LightRed = 12;{розовый}
LightMagenta = 13;{малиновый}
Yellow = 14;{жёлтый}
White = 15;{белый}
Blink = 128;{мерцание символа}
Цвета с кодами от 0 до 7 можно использовать как для цвета символов, указывая в качестве параметра в процедуре TextColor, так и для цвета фона, указывая в качестве параметра в процедуре TextBackGround. Остальные цвета и код мерцания можно использовать только для символов. Чтобы сделать выводимые на экран символы мерцающими, нужно к значению константы определения цвета добавить число 16 или параметр Blink, например:
TextColor(4+Blink).
В модуле определены следующие переменные:
Var
WindMin,WindMax: word;
TextAttr: byte;
LastMode: word;
DirectVideo: boolean;
CheckShow: boolean;
CheckBreak:boolean;
CheckEof: boolean;
В переменные WindMin, WindMax процедура Window заносит координаты текущего окна. В каждой из этих переменных младший байт содержит x-координату, а старший y–координату. Извлечь значения x и y можно с помощью встроенных функций языка Турбо Паскаль Lo и Hi:
x1:=Lo(WindMin)+1;
x2:=Lo(WindMax)+1;
y1:=Hi(WindMiN)+1;
y2:=Hi(WindMax)+1;
где x1, y1, x2, y2 – координаты диагонали окна. Значения координат в переменных WindMin и WindMax отсчитываются от нуля, поэтому ко всем значениям прибавлена единица.
Переменная TextАttr содержит байт атрибутов для текущего способа вывода. Из переменной ТextАttr можно выделить цвет фона и цвет символов в виде значений целого типа: значение выражения TextАttr and $7 – соответствует цвету символа, значение выражения (Тextаttr and $70) shr 4 – соответствует цвету фона.
В переменную LastMode помещается значение текущего текстового режима, установленного процедурой TextMode.
Переменная DirectVideo позволяет или запрещает непосредственную запись информации процедурами write, writeln в видеопамять через механизм CRT, который автоматически включается при подключённом модуле CRT. Стартовое значение True переменной DirectVideo способствует выводу информации на дисплей максимально быстрым способом. При установке переменной в false эти процедуры будут использовать прерывание $10, и вывод на экран будет осуществляться с меньшей скоростью.
Переменная CheckShow разрешает (если равна true) или запрещает (в случае false) появление “снега” для видеоадаптера CGA.
Переменная CheckBreak управляет реакцией программы на комбинацию клавиш Ctrl+Break. Если эта переменная равна true, комбинация Ctrl+Break вызывает прекращение работы программы, в противном случае никакой реакции на эту комбинацию не происходит.
Переменная CheckEof управляет размещением признака конца файла. Если эта переменная равна true, комбинация клавиш Crtl+Z помещает в файл признак конца файла, в противном случае эта комбинация не вызывает никакого действия.
Опрос клавиатуры
В Ms-Dos реализуется асинхронный буферизованный ввод с клавиатуры. По мере нажатия на клавиши соответствующие коды помещаются в буфер. Из буфера они могут быть прочитаны программой. Стандартная длина буфера рассчитана на хранение до 16 кодов символов. Буфер может оказаться переполненным. При этом раздаётся звуковой сигнал и ''лишние'' коды теряются. Чтение из буфера обеспечивается процедурами read, readln и функцией readkey. Функция readkey возвращает значение типа char из буфера клавиатуры, если в нём есть хотя бы один не прочитанный символ (код этого символа берётся из буфера и возвращается в качестве значения функции). Если буфер пуст, функция будет ожидать нажатия на любую клавишу. Ввод функцией readkey не сопровождается эхо-повтором и содержимое экрана не меняется. При использовании функции readkey необходимо помнить, что в клавиатурный буфер помещаются расширенные коды нажатых клавиш. Для алфавитно-цифровых клавиш расширенный код совпадает с ASCII-кодом. Например, код, соответствующий, символу ''a'' – chr(97), симвoлу ''A'' – chr(65). При использовании функциональных клавиш F1..F10, Ins, Home, Del, End, Pgup, Pgdn,,,, ↑ ↓ → ← в буфер помещается двухбайтная последовательность: сначала #0, затем расширенный код клавиши. Таким образом, значение #0, возвращаемое функцией, используется для того, чтобы указать программе на генерацию расширенного кода. Получив это значение, программа должна ещё раз обратиться к функции, чтобы прочитать расширенный код клавиши (то есть код сканирования клавиши). Пример программы определения расширенного кода любой клавиши:
Uses CRT;
Var c: char;
Begin
Repeat
c:=readkey;
If c<>#0 then
Writeln(ord(c))
Else
Writeln('0',ord(readkey))
Until c=#27 {27 – код клавиши ESC}
End.
Функция KEYPRESSED возвращает значение типа boolean, указывающее состояние буфера клавиатуры: значение false – если буфер пуст, значение true – если в буфере есть хотя бы один символ, ещё не прочитанный программой.
Пример. Игнорировать ранее прочитанные клавиши (очистить буфер ввода).
Uses CRT;
Var c: char;
Begin
While keypressed do
C:=readkey
End.
А вот пример оператора ожидания нажатия любой клавиши: Repeat until keypressed.