|
wind.mac и menu.mac - описание модулей в OS CP/M-80 V2.2Работа с программами в ПРО ДОСПродаю платы и наборы микросхем, куплю микросхемы Платы и комплектующие на ПК Орион-128E: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, микропроцессоры и микроконтроллеры
На предыдущую страницу На главную страницу На следующую страницу
|
||