ZX Format
#03
29 февраля 1996 |
|
IS-DOS - "Оконная система IS-DOS".
Рубрика "IS-DOS - программистам". No 3
Елисеев В. А.
"Оконная система IS-DOS"
(журнальный вариант)
(C) PENCRAFT 1995
(C) IskraSoft 1995
Окончание, начало в No 1, 2.
Вспомогательные рестарты.
_________________________________________
wtpos (#6B)
К двум последним рестартам печати не-
посредственно примыкает рестарт
wtpos(#6B), позволяющий модифицировать
текущие координаты печати для рестартов
lnstr и str.
Рестарт wtpos вычисляет абсолютные
логические координаты печати по значе-
ниям Y-coord и Print pos. из вектора ок-
на, на который указывает содержимое ре-
гистра IX, с учетом смещения по Y, зада-
ваемого в регистре H и по X, задаваемого
в регистре L, и помещает их в системную
переменную XYPOS, находящуюся в векторе
символьного устройства вывода. Эта сис-
темная переменная активно используется
рестартом ttyout(#0A), на основе которо-
го созданы многие из рестартов печати
уровня WIND.SYS.
Следует упомянуть о том, что для за-
дания координат печати можно пользо-
ваться также и рестартом prapd(#0C) из
уровня DOS.SYS, который помещает в сис-
темную переменную XYPOS значения регис-
тров H (Y-coord в строках) и L (X-coord в
знакоместах 6*8).
Пример с использованием prapd:
;****************************************
;Листинг 13 Установка координат
; для lnstr(#6D)
ORG #5D64
CALL CLS ;очистка экрана
LD H,5 ;Y-coord
LD L,2 ;X-coord
LD C,#0C ;код рестарта #0С
;из уровня DOS.SYS
RST #10
LD HL,TEXT ;адрес текста
LD C,#6D ;код рестарта lnstr
LD B,37 ;кол-во символов
RST #10 ;печать строки
CALL WAIT
JP EXIT
;текстовый буфер
TEXT DEFM "Печать строки "
DEFM "с координатами "
DEFM "X=2, Y=5"
;дополнительные процедуры
CLS LD C,#73 ;рестарт cls
RST #10 ;для очистки экрана
RET
WAIT LD C,#07 ;рестарт ttyin
RST #10 ;для ожидания нажа-
RET ;тия клавиши
EXIT XOR A ;стандартный выход
LD A,#F4 ;в IS-DOS
RET
;****************************************
То же с использованием wtpos:
;****************************************
;Листинг 14 Установка координат wtpos
; для lnstr(#6D)
ORG #5D64
;исходные данные:
; Y-coord окна =3
; X-coord окна =0
; Print pos =1
;требуемые координаты печати:
; X=2
; Y=5
;следовательно:
; H=2 (смещение по Y)
; L=1 (смещение по X)
CALL CLS ;очистка экрана
LD IX,WIND ;вектор окна
LD A,2 ;открытие окна
LD C,#61
RST #10
LD H,2 ;Y-смещение
LD L,1 ;X-смещение
LD C,#6B ;код рестарта wtpos
RST #10
LD HL,TEXT ;адрес текста
LD C,#6D ;код рестарта lnstr
LD B,37 ;кол-во символов
RST #10 ;печать строки
CALL WAIT
JP EXIT
;вектор окна
WIND DEFB 0
DEFB 3
DEFB 7
DEFB 30
DEFB %00001111
DEFB %00000001
DEFB 1
DEFB 40
;текстовый буфер
TEXT DEFM "Печать строки "
DEFM "с координатами "
DEFM "X=2, Y=5"
;дополнительные процедуры
CLS LD C,#73 ;рестарт cls
RST #10 ;для очистки экрана
RET
WAIT LD C,#07 ;рестарт ttyin
RST #10 ;для ожидания нажа-
RET ;тия клавиши
EXIT XOR A ;стандартный выход
LD A,#F4 ;в IS-DOS
RET
;****************************************
scrol (#70)
Еще один чрезвычайно полезный при ра-
боте с текстами рестарт - scrol(#70). Он
позволяет смещать содержимое рабочей об-
ласти окна на строку вверх или вниз.
При работе рестарта предусмотрено
программирование заполнения крайнего ле-
вого и крайнего правого знакомест в осво-
бодившейся строке (нижней при движении
вверх и наоборот).
Входные параметры:
IX - вектор окна
HL - значение крайних байтов заполнения
освободившейся строки (образ коди-
руется в двоичном представлении,
например: одинарная линия по краю
кодируется как 10000000 00000001 и
т. п. )
A - режим работы:
A=0 - настройка рестарта на вектор
окна - вызывается один раз перед
началом работы в данном окне.
Настройка сохраняется на все время
работы до следующего вызова scrol
c нулевым значением в регистре A.
A=1 - скроллинг на строку вверх
A=2 - скроллинг на строку вниз
Для нормальной работы scrol необходи-
мы еще два параметра, добавляемые к стан-
дартному вектору окна и располагающиеся
непосредственно перед ним:
IX-1 скорость скроллинга - возможные
значения - 1, 2, 4, 8 определяет
время, в течение которого строка
перемещается на 8 пикселей по вер-
тикали
IX-2 задержка скроллинга - возможные
значения от 0 до 255 - регулирует
время паузы между последовательны-
ми вызовами рестарта
Подбором этих двух параметров дости-
гается наибольшая плавность движения при
требуемой скорости скроллинга.
Пример:
;****************************************
;Листинг 15 Применение scrol(#70)
ORG #5D64
;открытие окна
CALL CLS
LD IX,WIND
LD C,#61
LD A,2
RST #10
;настройка процедуры scroll
;на вектор окна:
LD IX,WIND ;вектор окна
LD C,#70 ;код рестарта
LD HL,#0000 ;заполнение
XOR A ;в рег. A - 0
RST #10
;печать строки prstr подфункция 3
LD IX,WIND
LD HL,TEXT
LD C,#68
LD E,3
LD A,%00001010
LD B,1
RST #10
;скроллинг окна вверх в цикле на 5 строк
LD B,5
M1 PUSH BC
LD C,#70 ;код рестарта
LD A,1 ;скроллинг вверх
LD IX,WIND ;вектор окна
LD HL,#0000 ;заполнение
RST #10
POP BC
DJNZ M1
CALL WAIT
JP EXIT
;вектор окна + 2 байта для рестарта
;scrol(#70)
DEFB 25 ;задержка
DEFB 01 ;скорость
WIND DEFB 0
DEFB 5
DEFB 12
DEFB 25
DEFB %00000111
DEFB %00000001
DEFB 2
DEFB 25
;текст для печати
TEXT DEFM "Так работает scrol(#70) "
DEFB #0D
DEFB #03
;Дополнительные процедуры:
CLS LD C,#73 ;рестарт cls
RST #10 ;для очистки экрана
RET
WAIT LD C,#07 ;ожидание клавиши
RST #10
RET
EXIT XOR A ;выход в IS-DOS
LD A,#F4
RET
;****************************************
Применение рестарта scrol вместе с
рестартами печати (например prstr) позво-
ляет организовать на экране режим "бегу-
щего текста".
Рассмотрим еще один пример:
;****************************************
;Листинг 16 Программа "бегущий текст"
ORG #5D64
;процедура открытия окна
CALL CLS
LD IX,WIND
LD C,#61
LD A,2
RST #10
;настройка процедуры scrol
;на вектор окна:
LD IX,WIND
LD C,#70
LD HL,0
XOR A
RST #10
;входные параметры для процедуры печати
LD A,%00001010
;в рег. A - биты 7 и 6 определяют режим
; выравнивания
; биты 5...0 определяют отступ
; от верхнего края
; окна
LD B,1 ;номер строки в
;тексте (строки
;отделяются друг
;от друга символом
;с кодом #0D)
M1 PUSH AF ;сохранить рег. A
PUSH BC ;сохранить BC
;печать строки по номеру ее в тексте
LD IX,WIND ;адрес вектора окна
LD HL,TEXT ;адрес нач. текста
LD C,#68 ;код prstr
LD E,3 ;код подфункции
RST #10
CALL SCROLL ;вызов scrol
POP BC ;восстановить BC
INC B ;увеличить номер
;строки в тексте
LD A,B ;проверка на число
CP 9 ;напечатанных строк
JP Z,END ;выход, если все
;строки напечатаны
POP AF ;восстановить A
JR M1 ;переход к печати
;следующей строки
;вектор окна + 2 байта для рестарта
;scrol(#70)
DEFB 25 ;задержка
DEFB 01 ;скорость
WIND DEFB 1
DEFB 1
DEFB 12
DEFB 28
DEFB %00000111
DEFB %00000001
DEFB 4
DEFB 35
;текст для печати
TEXT DEFM " Эта программа "
DEFB 13
DEFM " представляет собой пример"
DEFB 13
DEFM " организации в системе "
DEFB 13
DEFM " IS-DOS работы с экраном "
DEFB 13
DEFM " в режиме 'бегущий текст'"
DEFB 13
DEFM " Вывод текста организуется"
DEFB 13
DEFM " при помощи рестартов"
DEFB 13
DEFM " scrol(#70) и prstr(#68)"
DEFB 13
;Дополнительные процедуры:
CLS LD C,#73 ;рестарт cls
RST #10 ;для очистки экрана
RET
SCROLL LD C,#70 ;процедура скрол-
LD A,1 ;линга окна на
LD IX,WIND ;строку вверх
LD HL,#0000
RST #10
RET
END POP AF ;завершение работы
CALL WAIT
JR EXIT
WAIT LD C,#07 ;ожидание клавиши
RST #10
RET
EXIT XOR A ;выход в IS-DOS
LD A,#F4
RET
;****************************************
...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября