В систему программирования Турбо-Пролог включено пять предикатов, позволяющих программе управлять окнами различных размеров. Это предикаты makewindow, shiftwindow, removewindow, clearwindow и gotowindow. С их помощью можно создавать несколько окон, выполнять ввод и вывод в определенные окна и устанавливать атрибуты окон.
Создание окон предикатом makewindow.
Предикат makewindow является основой всех операций над окнами в Турбо-Прологе. Его синтаксическая форма:
makewindow (Window_number, Screen_attribute, Frame_attribute, Frame_string, Starting_row, Starting_column, Window_height, Window_width)
Значения восьми параметров определяют характеристики окна.
Параметр Window_number, целое число, идентифицирует окно в программе. Это число используется в качестве ссылки предикатом gotowindow и др.
Целочисленное значение, присвоенное аргументу Screen_attribute, определяет цвета символов и фона. Выбираемые значения атрибута зависят от того, какой монитор используется цветной или монохромный.
Целочисленные значения Screen_attribute задают комбинацию цветов текста и фона. Для монохромных мониторов эти значения приведены табл. 1. Значения атрибутов экрана для цветного графического адаптера приведены в табл. 2.
Таблица 1.
Атрибуты цвета
Цвет текста | Цвет фона | Screen_attribute | Примечание |
Черный | Черный | Пустой экран | |
Белый | Черный | Позитивное изображение | |
Черный | Белый | Негативное изображение |
Таблица 2.
Соответствие между значением атрибута, цветом текста и цветом фона для окон Турбо-Пролога.
Цвет текста | Значение атрибута | Цвет фона | Значение атрибута | ||
Черный | Черный | ||||
Синий | Синий | ||||
Зеленый | Зеленый | ||||
Голубой | Голубой | ||||
Красный | Красный | ||||
Фиолетовый | Фиолетовый | ||||
Коричневый | Коричневый | ||||
Белый | Белый | ||||
Серый | |||||
Светло-синий | |||||
Светло-зеленый | |||||
Светло-голубой | |||||
Светло-красный | |||||
Светло-голубой | |||||
Желтый | |||||
Интенсивно-белый | |||||
Наряду с указанным существуют три необязательных атрибута, задание которых определяет вывод символов с подчеркиванием, изображение с высоким разрешением и вывод мерцающих символов. Вывод символов с подчеркиванием реализуется, если к значению аргумента Screen_attribute добавить 1. Для получения изображения с высоким разрешением, нужно к основному значению атрибута экрана добавить 8. Символы будут мерцающими, если к значению атрибута экрана добавить 128.
Чтобы вычислить значение Screen_attribute для различных комбинаций цветов, прежде всего, выберите необходимый цвет текста и цвет фона. Затем сложите соответствующие значения атрибутов. Если вы хотите, чтобы символы мерцали, прибавьте к результирующему значению 128. Вычисленное значение используется как второй аргумент в предикате makewindow, т.е. Screen_attribute.
Чтобы создать окно с белыми символами на черном фоне, сложите 7 (белый текст) и 0 (черный фон), результат будет 7.
Аргумент Frame_attribute предиката makewindow есть целое число, значение которого определяет рамку окна. Если значение атрибута - 0, окно не имеет видимой границы. Другие значения определяют рамку окна с параметрами, указанными в табл. 3.
Часть значений атрибута рамки окна задает ее цвет. Это делается аналогично заданию значения атрибута экрана. Если задается мерцающая граница, то она всегда будет белой, с мерцающей тонкой линией (в середине границы), имеющей указанный цвет.
Аргумент Frame_string задает метку окна. Например, меткой окна может быть "Главное Меню", "Окно Вывода". Строка, задаваемая в качестве атрибута Frame_string, будет размещена в центре верхней линии рамки окна. Значение метки окна также может быть не определено, что соответствует отсутствию метки. В этом случае вводится аргумент, состоящий из двух последовательных знаков кавычки.
Таблица 3.
Значение атрибута, определяющего цвет рамки окна в Турбо-Прологе.
Значение атрибута | Вид рамки окна |
Нет рамки | |
Синяя рамка | |
Зеленая рамка | |
Светло-синяя рамка | |
Красная рамка | |
Фиолетовая рамка | |
Желтая рамка | |
Белая рамка | |
Коричневая рамка | |
-1 | Мерцающая белая рамка |
-2 | Мерцающая желтая рамка |
-3 | Мерцающая фиолетовая рамка |
-4 | Мерцающая красная рамка |
-5 | Мерцающая светло-синяя рамка |
-6 | Мерцающая светло-зеленая рамка |
-7 | Мерцающая синяя рамка |
-8 | Мерцающая серая рамка |
Аргумент Starting_row есть целое число, определяющее верхнюю строку (линию) создаваемого окна. Максимальное количество строк, умещающихся на экране, 25. Значение 4 указывает, что окно начинается с четвертой строки. Нумерация начинается с 0.
Аргумент Starting_column указывает крайний левый столбец окна. Значения аргумента изменяются от 0 до 79.
Аргумент Window_height определяет количество строк, занимаемых создаваемым окном.
Аргумент Window_width указывает число столбцов, занимаемых окном.
Предикат shiftwindow используется для смены текущего окна (переключения). Его форма: shiftwindow(Window_number).
Параметр window_number является целым числом, приписываемым окну при его создании.
В то же время Турбо-Пролог "помнит" предыдущие окна и их атрибуты. Например, если окно 3 имеет такие атрибуты, что оно будет перекрывать текущее окно (окно 4), то выполнение предиката shiftwindow (3) вызовет появление окна 3, в которое вложено окно 4. Информация из окна 4, частично закрытая окном 3, сохраняется и появится на экране, когда произойдет переключение и окно 4 вновь станет текущим.
Предикат gotowindow позволяет выполнять быстрое переключение между двумя окнами, которые не перекрываются. Его форма: gotowindow (Window_number).
Этот предикат выполняется быстрее, чем shiftwindow, и поэтому его следует использовать для переключения между окнами, содержащими большое количество текста.
Предикат clearwindow. Данный предикат удаляет из текущего окна все текстовые и графические изображения. Предикат не имеет аргументов. Окно и рамка окна, если она имеется, не разрушаются. Окно целиком закрашивается соответствующим цветом фона.
Предикат removewindow удаляет текущее окно с экрана. Предикат аргументов не имеет. Все текстовые и графические изображения, находящиеся в окне, также удаляются. Если за данным окном находится другое окно, то это окно и его содержимое становятся видимыми. Если удаляется последнее из заданных окон, на экране появляется то изображение, которое было на нем до создания окон.