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:
В этот день... 21 November