[an error occurred while processing this directive]

.цв

.шп24

FRIENDS' SOFTWARE 1995

DRIVER WORK WITH WINDOWS'

.шп72

(Описание для программистов и пользователей).

.лв

.шп8

1. Введение

.шп0

Драйвер поддержки оконной среды WIN 1.04.EXE принадлежит библиотеке стандартных драйверов фирмы Friends' Software, расширяющих возможности интерпретатора Бейсик и поддерживает стандарт фирмы от 01.08.94. Данная версия драйвера реализована в виде перемещаемого файла, поддерживает работу с менеджером резидентных драйверов "Диспетчер" (версия 1.00).

Впервые драйвер оконной среды был разработан Волковым И.М. (Biocomputer Software) еще в 1990 году. Однако, с того времени драйвер во многом был усовершенствован Серковым С.В. (примером этому может служить драйвер WIN 1.00; Friends' software 1994). Новая версия драйвера (1.04), предлагаемая Вашему вниманию, предназначена для быстрого и удобного оформления Ваших программ на языке Бейсик посредством создания их оконного интерфейса (то есть системы вложенных меню и окон, помогающих программе вести диалог с пользователем) на базе экранных текстовых режимов ПЭВМ "АГАТ-9". Главные достоинства настоящей версии (1.04) следующие:

-версия использует новый модуль интерпретации команд INTPRALL.ASM, позволивший включить в драйвер несколько полезных функций, отсутствующих в версии 1.00.

-версия реализована в виде настоящего перемещаемого файла (тип "R"), что сократило размер драйвера по сравнению с версией 1.00.

-версия 1.04 имеет расширенный набор команд поддержки оконной среды (всего 12 команд не считая служебных).

.шп8

2. Установка драйвера в оперативную память.

.шп0

Драйвер WIN 1.04.EXE является перемещаемым файлом R-типа и может быть загружен в ОП командами ДОС "BLOAD" или "BRUN" только при установленном в систему драйвере поддержки перемещаемых файлов RELDRIVE (см. соответствующее описание). В противном случае ДОС выдаст ошибку "НЕ ТОТ ТИП ФАЙЛА".

Драйвер WIN 1.04 организован с логического адреса ¤4000 (на который и будет загружен по умолчанию стартового адреса в вышеприводимых командах ДОС) и занимает ¤1172 байт ОП. Так как он является перемещаемым файлом, то может быть размещен на любых, допустимых физических адресах ОП, для чего следует задать требуемый стартовый адрес в теле команд ДОС "BLOAD" или "BRUN" (однако следует иметь ввиду, что тело драйвера, не учитывая 2-й "отбрасываемой" зоны (см. ниже), не должно располагаться на адресах ¤8000-¤9FFF, так как это область используется подпрограммами драйвера для подключения дополнительных банков E и F основного ОЗУ).

Размеры "отбрасываемых" зон в соответствии со стандартом фирмы Friends' Software от 01.08.94 следующие:

1 зона - ¤182 байт от A

2 зона (адрес начала) - A + ¤C42 байт

(здесь A - стартовый адрес файла в памяти).

При успешной установке драйвера, на рабочий текстовый экран будет выдана его заставка (в режиме диалога), а управление возвращено вызывающей программе.

.сс

.шп8

3. Команды драйвера

.шп0

Все команды начинаются с ключевого слова "&", с которого организован перехват интерпретации.

Двенадцать команд драйвера из имеющихся четырнадцати предназначены для поддержки или обслуживания оконной среды, остальные две традиционные команды &"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 окна, то Вам придется сообщить все предшествующие параметры.

.шп8

4. Примечания

.шп0

в дальнейших версиях планируется доработка и совершенствование драйвера WIN (базирующегося на модуле WINMODL2.ASM), а также расширение набора его команд. В частности, планируется введение функции &"PAGE", возвращающей номер активной текстовой страницы. Процедуру &"WINDOW" планируется превратить в мультирезультативную смешанную функцию, способную не только устанавливать границы окна, но и возвращать их текущие значения.

Помните, что драйвер WIN 1.04 не может располагаться на адресах ¤8000-¤9FFF (см. Установку драйвера в ОП). Команды драйвера &"OWIN" и &"CWIN" используют банки E и F (другие команды память указанных банков не используют).

.шп8

5. Использование драйвера WIN 1.04 для оформления программ.

.шп0

Как уже было сказано, с помощью драйвера WIN 1.04 можно быстро и удобно, а также красиво, организовать интерфейс Вашей Бейсик-программы.

Автор предлагает Вашему вниманию текст подпрограммы "Универсальное меню" для языка Бейсик в качестве примера подобных решений. Подпрограмма "Универсальное меню" может воспрозводить 3 типа меню, используя возможности драйвера "WIN 1.04.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". "Редактор окон" поможет Вам подобрать размеры окон и их расположение на экране под интерфейс Вашей будущей программы.

.шп8

6. От автора.

.шп0

По всем вопросам, касающимся работы драйвера, просьба обращаться к автору.

.шп72

Friends' Software 1995

Moscow (095) 400-68-65

Serkov S.V. 28.07.95

.ст Раздел II:1.8

[an error occurred while processing this directive]