Клавиши, определяемые пользователем (UDK)
В МЕГАБЕЙСИКе есть возможность запрограммировать верхний ряд клавиш для выполнения определенных функций. Для этого применяется команда KEY_, за которой должны быть записаны числовое и символьное выражения. Числовое выражение определяет какая из клавиш программируется, а символьное - задает значение этой клавише. Записывая ENTER (CHR$13) в конце символьного выражения, Вы обеспечиваете тем самым автоматическое выполнение назначенной команды после нажатия заданной клавиши UDK. В МЕГАБЕЙСИКе уже встроены некоторые UDK:
VERIFY - здесь в символьном выражении уже записана последовательность 'RUN+ CHR$13'. При нажатии этой клавиши выполняется очередная программа.
VAL$ - в символьном выражении здесь записано 'LOAD "": RUN+CHR$13'. При нажатии этой клавиши включается загрузка и автоматический запуск очередной записанной на кассете программы.
Во время выполнения программы клавиша "ПРОБЕЛ" может быть использована как новая SHIFT-клавиша для выполнения следующих функций: CONTROL F- вызов фронт-панели.
CONTROL Е- останов выполнения программы, выдача на экран сообщения и переход к режиму редактирования строк.
CONTROL R- останов программы, выставление начальных значений PAPER, INK, BORDER и переход к редактору строк.
Размер символов, их форма, а также способ их вывода на экран значительно расширяют в МЕГАБЕЙСИКе возможности "СПЕКТРУМа". Например, в МЕГАБЕЙСИКе возможно ограничить плошадь экрана для выходной информации. Эта площадь может быть любого размера. Отдельные участки экрана определяются как "окна". Каждое окно имеет свой номер. Язык позволяет Вам работать с 10 окнами, которые пронумерованы от 0 до 9, и все могут быть использованы в программах. Правда, как мы уже отмечали выше, некоторые окна уже закреплены за определенными операциями, например все операторы PRINT в программе используют для выдачи информации окно 2, но у Вас есть возможность перейти на другое окно с помощью команды CURRENT_. За этой командой должно идти числовое выражение, которое определяет номер назначенного окна. Если результат этого числового выражения оказывается больше 9, то выдается сообщение о том, что окно задано неправильно:
ILLEGAL WINDOW
Окна могут иметь любой размер и занимать произвольное положение на экране. Для определения размера и положения окна используется команда WINDOW_y,x,d,w y -номер строки верхнего левого угла окна (0...23); х-номер столбца верхнего левого угла окна (0...63); d-высота окна в строках; w-ширина окна в столбцах;
Таким образом, в МЕГАБЕЙСИКе весь экран разбивается на 24 строки и 64 столбца. Функции ATTR и SCREEN$ используют старую координатную систему, a PRINT AT - новую. Кроме того, координаты PRINT AT задаются относительно левого верхнего угла окна, а функции SCREEN$ и ATTR по-старому используют абсолютные координаты экрана. Если координаты окна превышают возможные размеры экрана, то Вы получите сообщение, что окно слишком велико, т.е. если 'y+d>24' или если 'x+w>64', то следует сообщение
WINDOW TOO LARGE,
Если же значения d и w меньше нуля, то следует сообщение
WINDOW TOO SMALL.
После выполнения команды WINDOW, очередной позицией для вывода на экран становится верхний левый угол окна.
Команду CLS, используемую для чистки всего экрана, нельзя использовать для чистки только одного окна. Для этого необходимо использовать команду CLW_. За этой командой должны быть записаны одно или два числа. При двух записанных числах первое определяет номер окна, а второе - режим CLW_:
CLW_n,0 - затушевка окна цветом PAPER;
CLW_n,1 - затушевка окна цветом INK;
CLW_n,2 - инвертирование. Цвет PAPER меняется на цвет INK;
CLW_n,3 - очистка атрибутов без изменения содержимого окна. Команда CLW_ всегда использует текущие атрибуты. Так, например, если текущим является окно 3, то после выполнения команды CLW_0,0 окно 0 будет затушевано с использованием атрибутов окна 3.
В YSMB имеется возможность перемещать пиксел за пикселом очередное окно экрана во всех направлениях. Команда PAN_ позволяет перемещать окно по горизонтали, а команда SCROLL_ - по вертикали. После этих команд должны быть записаны два числа: первое определяет цвет кромки экрана (1-цвет INK, 0-цвет PAPER), а второе показывает, в каком направлении будет смещение и на какую величину, Для команды РАN_: если второе число положительное, то перемещение выполняется вправо, если отрицательное, то влево. Для команды SCROLL_: положительное число - перемещение вверх, отрицательное - вниз. Возможно также содержимое экрана прокручивать. Для этого используют команды PANW_ и SCROLLW_. Параметры этих команд точно такие, как и для команд PAN_ и SCROLL_. Все эти команды действуют только на дисплейный файл.
Задание окон для конкретных целей осуществляется по команде FX_, за которой следует 2 числа: первое указывает, для каких целей предназначено это окно, а второе -определяет номер окна.
FX_0,n - определяет окно n для входной информации и сообщения об ошибках;
FX_1,n - определяет окно n для автоматического листинга;
FX_2,n - определяет окно n для выходной информации;
FX_3,n - определяет окно n для фронт-панели.
К примеру, запись FX_0,5 определяет, что окно 5 будет использоваться для входной информации и сообщения об ошибках. При желании наберите и запустите следующую программу для демонстрации окон.
10 BORDER 0
20 CURRENT_0: WINDOW_0,0,15,32 30 PAPER 3: INK 7: CLW_0 40 CURRENT_1:WINDOW_0,0,32,22,32 50 PAPER 1: INK 7: CLW_0 60 CURRENT_2: WINDOW_15,0,7,32 70 PAPER 7: INK 1: CLW_0
Используя команду MODE, можно получить 4 различных размера символов, выводимых на экран:
MODE_n,1 - каждый символ записан в матрицу 4x8 пиксел;
MODE_n,2 - обычный размер символов, т. е. 8x8 пиксел;
MODE_n,3 - символы двойной высоты 8x16 пиксел;
MODE_n,4 - символы размером 16x16 пиксел.
Как Вы видите, за командой MODE_ должно быть записано одно или два числа.
Первое число указывает номер окна, а второе - размер символов. Для каждого окна могут быть заданы свои размеры символов. При использовании команды MODE_n,4 возможно получение символов с оттенками, так как в этом случае каждый пиксел символа занимает 4 пиксела экрана. Задание интенсивности тени осуществляется по команде STIPPLE_, после которой записывают число (0...15) определяющее интенсивность тени.
(Продолжение следует)