ТЕКСТОВЫЕ ОКНА_
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
