wind.mac и menu.mac - описание модулей в OS CP/M-80 V2.2

Работа с программами в ПРО ДОС

Продаю платы и наборы микросхем, куплю микросхемы Платы и комплектующие на ПК Орион-128

E:130397 (C) 1997 ORIONSOFT

---------------------------------------------------------------

Краткое описание модулей Wind.mac и Menu.mac      для PRODOS V2.00

       Для  использования  описываемых модулей  они должны быть оттранслированы в перемещаемый формат .rel, а в главной программе должна быть указана директива

    .request Wind, Menu

    и приведен список используемых данных из этих модулей,  например:

    extrn IniWnd,Open,Close,Menu

      1. Модуль оконного интерфейса Wind

    ==================================

    Ячейки:

 

   wbx - 2 байта  - смещение базы символьных окон по X в пикселях.  Все символьные окна, устанавливаемые подпрограммой Open,   будут  смещены от  левого среза  экрана на (wbx) пикселей. Значение по умолчанию 16.

   wby - 1 байт  - смещение базы символьных окон по Y  в пикселях.  Все символьные окна, устанавливаемые подпрограммой Open,  будут  смещены  от верхнего среза экрана на (wby) пикселей. Значение по умолчанию 3.

 

   Подпрограммы:

       XBdos - вызов расширенной BDOS, причем на входе A задает номер операции (160..169), а HL - адрес дескриптора операции (в частности,  таблицы описаниия области динамической памяти - TOO). Выходные значения: A, HL.

    ScrDim - определение размерности (числа плоскостей)  экрана.

На выходе в регистре A возвращается число 1..4 в зависимости от текущего режима экрана.

 

   IniWnd - инициализация стека окон.  Значение DE на входе задает адрес  начала стека,  HL - адрес конца стека + 1.

Длина стека рассчитывается исходя из требуемой глубины вложения окон:  на каждый  элемент стека выделяется по 26 байт. Например, можно задать

DE=8000h,

HL=8000h+20*26.

Данная подпрограмма должна быть вызвана в самом начале перед работой с подпрограммами Open, Close.

    Open - открыть окно. Регистровая пара IX содержит адрес таблицы описания окна длиной 11 байт:

 db Mode

db x1,y1,x2,y2

dw ColTab,FrmTab,Title

 

  Байт Mode определяет режим открытия окна, причем результирующее значение  Mode  определяется  комбинацией следующих битов:

   7 - признак "sav" - сохранения информации под окном

      в стеке окон;

  6 - признак "sdw" - вывода имитатора тени;

  5 - признак "frm" - вывода рамки;

  4 - признак "clw" - очистки окна после установки;

  0 - признак "win" - установки нового окна.

 Остальные биты - нулевые.

   Если бит 0 единичный, то будет установлено новое окно с указанными параметрами, а если нулевой - то установки текущего окна не изменяются, и при этом анализируются биты  6  и 5 на предмет вывода имитатора тени и рамки. Если эти биты также нулевые  (байт  Mode  нулевой), то  процедура  Open не производит вообще никаких действий.

   При единичном значении бита 0 анализируются все  остальные биты 7..4. Если бит 7 единичный, то содержимое экрана под новым окном и текущие параметры вывода сохраняются в  специальном стеке окон с возможностью последующего восстановления процедурой Close.

   Если бит 6 единичный,  то справа и снизу окна  выводится имитатор тени - специальный символ,  который задается 9-м байтом в таблице FrmTab.

   Если бит 5 единичный, то по периметру окна выводится рамка из 8-ми символов,  задаваемых таблицей FrmTab, а окно после этого устанавливается внутри рамки.

   Если бит 4 единичный,  то вновь  установленное  окно очищается фоном рамки.

   Параметры x1,y1 и x2,y2 являются символьными координатами левого верхнего и правого нижнего углов, причем отсчет значений начинается с 1.

   ColTab является  адресом таблицы цветов длиной в общем случае 6 байт:

 

  код цвета фона рамки и окна,

  код цвета переднего плана рамки и окна,

  код цвета фона заголовка в рамке,

  код цвета переднего плана заголовка,

  код цвета фона имитатора тени,

  код цвета переднего плана имитатора тени.

   FrmTab является адресом таблицы с 8-ю символами рамки (перебор символов - по часовой  стрелке)  и  одного символа имитатора тени (если он используется),  например:

 

  FrmTab: "┌─┐│┘─└│░"

   Title является адресом заголовка в рамке, оканчивающегося байтом 0 (используется, если выводится рамка).

 

  На выходе  процедура  Open возвращает значение A=0 в случае успешного открытия окна, или код ошибки выделения динамической  памяти,  или признак ошибочных параметров окна (A=80H).

    Close - закрыть окно. Без входных параметров. На выходе в  A возвращает признак ошибки,  например,  если  стек окон пуст. Данная процедура вызывается для закрытия последнего окна, открытого с единичным битом 7 Mode.

       2. Модуль меню Menu

     ===================

   Подпрограммы:

 

   InSym - ожидание ввода  символа с клавиатуры в  КОИ-7  и без отображения курсора.

   

   Menu  - работа в меню. На входе задаются адреса двух таблиц:

IX указывает на адрес таблицы описания окна, описанной для модуля Wind (это окно открывается при входе в данную подпрограмму и закрывается при выходе из нее);

 IY указывает на таблицу описания меню:

 

db Type

db N

db Current

db x,y

dw List,Hotk,AdrT

        [db dx]

 Байт Type определяет тип меню:   0 - вертикальное, 1 - горизонтальное.

Байт N задает число режимов меню.

 Байт Current определяет текущий пункт меню, выделенный указателем (1..N).

Байты x,y определяют положение названия первого пункта меню в окне (x,y начинаются с единицы).

List является  адресом списка  названий пунктов  меню, каждый из которых завершается байтом 0, например:

 

List: db ' Yes ',0

      db ' No ',0

 

Hotk является адресом списка "горячих" клавиш,  например:

 

Hotk: db 'YN'

 

AdrT является адресом таблицы адресов обработки каждого пункта меню, например:

 AdrT: dw Yes,No

 

Параметр dx  используется  только для  горизонтального меню и задает шаг  расположения пунктов  меню по горизонтали в символах.

 

Подпрограмма Menu возвращает признак "CY" в случае выхода из меню по АР2, и "NC" в других случаях:

 

 A=0 - выход из меню осуществлен через один из пунктов

 A<>0 - ошибка выделения памяти для окна.

 

Подпрограмма обработки пункта меню, адрес которой указан в таблице AdrT, получает номер назначенного режима в регистре C (1..N)  и должна возвращать следующие параметры:

 

 Признак "CY" для завершения работы в меню и выхода из  подпрограммы Menu через данный пункт (при этом на вы ходе Menu будет A=0);

  Признак "NC",  A=0 в случае успешной обработки пункта  и возврата в меню;

  Признак "NC", A<>0 в случае ошибки выделения памяти.

 

    13.06.97 В. Пушков

 

 *** ORIONSOFT ***

 

 

 

Купить платы, наборы микросхем на Орион-128, КР565РУ5В, КР565ру7В, к565ру5г AU, к565ру7г Au в позолоте, куплю микросхемы, Z80, микропроцессоры и микроконтроллеры

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу