На этом шаге мы рассмотрим способы управления экраном в системе muLISP85.
Функции экрана дисплея предназначены для выдачи на экран и форматирования с экрана текста - это функции создания окон, изменения положения курсора и "свертки" текста. Переменные экрана дисплея обеспечивают управление такими атрибутами, как мерцание, инверсное изображение, яркость и автоматическая свертка экрана.
Процедуры, которые muLISP может использовать для выполнения различных экранных операций, отличаются друг от друга для различных компьютеров и (или) дисплеев. Следовательно, когда система muLISP "стартует" первый раз, она пытается сразу определить тип ЭВМ. Если это удается сделать, об этом указывается во второй строке сообщения muLISP.
Если же система не может определить тип ЭВМ, выдается другое сообщение:
1 = Other generic MS-DOS computer
2 = IBM PC or "look-alike" computers
3 = ANSI.SYS screen or VT-100 Terminal
4 = TI Professional Computer
5 = Zenith Z-100 Computer or VT-52 Terminal
6 = Hewlett-Packard HP-150 Computer
7 = Hewlett-Packard HP-110 Computer
8 = NEC Advanced Personal Computer or ADM-3A Terminal
Please enter your computer type number:
Если и здесь не указан тип Вашей ЭВМ, то выберите тип "1". Однако в этом случае многие из действий, рассматриваемых в данном приложении, будут недействительными и возвратят NIL.
Программа на языке muLISP может определить тип ЭВМ путем проверки байта типа, который расположен в базовой странице muLISP со смещением 855 в десятичной системе.
Следовательно, функция:
(CSMEMORY 855)
возвратит номер типа ЭВМ - положительное целое число.
Далее будем считать, что экран дисплея имеет 25 строк и 80 столбцов (колонок). Для экранов других размеров следует заменить данные величины на требуемые, согласно типу экрана.
Верхний левый угол экрана (исходное положение) соответствует нулевой строке и нулевой колонке. Курсор экрана дисплея - это мерцающий пучок света на экране, состоящий из одной или более горизонтальных линий длиной в 1 символ. Для монохромного дисплея курсор может включать в себя до 14 строк, для графического дисплея - до 8 строк. В любом случае, линии курсора нумеруются, начиная с 0.
Перечислим функции и управляющие переменные системы muLISP85, предназначенные для работы с экраном дисплея.
Перемещение курсора в требуемую строку и колонку экрана. | |
Возвращают соответственно положение курсора в строке и колонке согласно текущему окну. | |
"Чистит" текущее окно. | |
Вставка пустых строк. | |
Удаление строк. | |
Создание окна. | |
Установка цвета текста и фона. | |
Устанавливает линии начала и конца курсора. | |
Установка страницы видеопамяти. | |
Разрешение/запрещение автоматической вставки новой строки. | |
Разрешение/запрещение мигания символов. | |
Разрешение/запрещение повышенной яркости. |
1. Если ROW и COLUMN равны 0 или являются положительными целыми числами, меньшими 25 и 80
соответственно, то функция (SET-CURSOR ROW COLUMN) перемещает курсор в требуемую строку и колонку экрана
и выдает Т. В противном случае возвращается NIL.
В примере показано, как возвратить курсор в исходное положение; при этом в верхнем левом углу окна выдается "Т":
$ (SET-CURSOR 0 0)
T
Функция (SET-CURSOR) возвращает список из двух чисел, задающих текущую позицию курсора.
В начало таблицы
2. Функции (ROW) и (COLUMN) возвращают соответственно положение курсора в строке и колонке согласно текущему окну.
В начало таблицы
3. Функция (CLEAR-SCREEN) "чистит" текущее окно, перемещает курсор в верхний левый угол окна (в исходное
положение) и возвращает Т. В противном случае возвращается NIL. В примере показано, как можно почистить
экран; при этом в верхний левый угол возвращается Т:
$ (CLEAR-SCREEN)
T
В начало таблицы
4. Если N - нуль или положительное целое число, то функция (INSERT-LINES N) вставляет N "чистых" строк в текущее окно, начиная со строки, помеченной курсором, и возвращает T. В противном случае возвращается NIL.
Новые строки вставляются за счет "свертки" нужного количества строк в нижней части окна.
В начало таблицы
5. Если N - нуль или положительное целое, то функция:
(DELETE-LINES N)
уничтожает N строк текущего окна, начиная со строки, помеченной курсором, и возвращает Т. В противном случае возвращается NIL.
Строки уничтожаются за счет "свертки" нужного количества строк ниже курсора вверх (в нижней части экрана добавляются
пустые строки).
В начало таблицы
6. Если ROW, COLUMN, ROWS и COLUMNS находятся в определенных числовых пределах, то функция:
(MAKE-WINDOW ROW COLUMN ROWS COLUMNS)
создает на экране консоли прямоугольную область как текущее окно, перемещает курсор в верхний левый угол окна и возвращает Т. Верхний левый угол окна определяется значениями аргументов ROW и COLUMN. Аргумент ROW должен быть нулем или положительным целым числом меньшим, чем 25. Аргумент COLUMN должен быть нулем или положительным целым числом меньшим, чем 80. И ROW, и COLUMN по умолчанию принимаются за 0.
Окно имеет ширину COLUMNS и высоту ROWS.
Аргумент ROWS должен быть положительным целым числом меньшим или равным (25 - ROW). ROWS по умолчанию рассматриваются как (25 - ROW).
Аргумент COLUMNS должен быть положительным целым числом меньшим или равным (80 - COLUMN). COLUMNS по умолчанию рассматриваются как (80 - COLUMN).
Функция (MAKE-WINDOW) возвращает список из четырех элементов: исходной строки, исходной колонки, количества строк и количества колонок текущего окна.
В примере показано, как создается окно в 12 строк и 40 колонок в центре экрана:
$ (MAKE-WINDOW 6 20 12 40)
T
В начало таблицы
7. Если N - нуль или положительное целое число меньшее, чем 16, функции:
(FOREGROUND-COLOR N) и
(BACKGROUND-COLOR N)
устанавливают соответственно фон переднего (текст) и заднего (бордюр) плана в N и возвращает
предыдущее значение. Например функция:
$ (FOREGROUND-COLOR 2)
7 ; вернула код серого цвета
установит зеленый цвет текста.
Если функции вызываются без аргументов, то они возвращают соответственно код текущего цвета текста и бордюра. Например функция (FOREGROUND-COLOR) возвращает код текущего цвета текста.
Если muLISP работает на IBM PC с монохромным монитором, то для различных значений N на экран дисплея выдаются следующие результаты (таблица 2):
Нет изображения. | ||
Подчеркивание. | ||
Нормальное изображение. | ||
Инверсное изображение. |
Если muLISP работает на IBM PC с цветным графическим дисплеем, то различным значениям N соответствуют цвета (таблица 3):
Черный. | |
Синий. | |
Зеленый. | |
Красный. | |
Фуксиновый. | |
Коричневый. | |
Светло-серый. | |
Темно-серый. | |
Светло-голубой. | |
.Светло-зеленый | |
Светлый циан. | |
Светло-красный. | |
Светлый фуксин. | |
Желтый. | |
Белый. |
8. Если muLISP работает на компьютере IBM PC и если START-LINE и END-LINE -
это неотрицательные целые числа меньшие максимального количества линий курсора для данного монитора, то
функция (CURSOR-LINE START-LINE END-LINE) устанавливает линии начала и конца курсора и возвращает
список, состоящий из номеров "старых" линий начала и конца. Примеры:
$ (CURSOR-LINES 0 0)
; курсор приобретает форму горизонтальной
; черты в верхней части знакоместа
$ (CURSOR-LINES 1 0)
; невидимый курсор
$ (CURSOR-LINES 0 13)
(12 13) ; Курсор в виде заполненного блока
Функция (CURSOR-LINES) возвращает список (N1 N2) из двух чисел, задающих форму курсора.
По окончании работы muLISP восстанавливает первоначальную форму курсора.
В начало таблицы
9. Если muLISP работает на компьютере IBM PC с графическим дисплеем, и если N - нуль или положительное целое число меньшее 8, то функция (DISPLAY-PAGE N) устанавливает в качестве текущей страницу видеопамяти с номером N и возвращает в качестве результата номер предыдущей видеостраницы.
В противном случае функция DISPLAY-PAGE возвращает номер текущей страницы дисплея. Это дает возможность
быстро чередовать содержимое нескольких экранов дисплея, заполненных текстом.
В начало таблицы
10. Если управляющая переменная *AUTO-NEWLINE* - не NIL, то непосредственно после символа, который
высвечивается в самой правой колонке текущего окна, автоматически появляется новая строка. Если *AUTO-NEWLINE* - NIL, то
новая строка не появляется, а курсор из самой правой колонки окна убирается.
В начало таблицы
11. Если управляющая переменная *BLINK* - не NIL, то новые символы на экране дисплея будут мигать,
если NIL - не будут мигать. Примеры:
$ (SETQ *BLINK* T)
; мигающие символы
$ (SETQ *BLINK* NIL)
; "обычные" символы
В начало таблицы
12. Если *HIGH-INTENSITY* - не NIL, то новые символы будут высвечиваться с повышенной яркостью; если
NIL - с пониженной яркостью (тускло). Примеры:
$ (SETQ *HIGH-INTENSITY* T)
; повышенная яркость
$ (SETQ *HIGH-INTENSITY* NIL)
; нормальная яркость
В начало таблицы
На следующем шаге мы перечислим сообщения об ошибках в системе muLISP85.