[an error occurred while processing this directive]
FRIENDS' SOFTWARE 1995
DRIVER WORK WITH WINDOWS'
(Описание для программистов и пользователей).
1. Введение
Драйвер поддержки оконной среды WIN 1.05.EXE принадлежит библиотеке стандартных драйверов фирмы Friends' Software, расширяющих возможности интерпретатора Бейсик и поддерживает стандарт фирмы от 23.09.95. Данная версия драйвера реализована в виде перемещаемого файла только для работы в среде "BASIC-'MASTER'95". При попытке запуска в другой среде драйвер не актиивизируется. Драйвер поддерживает работу с менеджером резидентных драйверов "Диспетчер" (версия 2.0).
Впервые драйвер оконной среды был разработан Волковым И.М. (Biocomputer Software) еще в 1990 году. Однако, с того времени драйвер во многом был усовершенствован Серковым С.В. (примером этому может служить драйвер WIN 1.00; Friends' software 1994). Новая версия драйвера (1.05), предлагаемая Вашему вниманию, предназначена для быстрого и удобного оформления Ваших программ на языке Бейсик посредством создания их оконного интерфейса (то есть системы вложенных меню и окон, помогающих программе вести диалог с пользователем) на базе экранных текстовых режимов ПЭВМ "АГАТ-9". Главные достоинства настоящей версии (1.04) следующие:
-версия использует новый модуль интерпретации команд INTPRALL.ASM, позволивший включить в драйвер несколько полезных функций, отсутствующих в версии 1.00.
-версия реализована в виде настоящего перемещаемого файла (тип "R"), что сократило размер драйвера по сравнению с версией 1.00.
-версия 1.05 имеет расширенный набор команд поддержки оконной среды (всего 12 команд не считая служебных).
2. Установка драйвера в оперативную память.
Драйвер WIN 1.05.EXE является перемещаемым файлом R-типа и может быть загружен в ОП командами ДОС "BLOAD" или "BRUN" только в системе "BASIC-'MASTER'95".
Драйвер WIN 1.05 организован с логического адреса ¤4000 (на который и будет загружен по умолчанию стартового адреса в вышеприводимых командах ДОС) и занимает ¤1041 байт ОП. Так как он является перемещаемым файлом, то может быть размещен на любых, допустимых физических адресах ОП, для чего следует задать требуемый стартовый адрес в теле команд ДОС "BLOAD" или "BRUN" (однако следует иметь ввиду, что тело драйвера, не учитывая 2-й "отбрасываемой" зоны (см. ниже), не должно располагаться на адресах ¤8000-¤9FFF, так как это область используется подпрограммами драйвера для подключения дополнительных банков E и F основного ОЗУ).
Размеры "отбрасываемых" зон в соответствии со стандартом фирмы Friends' Software от 23.09.95 следующие:
1 зона - ¤9B байт от A 2 зона (адрес начала) - A + ¤BCA байт (здесь A - стартовый адрес файла в памяти).
При успешной установке драйвера, на рабочий текстовый экран будет выдана его заставка (в режиме диалога), а управление возвращено вызывающей программе.
3. Команды драйвера
Все команды начинаются с ключевого слова "&", с которого организован перехват интерпретации.
Двенадцать команд драйвера из имеющихся четырнадцати предназначены для поддержки или обслуживания оконной среды, остальные две традиционные команды &"LIST" и &"EXIT" являются служебными. Команда &"LIST" выдает на экран список команд драйвера. Команда &"EXIT" предназначена для отключения драйвера от системы "Бейсик" и выхода его из менеджера управления резидентными драйверами "Диспетчер", если он имеется в системе.
Команды поддержки оконной среды:
- &"RAM" vt,ht,xl,yl,type,{col} - процедура, строящая рамку.
Параметры имеют следующие значения: vt - координата нового верхнего угла рамки по вертикали. Диапазон возможных значений: (1-30). ht - координата левого верхнего угла рамки по горизонтали. Диапазон возможных значений: (1-30) для АЦР32 и (1-62) для АЦР64 xl - ширина области экрана внутри рамки. Диапазон возможных значений: (1-30) для АЦР32 и (1-62) для АЦР64, зависит от параметра ht. В общем случае ht+vt не должно превышать 31 для режима АЦР32 и 63 для режима АЦР64. yl - длина области экрана внутри рамки. Диапазон возможных значений (1-30), зависит от параметра vt. В общем случае vt+yl не должно превышать 31. type - тип воспроизводимой рамки. Диапазон возможных значений 0-1. type=0 - рамка строится из символов псевдографики. type=1 - рамка строится из символов "пробел".
Параметры vt,ht,xl,yl,type должны присутствовать в команде обязательно.
Параметр col является необязательным и задает цвет выводимой рамки. Диапазон возможных значений col ¤00-¤FF, однако, имеют смысл только следующие значения col:
1 - красный 2 - зеленый 3 - желтый 4 - синий 5 - фиолетовый 6 - голубой 7 - белый 8 - черный col+8 - инверсный цвет col+24 - мерцающий
Для режима АЦР64 параметр col значения не имеет. При незаданном col рамка воспроизводится текущим цветом. Команда &"RAM" не изменяет границ текущего рабочего окна в экране.
- &"RAMS" vt,ht,xl,yl,{col} - процедура построения раздвигающейся рамки. Параметры vt,ht,xl,yl,{col} имеют те же значения. При этом col в АЦР64 не имеет значения, а в АЦР32 часть экрана, заключенная в рамку заполняется пробелами цвета col (при col=1-8, естественно, пробелами "черного" цвета).
Рамка строится от центра области, с указанными координатами к периферии.
- &"OWIN" vt,ht,xl,yl,type,{col} - процедура построения окна. Процедура "OWIN" принципиально отличается от процедур "RAM" и "RAMS", описанных выше тем, что область экрана, накрываемая окном, открытым "OWIN" запоминается в специальном буфере (для этого используются дополнительные банки E и F основного ОЗУ) так, что потом ее можно восстановить на рабочий экран процедурой "CWIN".
Параметры vt,ht,xl,yl имеют те же значения, что и для команд "RAM" и "RAMS".
Параметр type (диапазон значений 0-3) имеет следующий смысл:
type=0 - открыть окно-рамку. Координаты текущего экрана не меняются.
type=1 - открыть окно. Изменяются координаты текущего рабочего окна. Новый рабочий экран (окно) соответствует внутренним размерам открытого окна.
type=2 - открыть окно-рамку, раздвигающуюся из центра. Координаты текущего экрана не меняются.
type=3 - открыть раздвигающееся окно. Координаты текущего экрана меняются. Новый экран соответствует внутренним размерам открываемого окна.
Параметр col имеет значение, аналогичное соответствующему параметру команды &"RAMS".
Всего может быть открыто не более 8 окон. При попытке открыть девятое окно, Бейсик диагностирует ошибку "УЖЕ ЕСТЬ".
- &"CWIN" {type} - процедура, закрывающая окно, открытое командой &"OWIN".
Необязятельный параметр type (диапазон 0-2) имеет следующие значения:
type=0 - закрыть последнее открытое окно
type=1 - закрыть все открытые окна
type=2 - закрыть все окна, кроме первого открытого окна.
&"CWIN" без параметров действует подобно &"CWIN"0. При закрытии окна восстанавливаетя область экрана, накрытая закрываемым окном.
- &"MAXWIN" - функция, определяющая число окон, открытых командой &"OWIN".
Чтобы получить кол-во открытых окон следует присвоить функцию числовой переменной. Например:
&A="MAXWIN"
A=0 означает, что не открыто ни одного окна. Функцию нельзя использовать в конструкции выражений языка Бейсик.
- &"NUMWIN" - функция, возвращающая номер активного окна, функция имеет смысл для определения активного окна. При переходе из окна в окно с помощью команды &"TOWIN" (см. далее). Команда &A="NUMWIN" присвоит переменной A номер активного окна.
A=0 означает, что активным окном является рабочее окно или экран, существовавший до первого использования команды &"OWIN".
- &"TOWIN" {nwin} - процедура "перехода" из окна в окно. Команда работает, если открыто хотя бы одно окно командой &"OWIN". Необязательный параметр nwin является номером окна, которое должно быть активизировано. При этом обязательным условием является то, что это окно было открыто командой &"OWIN". &"TOWIN" без параметров активизирует следующее по счету окно.
Команда &"TOWIN" предназначена для организации многооконного прерывания. Это может быть необходимо, когда требуется прервать исполнение работы программы в одном окне, выполнить какие-либо действия в другом окне и вернуть управление в старое окно. Команда "TOWIN", организуя переход в окно, не закрывает старое окно (как это делает команда &"CWIN"), а только изменяет координаты рабочего экрана и текущий цвет. При попытке перейти в несуществующее окно, выдается ошибка "ОШИБОЧНОЕ ЗНАЧЕНИЕ". Команда &"TOWIN"0 переходит в окно, которое было рабочим до первого использования команды &"OWIN". Команды &"OWIN" и &"TOWIN" коррегируют друг с другом следующим образом:
Допустим, если было открыто всего 5 окон, а активным является 3-е окно (по команде &"TOWIN"), то при открытии следующего, 6-го окна командой &"OWIN", оно становится активным.
- &"WUP" {n} - процедура, осуществляющая скроллинг рабочего окна (экрана) вверх на n строк. Если параметр n не задан, то производится скроллинг на одну строку вверх. Параметр n может иметь значение в диапазоне 1-32.
- &"WDN" {n} - процедура, обратная предыдущей, осуществляющая скроллинг вниз на n строк. Значение параметра n аналогично.
- &"WLF" {n} - процедура, осуществляющая скроллинг окна влево на n столбцов. Параметр n имеет диапазон (1-32) для АЦР32 и (1-64) для АЦР64. &"WLF" без параметров делает скроллинг влево на один столбец.
- &"WRT" {n} - процедура, обратная предыдущей, осуществляет скроллинг рабочего окна на n столбцов вправо. Параметр n имеет те же значения.
- &"WINDOW" {ht,xl,vt,yl} - процедура установки границ рабочего окна. Устанавливает границы рабочего окна в экране, изменяя текущее значение специальных ячеек системы ввода-вывода (это делает и команда &"OWIN").
Параметры имеют следующие значения:
ht - граница левого верхнего угла окна по горизонтали.
Диапазон допустимых значений: 0-31 для АЦР32 0-63 для АЦР64.
xl - ширина окна. Диапазоны допустимых значений параметра:
1-32 для АЦР32 1-64 для АЦР64.
Значение xl зависит от значения ht. В общем случае ht+xl не должно превышать 32 для АЦР32 и 64 ДЛЯ АЦР64. В противном случае будет выдана ошибка "ОШИБОЧНОЕ ЗНАЧЕНИЕ".
vt - граница левого верхнего угла окна по вертикали. Диапазон допустимых значений vt (0-31).
yl - длина окна. Диапазон yl (1-32), зависит от vt. В общем случае vt+yl не должно превышать 32.
Команда &"WINDOW" без параметров устанавливает окно размером во весь экран. Вы можете также пользоваться командой &"WINDOW" для изменения какой-либо одной координаты рабочего окна. Например, &"WINDOW"ht устанавливает новую границу левого верхнего окна по горизонтали. Однако, если Вы хотите изменить, например, yl окна, то Вам придется сообщить все предшествующие параметры.
4. Примечания
в дальнейших версиях планируется доработка и совершенствование драйвера WIN (базирующегося на модуле WINMODL2.ASM), а также расширение набора его команд. В частности, планируется введение функции &"PAGE", возвращающей номер активной текстовой страницы. Процедуру &"WINDOW" планируется превратить в мультирезультативную смешанную функцию, способную не только устанавливать границы окна, но и возвращать их текущие значения.
Помните, что драйвер WIN 1.05 не может располагаться на адресах ¤8000-¤9FFF (см. Установку драйвера в ОП). Команды драйвера &"OWIN" и &"CWIN" используют банки E и F (другие команды память указанных банков не используют).
5. Использование драйвера WIN 1.05 для оформления программ.
Как уже было сказано, с помощью драйвера WIN 1.05 можно быстро и удобно, а также красиво, организовать интерфейс Вашей Бейсик-программы.
Автор предлагает Вашему вниманию текст подпрограммы "Универсальное меню" для языка Бейсик в качестве примера подобных решений. Подпрограмма "Универсальное меню" может воспрозводить 3 типа меню, используя возможности драйвера "WIN 1.05.EXE"", причем меню типа 1 может работать только в АЦР32, а меню типов 2 и 3 в обоих АЦР.
Перед вызовом подпрограммы меню, следует заполнить список параметров меню, приведенных в комментариях. Автор ни в коем случае не претендует на то, что предлагаемая подпрограмма имеет самое оригинальное решение и является законченной. Вы сами можете ее усовершенствовать и расширить. Включить тект "Универсального меню" в Вашу Бейсик-программу можно командой ДОС "EXEC"
REM *==================================* REM * Подпрограмма универсального меню * REM * -------------------------------- * REM * авторы: Волков И.М., Серков С.В. * REM * для работы требуется драйвер * REM * поддержки окон (любая версия) * REM *==================================* REM Входные параметры и диапазоны их значений: REM ------------------------------------------ REM 1. NMENU [1-3] - тип меню REM 2. VT - левая граница окна по вертикали REM 3. HT - левая граница окна по горизонтали REM 4. XL - ширина окна REM 5. YL - длина окна (для меню 2 рассчитывается по MAX) REM 6. ZAGL¤ - имя заголовка окна REM 7. COLORW - цвет окна REM 8. COLORP - цвет пунктов окна REM 9. COLORR - цвет рамки меню REM 10. COLORZ - цвет заголовка меню REM 11. COLORG - цвет выбранного пункта REM 12. MAX - количество пунктов в меню REM 13. PUN¤(MAX) - массив с именами пунктов REM Выходные параметры: REM ---------------------------------- REM - входные параметры без изменений REM 1. PUNKT - номер выбранного пункта (PUNKT=0, если REM из меню был выход по клавише "РЕД") REM 2. PUN¤(PUNKT) - имя выбранного пункта 2 ON NMENU GOTO 10,100,300 REM MENU NUMBER 1 5 N%=PEEK(¤C000):IF N%<128 THEN 5 6 POKE ¤C010,0:RETURN 7 &"OWIN"VT,HT,XL,YL,TYPE,COLORW:RETURN 8 VTAB VT:HTAB (XL-LEN(ZAGL¤))/2+1:INVERSE:RIBBON=COLORZ: PRINT ZAGL¤:NORMAL:RETURN 10 TYPE=1:GOSUB 7:GOSUB 8 21 M=1:V=VT:GOSUB 80 30 HTAB 1:VTAB V+2:INVERSE:RIBBON=COLORR:PRINT PUN¤(M); 31 HTAB 1 40 NORMAL:RIBBON=COLORP:GOSUB 5:POKE 34,VT+1:POKE 35,VT+YL-1 50 IF N%=¤8D THEN INVERSE:RIBBON=COLORG:?PUN¤(M);:NORMAL: PUNKT=M:RETURN 52 IF N%=¤9B THEN PUNKT=0:&"CWIN":RETURN 55 IF N%=153 THEN 60 56 IF N%=154 THEN 70 59 GOTO 30 60 PRINT PUN¤(M);:IF V>VT THEN V=V-1:M=M-1:GOTO 30 62 IF M=1 THEN M=MAX-(YL-3):GOSUB 80:M=MAX:V=VT+YL-3:GOTO 30 65 &"WDN":M=M-1:GOTO 30 70 PRINT PUN¤(M);:IF M=MAX THEN 21 71 M=M+1:IF V<VT+YL-3 THEN V=V+1:GOTO 30 72 &"WUP":GOTO 30 80 RIBBON=COLORP:FOR I=M TO M+YL-3:VTAB VT+I-M+2:HTAB 1:PRINT PUN¤(I);:NEXT:RETURN REM MENU NUMBER 2 100 TYPE=2:YL=MAX*2+3:GOSUB 7 110 PLUS%=1 120 HTAB HT+(XL-LEN(ZAGL¤))/2+1:VTAB VT+PLUS%:RIBBON=COLORZ:PRINT ZAGL¤ 130 VTAB VT+PLUS%+1:HTAB HT+1:FOR I=HT+1 TO HT+XL:PRINT"-";:NEXT:NORMAL 150 FOR I=1 TO MAX:VTAB VT+PLUS%+1+I*2:HTAB HT+2:RIBBON=COLORP:PRINT PUN¤(I):NEXT 160 YL1=VT+PLUS%+2:XL1=HT+1 170 &"RAM"YL1,XL1,XL-2,1,1,COLORR 180 GOSUB 5 190 IF N%=153 THEN &"RAM"YL1,XL1,XL-2,1,0:YL1=YL1-2 200 IF N%=154 THEN &"RAM"YL1,XL1,XL-2,1,0:YL1=YL1+2 210 IF YL1>VT+PLUS%+2+(MAX-1)*2 THEN YL1=VT+PLUS%+2 220 IF YL1<VT+PLUS%+2 THEN YL1=VT+PLUS%+2+(MAX-1)*2 230 IF N%=¤8D THEN PUNKT=(YL1-VT-PLUS%-2)/2+1:&"RAM"YL1,XL1,XL-2,1,1,COLORG:RETURN 240 IF N%=¤9B THEN PUNKT=0:&"CWIN":RETURN 250 GOTO 170 REM MENU NUMBER 3 299 &"RAM"VT+1,HT1,XL1,1,0:RETURN 300 TYPE=3:YL=3:XL=0:FOR I=1 TO MAX:XL=XL+LEN(PUN¤(I))+2:NEXT:GOSUB 7 305 XL1=2:GOSUB 8 310 RIBBON=COLORP:FOR I=1 TO MAX:VTAB VT+2:HTAB XL1:PRINT PUN¤(I);:XL1=XL1+LEN(PUN¤(I))+2:NEXT 320 HT1=1:M=1 325 XL1=LEN(PUN¤(M)) 330 &"RAM"VT+1,HT1,XL1,1,1,COLORR 340 GOSUB 5 350 IF N%=¤95 THEN GOSUB 299:HT1=HT1+LEN(PUN¤(M))+2:M=M+1 360 IF N%=¤88 THEN GOSUB 299:HT1=HT1-LEN(PUN¤(M-1))-2:M=M-1 370 IF HT1>XL-(LEN(PUN¤(MAX))-2) THEN 320 380 IF HT1<1 THEN HT1=XL-LEN(PUN¤(MAX))-1:M=MAX:GOTO 325 390 IF N%=¤8D THEN PUNKT=M:&"RAM"VT+1,HT1,XL1,1,1,COLORG:RETURN 395 IF N%=¤9B THEN PUNKT=0:&"CWIN":RETURN 400 GOTO 325
Автор также рекомендует использовать для разработки интерфейса Ваших программ программу "WIN EDITOR" из "MASTER II DISK PROFESSIONAL PROGRAMMS". "Редактор окон" поможет Вам подобрать размеры окон и их расположение на экране под интерфейс Вашей будущей программы.
6. От автора.
По всем вопросам, касающимся работы драйвера, просьба обращаться к автору.
Friends' Software 1995
Moscow (095) 400-68-65
Serkov S.V. 25.11.95
[an error occurred while processing this directive]