(C) Иван Рощин, Москва, 1998
Предлагаю вашему вниманию небольшую
(44 байта), но очень полезную процедуру
OPEN_W , которая изображает на экране ок-
но с рамкой. Ее нетрудно модифицировать,
задав любые символы для изображения рамки
и заполнения окна.
При ее вызове в регистровой паре DE
нужно задать координаты левого верхнего
угла рамки, в регистре B - высоту, C ши-
рину окна (в символах):
╔═════════════════════════╗
║ ^ ║
║ |E ║
║ D v ║
║<--->┌───────────┐ ^ ║
║ │ │ | ║
║ │ │ | ║
║ │ окно │ |B ║
║ │ │ | ║
║ │ │ | ║
║ │ │ | ║
║ └───────────┘ v ║
║ <-----------> ║
║ C ║
╚═════════════════════════╝
При использовании этой процедуры в
вашей программе должна присутствовать и
процедура печати одного символа. Предпо-
лагается, что она называется PRSYM и при
ее вызове в аккумуляторе указывается код
печатаемого символа, а в DE - координаты
печати (D=X, E=Y). После окончания работы
процедуры PRSYM регистры не должны изме-
няться.
Текст процедуры PRSYM здесь не при-
водится. В конце концов, если вам понадо-
билось вывести окно и что-то в нем напе-
чатать, то процедура печати символа у вас
уже должна быть.
OPEN_W LD A,"┌" ;левый верхний угол рамки
LD L,"┐" ;правый верхний угол рамки
CALL OPEN_W2
OPEN_W1 LD A,"│" ;вертикальная граница рамки
LD H," " ;этим символом заполняется
;окно
LD L,A
CALL OPEN_W3
DJNZ OPEN_W1
LD A,"└" ;левый нижний угол рамки
LD L,"┘" ;правый нижний угол рамки
OPEN_W2 LD H,"─" ;горизонтальная граница рамки
OPEN_W3 PUSH DE
CALL PRSYM
INC D
LD A,H
LD H,C
OPEN_W4 CALL PRSYM
INC D
DEC H
JR NZ,OPEN_W4
LD A,L
CALL PRSYM
POP DE
INC E
RET
* * *