ТЕКСТОВЫЕ ОКНА_
WINDOW, CURRENT, FX, CLW
Теперь самое время перейти к описанию
возможностей MegaBasic по управлению текстовыми окнами. Сразу после
загрузки MegaBasic все окна, кроме окна встроенного в MegaBasic
монитора-отладчика (о нем подробный разговор будет позже), совпадают с
основным экраном стандартного интерпретатора. MegaBasic позволяет
одновременно оперировать десятью окнами.
WINDOW_n,c,h,g
Оператор задает размеры окон. Параметры n
(0...23) и с (0...63) устанавливают позицию левого верхнего угла окна,
соответственно, по вертикали и горизонтали, a h (1...24) и g (1...64)
— его размер (высоту и длину). Координаты задаются в знакоместах.
Оператор WINDOW устанавливает размеры только текущего (активизированного в данный момент) окна. Окно номер w делает текущим оператор
CURRENT_w
Возможности оконного интерфейса MegaBasic
продемонстрируем на примере программы, которая выдает свой листинг в
каждом из активизируемых по очереди окон:
4 PAPER 1: CLS
5 FOR N=2 ТО 7: PAPER N-2: INK 9-N
10 CURRENT_N:WINDOW_N.4*N,10,34:FX_1 ,N
20 CLW_N,1: REM Оператор очистки окна (описан чуть ниже)
25 MODERN f 2
30 LIST: LIST: LIST: LIST
40 PAUSE 80: NEXT N
50 GO TO 5
Управление окнами (правда, не всеми) можно
осуществлять и с помощью оператора PRINT CHR$ с использованием кодов от
24 до 31, которые стандартный Бейсик оставил вакантными. При этом PRINT
CHR$ 24 устанавливает текущим окно номер 0, PRINT CHR$ 25 — окно
1 и далее до PRINT CHR$ 31, который включает окно 7. Окна 8 и 9 этим
способом не управляются.
Того же самого эффекта можно добиться, используя оператор VDU_24...VDU_31.
Потенциальные возможности оператора
FX_i,w
еще ждут своего исследователя. В фирменном
описании указывается, что он служит для распределения потоков
информации между окнами. Параметр i определяет вид выводимой
информации: 0 — командная строка и сообщения об ошибках; 1
— листинг программы; 2 — информация, генерируемая в
процессе выполнения программы; 3 — встроенный монитор-отладчик
MegaBasic. Параметр w задает номер окна, в которое будет направляться
информация из указанного потока (значения от 0 до 9).
Однако параметр I оператора FX может принимать
не только значения от 0 до 3, но и 4, 5, 6. При этом параметр w может
иметь значения вплоть до 66063! Это побочные, недокументированные
режимы, о которых никакие руководства не упоминают. Потоки FX_4 и FX_5
могут использоваться, вероятно, для управления периферийными
устройствами. Что касается FX_6,w, то в сочетании с рабочими значениями
параметра w от 0 до 255 его действие аналогично РОКЕ 23609,w, то есть
он изменяет длительность звука, подтверждающего нажатие клавиши на
клавиатуре.
CLW_[w,]m
осуществляет очистку окна. Если параметр один
(т), то действие оператора относится к текущему окну и значение этого
параметра определяет способ, которым будет реализована очистка окна:
0 - заполнение окна цветом фона
(PAPER), аналогично действию оператора CLS Spectrum-Бейсика, но в пределах окна;
1 — производит то же действие, что и
CLW_0, но с заполнением цветом тона (INK);
2 - инвертирует изображение в окне
(меняет цвет фона на цвет тона и наоборот);
3 - заменяет все атрибуты текущего
окна на постоянные.
В случае двух параметров в операторе CLW первый
(w) устанавливает номер окна, к которому относится действие оператора.
Например, оператор CLW_w,3 заменяет атрибуты окна с номером w на
атрибуты, установленные для текущего окна. Необходимо внимательно
следить за тем, чтобы значение параметра w не выходило за разрешенные
пределы (0...9). Иначе в лучшем случае программа прервется сообщением Y
too large, в худшем, но наиболее вероятном — зависнет. Зато
второй параметр (он бывает и единственным) можно увеличивать хоть до
миллиона, поскольку любое значение свыше трех приравнивается трем.
В заключение рассказа о текстовых окнах
приведем эффектную программу с использованием операторов WINDOW и CLW,
имитирующую постепенное раскрывание окна:
5 PAPER 0: INK 5: BRIGHT 1: FONT_1 :MODE_4 10 CLS: FOR N=1 TO 10
15 LET S=10—N: LET L=33-3*N: LET H=2*N+1: LET W=6*N 20 WINDOW_SfL,H,W:CLW_1 30 NEXT N
40 STIPPLE_(RND*60): PRINT AT 9,15; INVERSE 1; PAPER 1;"0 К H O" 50 PAUSE 80: GO TO 10