|
Netus News #07
03 января 1999 |
|

─── Шкатулка знаний ───
Процедура построения окон.
Маленькое вступление.
Недавно, на днях, позвонив Рулезу
(он-же R.S.он-же Шурик Рагозин), я услушал
в трубке горестный плачь о том, какой нап-
ряг в NETUS NEWS с материалом(*).
И вот я уже спешу на помощь.
В общем, люди, отдаю Вам свои окошки
и несколько прогов в пакете с ними. Все
это было написано в декабре 97 года и с
тех пор не менялось, не пытайтесь найти
там навороченого кода: его там просто нет,
но в целом все работает.
Итак, сначала изложу все плюсы и ми-
нусы проги, а затем переползу к самому
описанию.
Плюсы:
1 - довольно быстрая;
2 - относительно много умеет.
Минусы:
1 - довольно тормозная;
2 - относительно мало умеет;
3 - несколько напряжный формат данных для
печати.
4 - большая по обьему (около кила).
Ну-с, хотя минусов и больше, чем плю-
сов, это все-же лучше, чем ничего и к тому
же работает (наверно).
Ну вот и описалово самого пакета.
Сначала пройдемся по сопутствующим
прогам. Процедура печати - PRINT юзает
шрифт 64 символа, размеры матрицы 4*6, 256
символов. Довольно быстра, хотя не фонтан.
Обращение к ней:
в HL - адрес текста;
в DE - адрес на экране;
в A - количество букв деленное на 2.
Использует фонт длинной в 4096 байт
находящийся с адреса #B000. Сам фонт длин-
ной в 1536 байт грузится на любой адрес,
затем распаковывается прогом DECHR IX -
адрес загрузки фонта. Прог RAMPAGE щелкает
страницами, в A - логический номер стра-
ниц. Оопс, забыл, RAMPAGE пофиксен на
Скорпион и ему подобные компы. Подпрограм-
ма ADDR_AT - считает адреса в экрам% и ат-
рибутах.
Вход:
D - X координата.
E - Y координата.
Выход:
HL - адрес в экране.
DE - адрес в атрибутах.
Теперь переходим к самим окнам.
1 - число вложеных окон не ограничено.
2 - буфер под сохраненный фон начинается
с метки WIND_BU в этом варианте с адреса
#C121, если конкретней то, в 14 банке
скорповской памяти.
3 - буфер под адреса данных виндов начи-
нается с метки WIND_ST т.е. с адреса #C120
и идет вниз. буфера в 32 байта хватает на
16 вложеных окон.
4 - рамочки живут в файле "BOX_SPR". В
памяти они должны находиться с адреса
#C000 в 14 банке.
Как инициализировать винды:
Поюзать прог INITWIN.
Как открыть окно:
в IX -адрес описателя, затем CALL OP_WIND
если окно не сохраняет под собой фон, то
лучше не забивать буфер адресов и исполь-
зовать не OP_WIND, а CALL WIND
Как закрыть окно:
CALL CL_WIND - последнее открытое окно
закрывается. Закрываются окна открытые
только по оп_винд.
Описание формата заголовка:
Длинна описателя может быть разной от
минимальной - 6 байт ,до максимальной -
21 баит. Координаты считаются начиная с 0
т.е. 0-31 по X и 0-23 по Y
1 - начальная координата по горизонтали;
2 - начальная координата по вертикали;
3 - высота окна;
4 - ширина окна;
5 - системный байт;
6 - цвет рамки;
7 - цвет самого окна;
8,9,10,11 - байты заливки окна;
12,13 - адрес заголовка;
14,15 - адрес данных для печати;
16,17 - адрес текста для печати;
18,19 - адрес данных для горизонтальных
линий;
20,21 - адрес данных для вертикальных ли-
ний.
Описатель системного байта:
биты считаются с 0 до 7;
бит установлен - да,сброшен - нет.
7 - сохранение фона под окном;
6 - заливка. если бит сброшен то окно не
будет заливаться не только байтами заливки
но и атрибутом. Если вы хотите просто
очистить окно то тогда его нужно залить
установив байты заливки в 0;
5 - заголовок;
4 - вертикальные линии;
3 - горизонтальные линии;
2 - печать текста;
1 и 0 - неиспользуются.
Заливка:
Стандарттный вариант - #55,#55,#AA,#AA
хотя можно любой другой.
Заголовок:
Только английские буквы, в связи с тем
что используется пзушный фонт,окончание
заголовка - код больше 128.
Данные для печати:
1 байт - количество слов (строк) затем 3
байта описателя╛╛ слова (строки) описатель
слова:
1 байт - старший байт экранного адреса;
2 байт - младший байт экранного адреса;
3 байт - количество букв поделенное на 2;
Пример:
┌─ количество слов
│ ┌─ описатель 1 слова
│ │ ┌─ 2 слова
│ ┌──┼──┐ ┌──┼──┐
DATA DB 2,#40,#01,9,#40,#21,9
TEXT DB "данные для печати "
DB "фонтом 4*6 в окне "
Данные для горизонтальных линий:
1 байт - количество линий,
затем 3 баита описателя линии
Описатель линии:
X и Y координаты в знакоместах.
1 байт - X координата;
2 байт - Y координата;
3 байт - длинна линии.
Данные для вертикальных линий:
Описатель такой-же как и для горизон-
тальных.
Ну вот и все.
With best wishes, Олег Докукин aka
Light - D.C.G.
Коментарий R.S.
Исходняк программы в формате ассемблера
STORM находится в приложении к газете. Там
же находятся фонт и таблица с рамками.
P.S. Перепечатка данного материала и опуб-
ликование данной программы в любых других
изданиях разрешается только с разрешения
автора.
По всем возникшим вопросам обращаться
по адресу VEC-04.00
-------------------------------------------
* с хорошим материалом. Примечание главно-
го редактора.
Other articles:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 15 November