File-Manager/OBJS/DIALOG.ASM
2025-04-04 00:37:36 +10:00

1409 lines
31 KiB
NASM
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; <20> áª®¬¬¥­â à¨âì ®¡à ¡®â稪¨ Original, Current, Blank
; <20>®¬¥à  ®¡ê¥ªâ®¢
TextLine equ 0 ; áâப  ⥪áâ 
InputLine equ 1 ; áâப  । ªâ. ⥪áâ 
InpLine equ 2 ; ¢ à¨ ­â áâப¨ ¢¢®¤  ¤«ï ®ª­  "Attributes"
ClsCheckBox equ 3 ; Check Box
ClsRadioBut equ 4 ; Radio Button
Button equ 5 ; Button
HLine equ 6 ; £®à¨§. «¨­¨ï
PalleteBox equ 7
TestColor equ 8
ListBox equ 9
PResident1 equ 10
PResident2 equ 11
ProcesLine equ 12
; Š®¬ ­¤ë (¢­ãâ७­¨¥)
cmOkey equ 0
cmCancel equ 1
cmOriginal equ 2 ; ®â ®ª­  "Attributes"
cmCurrent equ 3 ; ®â ®ª­  "Attributes"
cmBlank equ 4 ; ®â ®ª­  "Attributes"
cmSelect equ 5
cmDefault equ 6
cmSkip equ 7
cmSkipAll equ 8
cmAll equ 9
cmAppend equ 10
; ‘®¡ëâ¨ï (¢­ãâ७­¨¥)
evNothing equ 0 ; ­¥â ᮡë⨩
evMouseFr equ 1 ; ­ ¦ â  ª­®¯ª  ¬ëè¨
evKeyboard equ 2 ; ­ ¦ â  ª« ¢¨è 
evCombKey equ 3 ; ­ ¦ â  ª®¬¡¨­ æ¨ï ª« ¢¨è
evCommand equ 4 ; ¥áâì ª®¬ ­¤ 
evMessage equ 5 ; ¯¥à¥¤ ç  á®®¡é¥­¨ï
evRunComLine equ 6 ; ®âà ¡®â âì ª®¬-áâபã
; ‘®®¡é¥­¨ï (¢­ãâ७­¨¥)
msHiddInvr equ 80h
; ®¡ê¥ªâ ~¯ «¨âà ~
msNewColor equ 81h
msNewElem equ 82h
msNewList equ 83h
; ¡ãä¥à á®åà. íªà ­  ¯®¤ áâப®© £®à¨§. ¬¥­î
WinHMenuBuff equ 0C000h+1400h ; ¡ãä¥à §  SysScrn ;+ManScrn
MaxDialWin equ 1400h ; ¬ ªá. à §¬¥à ®ª­ 
; ¡®à¤îà ®ª®­
FramDSl:db "ɻȼͺºº"
WinBoxBuff:
dw 0C000h ; á®åà. ­ ç «® ¡ãä¥à®¢ ®ª®­
;------------ ¤ ­­ë¥ £« ¢­®£® ®¡à ¡®â稪  ¤¨ «®£®¢ëå ®ª®­ --------------
DialData:
ds 16 ; â ¡«¨æ  £« ¢­®£® ¤¨ «. ®ª­ 
DialName:
ds 25 ; ¡ãä¥à § £®«®¢ª®¢ ®ª®­
DialTab:
ds 128 ; £« ¢­ ï â ¡«¨æ  ®¡ê¥ªâ®¢
;-----------------------------------------------------------------------
DialData1:
ds 16 ; â ¡«¨æ  ®¡ëç­®£® ®ª­ 
;---------------------------------------------------------------------
; <20>¥à¥¬¥áâ¨âì ®¡ê¥ªâ (¥£® â ¡«¨æã) ¢ ­ ç «® ’ ¡«¨æë ®¡ê¥ªâ®¢
;
; ‚室: IX-â ¡«¨æ  ®¡ê¥ªâ 
; ‚ë室: â ¡«¨æ  ®¡ê¥ªâ  ¢ ­ ç «¥ ’ ¡«¨æë ®¡ê¥ªâ®¢ ¨
; ®¡ê¥ªâ ®â¬¥ç¥­, ª ª "¢ 䮪ãá¥" (7-© ¡¨â).
;---------------------------------------------------------------------
MoveObj:set 6,(ix+0) ; ®â¬¥â¨âì ®¡ê¥ªâ ¢ ¥£® â ¡«¨æ¥
ld hl,DialTab+5 ; ’ ¡«¨æ  ¢á¥å ®¡ê¥ªâ®¢
MoveOlp:bit 6,(hl) ; ⥪. ®¡ê¥ªâ ®â¬¥ç¥­ ?
res 6,(hl) ; á¡à. ä« £ ®â¬¥âª¨
ret nz ; ¤ , â ¡«¨æ  ®¡ê¥ªâ  㦥 ¢ ­ ç «¥
inc hl
res 7,(hl) ; á¡à. ¯à¨§­ ª 䮪ãá  ®¡ê¥ªâ 
dec hl
ld de,work_buffer ; Move first object in buffer
ld c,(hl) ; Len object label
ld b,0
res 6,c
ldir ; Move
push hl
push hl
ld c,(hl) ; -6
res 6,c
add hl,bc ; Search end table
bit 7,(hl)
jr z,$-6
pop bc
or a ; HL-End table,BC-Address 2 obj
sbc hl,bc ; HL-BC=Len table -1 object
ld c,l ; BC=Len table
ld b,h
pop hl
ld de,DialTab+5 ; Move to begin table
push de
ld a,b
or c
jr z,$+4
ldir
ld hl,work_buffer ; Move from buffer to end table
ld c,(hl) ; object BC=len Object label
res 6,c
ldir
pop hl
inc hl ; ï祩ª  ­®¬¥à  ®¡ê¥ªâ  (+0)
set 7,(hl) ; ãáâ. ¯à¨§­ ª 䮪ãá  ®¡ê¥ªâ 
dec hl
jr MoveOlp
;-------------------------------------------------
; ‘®åà ­¨âì ¬¥áâ® ¯®¤ ¤¨ «. ®ª­®
;-------------------------------------------------
SavDial:PUSH IX
LD A,(IX+2) ;with shadow
ADD A,2
LD L,A
LD A,(IX+3)
INC A
LD H,A ; Wind len
LD E,(IX+0)
LD D,(IX+1)
LD IX,(WinBoxBuff) ; Address Box buffers
LD A,(page_dial_screen) ; Page buffer
LD C,0B2h ; ª®¯¨à. ¨§ ®ª­  ¢ ¡ãä¥à
call scrn4__
POP IX
RET
;-----------------------------------------------------------
; <20>à®æ¥¤ãà  ®ç¨á⪨ ¯«®é ¤¨ 梥⮬ ¤¨ «. ®ª­ 
; <20>  ¢å®¤: IX - ®¯¨á â¥«ì
;-----------------------------------------------------------
PutDialRc:
LD HL,(WinBoxBuff)
ld bc,MaxDialWin;
add hl,bc;
LD B,(IX+3) ;Len Y
LD C,(IX+2) ;Len X
LD E," " ; ᨬ¢®« § ¯®«­¥­¨ï
LD A,(color_array+24) ; 梥⠤¨ «. ®ª­ 
putRc1_:LD D,C
LD (HL),E
INC HL
LD (HL),a ; 梥⠮ª­ 
INC HL
DEC D
JR NZ,$-5
INC HL ; ¬¥áâ® ¤«ï ⥭¨
INC HL
INC HL
INC HL
DJNZ putRc1_
RET
;---------------------------------------------------------------------
; <20>à®æ¥¤ãà  ­ «®¦¥­¨ï à ¬ª¨ ­  ¯àאַ㣮«ì­ãî ¯«®é ¤ì ¤¨ «. ®ª­ 
; <20>  ¢å®¤: IX - ®¯¨á â¥«ì
; HL -  ¤à¥á ®¯¨á â¥«ï à ¬ª¨
;---------------------------------------------------------------------
PutDialFr:
PUSH IY
PUSH HL
POP IY
LD HL,(WinBoxBuff)
ld bc,MaxDialWin;
add hl,bc;
LD A,(color_array+24) ; 梥⠤¨ «. ®ª­ 
LD C,A
LD A,(IY+0)
LD (HL),A ;First Line
INC HL
LD (HL),C
INC HL
LD B,(IX+2) ;Len DialX
DEC B
DEC B
LD A,(IY+4)
LD (HL),A
INC HL
LD (HL),C
INC HL
DJNZ $-4
LD A,(IY+1)
LD (HL),A
INC HL
LD (HL),C
INC HL
INC HL
INC HL
INC HL
INC HL
;
LD E,(IX+2) ;lenX
DEC E
DEC E
LD D,B
LD B,(IX+3) ;lenY
DEC B
DEC B
LD A,(IY+5)
PutDialFr2__:
LD (HL),A ;middle space window
INC HL
LD (HL),C
INC HL
ADD HL,DE
ADD HL,DE
LD (HL),A ;middle space window
INC HL
LD (HL),C
INC HL
INC HL
INC HL
INC HL
INC HL
DJNZ PutDialFr2__
;
LD A,(IY+2)
LD (HL),A ;End Line
INC HL
LD (HL),C
INC HL
LD B,(IX+2) ;Len X
DEC B
DEC B
LD A,(IY+4)
LD (HL),A
INC HL
LD (HL),C
INC HL
DJNZ $-4
LD A,(IY+3)
LD (HL),A
INC HL
LD (HL),C
INC HL
LD HL,DialName ; â¨â« ®ª­ 
LD E,L
LD D,H
LD B,1
INC B ;B=Len name+2 (for space)
LD A,(HL)
INC HL
OR A ;0-End name
JR NZ,$-4
LD A,(IX+2) ;Len X
SUB B ;LenX-Len name=Len empty
SRL A ;Len empty/2=shift
LD HL,(WinBoxBuff)
ld bc,MaxDialWin;
add hl,bc;
LD C,A
LD B,0
ADD HL,BC ;get address name place
ADD HL,BC
LD (HL)," " ; ¢¥¤. ¯à®¡¥« ¨¬¥­¨ ®ª­ 
INC HL
INC HL
EX DE,HL ;HL=Adr.Name,DE=Adr.Place
PutDialFr5__:
LDI ;Move
INC DE ;Attrib place
LD A,(HL)
OR A ;0-End name
JR NZ,PutDialFr5__
LD A," " ; § ªà. ¯à®¡¥« ¨¬¥­¨ ®ª­ 
LD (DE),A
POP IY
RET
;-------------------------------------------------
; <20>à®æ¥¤ãà  ¢ë¢®¤  ¢ ¡ãä¥à ⥭¨ ®ª­ 
; <20>  ¢å®¤: IX -  ¤à¥á ®¯¨á â¥«ï
;-------------------------------------------------
PutDialSh:
LD HL,(WinBoxBuff)
ld de,MaxDialWin;
add hl,de;
LD A,(IX+2) ; Xlen
LD E,A
LD D,0
ADD HL,DE
ADD HL,DE
EXX
LD E,A ; è¨à¨­  ®ª­  X
BIT 7,(IX+0) ; Xpos
JR Z,ExShD1 ; ¯à ¢ ï £à ­¨æ  íªà ­ 
LD A,(IX+0)
NEG ; ¢ A-­  ᪮«ìª® ®ª­® § «¥§«® §  íªà ­
SUB E ; -¤«¨­  ®ª­ =-¢¨¤¨¬ ï ç áâì
NEG
LD E,A ; ¤«¨­  ¢¨¤¨¬®© ç áâ¨
ExShD1: LD D,0
LD HL,(WinBoxBuff)
ADD HL,DE
ADD HL,DE
LD A,(HL) ; ¯¥à¢ ï «¨­¨ï ¡¥§ ⥭¨
INC HL
EXX
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
; á¥à¥¤¨­  ®ª­ 
LD B,(IX+3) ; ¤«¨­  ®ª­  Y-1
DEC B
DShadLp:ADD HL,DE
ADD HL,DE
EXX
ADD HL,DE
ADD HL,DE
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
EXX
;LD A,(HL)
INC HL
EXX
;AND 7
;JR NZ,$+4
;LD A,7
;LD (HL),A
ld (hl),color_shadow ; 梥â ⥭¨
INC HL
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
EXX
;LD A,(HL)
INC HL
EXX
;AND 7
;JR NZ,$+4
;LD A,7
;LD (HL),A
ld (hl),color_shadow ; 梥â ⥭¨
INC HL
DJNZ DShadLp
ADD HL,DE ; ª®­¥æ «¨­¨¨ ¤«ï ⥭¨
ADD HL,DE
INC HL
INC HL
INC HL
INC HL
EXX
ADD HL,DE ; ª®­¥æ ¡ãä¥à 
ADD HL,DE
INC HL
INC HL
INC HL
INC HL
EXX
LD B,E
DShadL1:EXX
DEC HL ; § ¯®«­ï¥¬ á ª®­æ 
;LD A,(HL)
EXX
DEC HL
;AND 7
;JR NZ,$+4
;LD A,7
;LD (HL),A
ld (hl),color_shadow ; 梥â ⥭¨
EXX
DEC HL
LD A,(HL)
EXX
DEC HL
LD (HL),A
DJNZ DShadL1
EXX ; ¤¢  ¯¥à¢ëå §­ ª®¬¥áâ  ¡¥§ ¨§¬¥­¥­¨©
DEC HL
LD A,(HL)
EXX
DEC HL
LD (HL),A
EXX
DEC HL
LD A,(HL)
EXX
DEC HL
LD (HL),A
EXX
DEC HL
LD A,(HL)
EXX
DEC HL
LD (HL),A
EXX
DEC HL
LD A,(HL)
EXX
DEC HL
LD (HL),A
RET
;-----------------------------------------------------------
; <20>® §­ ç¥­¨î ª®®à¤¨­ â ã§­ âì  ¤à¥á ¢áâ ¢ª¨ ¢ ¯ ¬ïâ¨
; Input: BC - Y/X ª®®à¤¨­ âë ®â ­ ç «  ®ª­ 
; Output: DE -  ¤à¥á ¢áâ ¢ª¨
;-----------------------------------------------------------
GetPutA:PUSH HL
LD HL,(WinBoxBuff)
ld de,MaxDialWin;
add hl,de;
LD A,(IX+2) ;Len X-2
ADD A,2 ;Full len with shadow
ADD A,A ;With attributs
LD E,A ;LenX in bytes
LD D,0
LD A,B
OR A
JR Z,$+5
ADD HL,DE
DJNZ $-1
LD E,C ;$+5
ADD HL,DE ;DE-shiftX
ADD HL,DE
EX DE,HL ;DE-Address
POP HL
RET
;-----------------------------------------------------------
; <20>à®æ¥¤ãà  ¯®¤£®â®¢ª¨ ¨ ¢ë¢®¤  ¤¨ «®£®¢®£® ®ª­ 
; <20>  ¢å®¤: HL - €¤à¥á ®¯¨á â¥«ï
;-----------------------------------------------------------
PutDialWn:
PUSH IY
LD IY,DialTab ; ’ ¡«¨æ  ®¡ê¥ªâ®¢, ¨¬¥îé¨å 䮪ãá
LD IX,DialData ; â ¡«¨æ  ¤¨ «. ®ª­ 
IN A,(SLOT3)
PUSH AF
LD A,(page_dial_screen) ; áâà. ¡ãä¥à 
OUT (SLOT3),A
LD A,(HL) ; X ¯®«®¦. ¤¨ «. ®ª­ 
LD (IX+0),A ;+0 Xpos
INC HL
LD A,(HL) ; Y ¯®«®¦. ¤¨ «. ®ª­ 
LD (IX+1),A ;+1 Ypos
INC HL
LD A,(HL) ; è¨à¨­  ¤¨ «. ®ª­ 
LD (IX+2),A ;+2 Xlen
INC HL
LD A,(HL) ; ¢ëá®â  ¤¨ «. ®ª­ 
LD (IX+3),A ;+3 Ylen
INC HL
LD DE,DialName ; â¨â« ¤¨ «. ®ª­ 
PutDialWn1__:
LDI
LD A,(HL)
OR A
JR NZ,PutDialWn1__
LDI
PUSH HL
CALL SavDial ; á®åà. ¯«®é ¤ì íªà ­ 
CALL PutDialRc ; ®ç¨áâ¨âì ¬¥á⮠梥⮬ ®ª­ 
LD HL,FramDSl
CALL PutDialFr ; ¢áâ ¢¨âì à ¬ªã ¨ â¨â« ®ª­ 
CALL PutDialSh ; ¢áâ ¢¨âì ⥭ì
LD A,(IX+0) ; move window
LD (IY+0),A ;+0
INC IY
ADD A,(IX+2) ; ­®¬¥à ®¡ê¥ªâ 
LD (IY+0),A ;+1
INC IY
LD A,(IX+1)
LD (IY+0),A ;+2
INC IY
LD A,(IX+0) ; ª®®à¤¨­ âë |þ| (§ ªà.®ª­®)
LD (IY+0),A ;+3
INC IY
LD A,(IX+1)
LD (IY+0),A ;+4
INC IY
POP HL
; iy=DialTab+5
; 横« ᪠­¨à. ­  ®¡ê¥ªâë ¢ ®¯¨á â¥«¥ ®ª­ 
DialCycle:
ld a,(hl) ; ⨯ á«¥¤. ®¡ê¥ªâ  ®¯¨á â¥«ï
inc hl
bit 7,a ; 0FFh test
jr nz,DialExit ; ª®­¥æ ®¯¨á â¥«ï ¤¨ «. ®ª­ 
ld de,DialCycle
push de
cp TextLine
jp z,PutTextLine ; ¢áâ ¢¨âì ⥪áâ. áâபã
cp HLine
jp z,PutHLine ; ¢áâ ¢¨âì à §¤¥«. «¨­¨î
cp InputLine
jp z,PutInputLine ; ¢áâ ¢¨âì áâபã । ªâ¨à.
cp InpLine
jp z,PutInpLine ; ¢áâ ¢¨âì áâபã । ªâ¨à.
cp Button
jp z,PutButton
cp ClsRadioBut
jp z,PutClsRadioBut ; put claster radio buttons
cp ClsCheckBox
jp z,PutClsCheckBox ; put claster check buttons
cp PalleteBox
jp z,PPallete
cp TestColor
jp z,PTestCol
cp ProcesLine
jp z,PProcess
cp ListBox
jp z,PListBox
cp PResident1
jp z,PResid1
cp PResident2
jp z,PResid2
pop de
DialExit:
ld (iy+0),80h ;+5 ª®­¥æ â ¡«¨æë ®¡ê¥ªâ®¢
call PutDial ; ¢ë¢¥á⨠®ª­® ­  íªà ­
pop af
out (SLOT3),a
pop iy
; <20> ©â¨ ¯®á«¥¤­¨© (á ä¨â祩 䮪ãá ) ®¡ê¥ªâ ¢ ®¯¨á â¥«¥
ld hl,DialTab+5 ; ­ ç «® "¬¥áâ­ëå" â ¡«¨æ ¢ DialTab
ld d,0
SelEndL:ld e,(hl) ; à §¬¥à "¬¥áâ­®©" â ¡«¨æë ¢ DialTab
add hl,de
bit 7,(hl) ; 80h (á¬. ¬¥âªã "DialExit")
jr z,SelEndL ; ­¥ ª®­¥æ â ¡«¨æë ®¡ê¥ªâ®¢ DialTab
and a
sbc hl,de ; ¢¥à­ãâìáï ­  ¯®á«¥¤. ®¡ê¥ªâ
; ¯¥à¥ª ç âì ¢ ¡ãä¥à â ¡«¨æã ¯®á«¥¤. ®¡ê¥ªâ 
ld de,work_buffer ; ¢à¥¬. ¡ãä¥à
ld b,0
ld c,(hl) ; à §¬¥à "¬¥áâ­®©" â ¡«¨æë
ld a,c
ldir ; § ¯®«­. ¡ãä¥àë DialTab+5
ld c,a
DEC HL
LD E,L
LD D,H
OR A
SBC HL,BC
PUSH HL
LD BC,DialTab+4
OR A
SBC HL,BC
LD C,L
LD B,H
POP HL
LD A,B
OR C
JR Z,$+4
LDDR
LD HL,work_buffer ; ¢à¥¬. ¡ãä¥à
LD DE,DialTab+5
LD C,(HL)
LDIR
;xor a
;ld (CIflag+1),a ; ¤«ï ®¡ê¥ªâ  "¡ãââ®­"
; “áâ ­®¢¨âì 䮪ãá ­  ®¡ê¥ªâ
ld ix,DialTab+5 ; ­ ç «® ’ ¡«¨æë ®¡ê¥ªâ®¢
ld hl,DIALe__
push hl
ld a,(ix+1)
set 7,(ix+1) ; ãáâ. ¯à¨§­ ª 䮪ãá 
cp InputLine
jp z,InpLineI ; ¢ë¢¥á⨠ªãàá®à ¢ ®¡ê¥ªâ¥
cp InpLine
jp z,InpLineI ; ¢ë¢¥á⨠ªãàá®à ¢ ®¡ê¥ªâ¥
cp Button
jp z,ButtonI ; 䮪ãá ­  ¡ãâ®­
cp ClsRadioBut
jp z,ClastI
cp ClsCheckBox
jp z,ClastI
cp ListBox
jp z,PLstBoxI
cp PalleteBox
jp z,PLstBoxI
pop hl
DIALe__:ret
;///////////////////////////////////////////////////////////
; ‚ë§®¢ ¤¨ «®£®¢®£® ®ª­ 
; ¢å®¤: hl=®¯¨á â¥«ì ¤¨ «. ®ª­ 
;///////////////////////////////////////////////////////////
DialogW:ld de,(CursorPos) ; á®åà. ¯®«®¦. ªãàá®à  ¢ ª®¬. áâப¥
push de
call Dialog
pop de
ld (CursorPos),de ; ¢®ááâ. ¯®«®¦. ªãàá®à 
ld hl,what ; ¯®«¥ ᮡë⨩
ld a,(hl)
inc hl
ret
;///////////////////////////////////////////////////////////
; ‚ë§®¢ ¤¨ «®£®¢®£® ®ª­  ®è¨¡ª¨
; ¢å®¤: hl=®¯¨á â¥«ì ¤¨ «. ®ª­ 
;///////////////////////////////////////////////////////////
DialogEr:
ld de,color_array+34 ; Select buttons
ld a,(de)
push af
push de
ld a,(color_array+35) ; Sel.buttons Warning/Errors
ld (de),a
ld de,color_array+24 ; Normal text dial. window
ld a,(de)
push af
push de
ld a,(color_array+28) ; Warning/Errors window
ld (de),a
ld de,(CursorPos) ; á®åà. ¯®«®¦. ªãàá®à  ¢ ª®¬. áâப¥
push de
call Dialog
pop de
ld (CursorPos),de ; ¢®ááâ. ¯®«®¦. ªãàá®à 
pop de
pop af
ld (de),a
pop de
pop af
ld (de),a
ld hl,what ; ¯®«¥ ᮡë⨩
ld a,(hl)
inc hl
ret
;///////////////////////////////////////////////////////////
; ‚ë§®¢ ¯à®á⮣® ¨­ä®à¬. ®ª­ 
; ¢å®¤: hl=®¯¨á â¥«ì ®ª­ 
;///////////////////////////////////////////////////////////
WinSimple:
ld de,0C000h+1400h+1400h
ld (WinBoxBuff),de
call PutWindow ; ¢ë¢¥á⨠®ª­®
ld hl,0C000h
ld (WinBoxBuff),hl
ret
;-------------------------------------------------
; ‡ ªàë⨥ ¯à®á⮣® ¨­ä®à¬. ®ª­ 
;-------------------------------------------------
CloseWinSimple:
ld de,0C000h+1400h+1400h
ld (WinBoxBuff),de
call close_window
ld hl,0C000h
ld (WinBoxBuff),hl
ret
;///////////////////////////////////////////////////////////
; ‚ë§®¢ ¯à®á⮣® ¨­ä®à¬. ®ª­  ®è¨¡ª¨
; ¢å®¤: hl=®¯¨á â¥«ì ®ª­ 
;///////////////////////////////////////////////////////////
WinSimpleEr:
ld a,(color_array+27) ; Information window
push af
ld a,(color_array+28) ; Warning/Errors window
ld (color_array+27),a
call WinSimple ; ¢ë¢¥á⨠®ª­®
pop af
ld (color_array+27),a
; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨/¬ë誨
call get_mouse_info
jr nz,CloseWinSimple ; ¡ãâ®­ë ­ ¦ âë
ld a,2 ; ®¯à®á ¡¥§ ®¦¨¤ ­¨ï
rst 20h
jr z,$-8 ; ­¥ ­ ¦ âë
ld a,1 ; ®ç¨áâ¨âì ¡ãä¥à ª« ¢ë
rst 20h
jr CloseWinSimple
;-----------------------------------------------------------
; Žá­®¢­®© ®¡à ¡®â稪 ¤¨ «®£®¢®£® ®ª­ 
;
; ¢å®¤: hl-®¯¨á â¥«ì ®ª­ 
;-----------------------------------------------------------
Dialog: call PutDialWn ; ¢ë¢¥á⨠¤¨ «. ®ª­®
; Žá­®¢­®© 横« ᮡë⨩ ®ª­ 
DialogLoop:
call handle_event ; —¨â ¥¬ ᮡë⨥
ld ix,DialTab+5 ; ’ ¡«¨æ  ®¡ê¥ªâ®¢
; 横« ¯à®¢¥àª¨ ­  ᮡëâ¨ï ª ¦¤®£® ¨§ ®¡ê¥ªâ®¢
DialLoop:
ld hl,DialWex___
push hl
ld a,(ix+1) ; ­ ç «® â ¡«¨æë ⥪. ®¡ê¥ªâ 
res 7,a ; ã¡à âì ä« £ 䮪ãá 
; (⮫쪮 䮪ãá­ë¥ ®¡ê¥ªâë)
cp InputLine
jp z,EvInputLine
cp InpLine
jp z,EvInpLine
cp Button
jp z,EvButton
cp ClsRadioBut
jp z,EvClasterBut
cp ClsCheckBox
jp z,EvClasterBut
cp ListBox
jp z,EListBox
cp ProcesLine
jp z,EProcess
cp PalleteBox
jp z,EPallete
cp TestColor
jp z,ETestCol
cp PResident1
jp z,EResident1
cp PResident2
jp z,EResident2
pop hl
DialWex___:
ld c,(ix+0) ; ¤«¨­  â ¡«¨æë ®¡ê¥ªâ  ¢ DialTab
ld b,0
add ix,bc ; ­  â ¡«¨æã á«¥¤. ®¡ê¥ªâ 
bit 7,(ix+0) ; ª®­¥æ ’ ¡«¨æë ®¡ê¥ªâ®¢ ?
jr z,DialLoop ; ­¥â
; ¯à®¢¥àª  ­  ᮡëâ¨ï á ¬®£® ®ª­ 
;ld de,DialogC___
ld de,DialogLoop
push de
ld hl,what ; ¯®«¥ ᮡë⨩
ld a,(hl)
inc hl
cp evMouseFr ; Fire from mouse
jr z,TstExtD1 ; test on Close window
cp evKeyboard ; Event keyboard
jr z,TstKeyD ; â¥áâ ­  Esc/Enter
cp evCombKey ; Event keyboard
jr z,TstQuitD ; â¥áâ ­  F10
cp evCommand
jr z,TstCmnD ; ¯à®¢¥àª  ª®¬ ­¤ ®â ¬ë誨, ª« ¢ë
ret ; ­ § ¤ ¢ ®á­. 横« ®ª­ 
TstKeyD:ld a,(hl) ;+1 what
cp 1Bh ; Esc
jr z,CancelD
cp 0Dh ; Enter
jr z,OkeyD
ret
;
TstQuitD:
inc hl
ld a,(hl) ;+2 what
cp 44h ; F10
jr z,CancelD
ret
;
TstCmnD:ld a,(hl) ;+1 what
cp cmCancel
jr z,CancelD
;
; ¡ãâ®­ë Original, Current, Blank
ld a,(hl) ;+1 what
cp cmOriginal
;jp z,OriginalAttr
cp cmCurrent
;jp z,CurrentAttr
cp cmBlank
;jp z,BlankAttr
;
jr OkeyDn___
; Ok
OkeyD: ld hl,what
ld (hl),evCommand ; ⨯ ᮡëâ¨ï
inc hl
ld (hl),cmOkey ;+1 ­®¬¥à ª®¬ ­¤ë
OkeyDn___:
ld ix,DialTab+5 ; ’ ¡«¨æ  ®¡ê¥ªâ®¢
OkeyLp___:
ld de,OkeyN___ ; Find clasters & get data
push de
ld a,(ix+1) ; ­®¬¥à ⥪. ®¡ê¥ªâ 
res 7,a ; ã¡à âì ¯à¨§­ ª 䮪ãá 
cp ClsRadioBut
jp z,GetClsData ; ã§­ âì á®áâ. ï祩ª¨ ª« áâ¥à 
cp ClsCheckBox
jp z,GetClsData
cp ListBox
jp z,GetLstBox
pop de
OkeyN___:
ld c,(ix+0) ; à §¬¥à â ¡«¨æë ⥪. ®¡ê¥ªâ 
ld b,0
add ix,bc ; ­  â ¡«¨æã á«¥¤. ®¡ê¥ªâ 
bit 7,(ix+0) ; ª®­¥æ ’ ¡«¨æë ®¡ê¥ªâ®¢ ?
jr z,OkeyLp___ ; ­¥â
DialogE___:
; ¢ë©â¨ ¨§ ¤¨ «. ®ª­ 
call Close_Dial_Win ; § ªàëâì ®ª­®
pop de ; ¡ « ­á á⥪  (®á­. 横«  ®ª­ )
jp get_fire
; Cancel
CancelD:ld hl,what ; ¯®«¥ ᮡë⨩
ld (hl),evCommand
inc hl
ld (hl),cmCancel ; ­®¬¥à ª®¬ ­¤ë
jr DialogE___
; <20>஢¥àª  ª®®à¤¨­ â ¬ë誨 ¨ ¤¨ «. ®ª­ 
TstExtD1:
ld e,(hl) ;+1 X Get mouse coords in DE
inc hl
ld d,(hl) ;+2 Y
ld ix,DialData ; â ¡«¨æ  ®á­. ¤¨ «. ®ª­ 
ld c,(ix+0) ; Xo «¥¢ ï
ld b,(ix+1) ; Xi ¯à ¢ ï
ld l,(ix+2) ; è¨à¨­ 
ld h,(ix+3) ; ¢ëá®â 
add hl,bc
ld a,e
cp c
jr c,CancelD ; < Xo «¥¢ ï
cp l
jr nc,CancelD ; > Xi ¯à ¢ ï
ld a,d
cp b
jr c,CancelD ; < Yo «¥¢ ï
cp h
jr nc,CancelD ; > Yi ¯à ¢ ï
ret ; ­¥ ¢ë室¨âì ¨§ ¤¨ «. ®ª­ 
;-----------------------------------------------------------
; ‚뢥á⨠¤¨ «®£®¢®¥ ®ª­® ­  íªà ­
;-----------------------------------------------------------
PutDial:push ix
ld a,(ix+2) ; with shadow
add a,2
ld l,a
ld a,(ix+3)
inc a
ld h,a ; Win len
ld e,(ix+0)
ld d,(ix+1)
ld ix,(WinBoxBuff) ; Address Box buffers
ld bc,MaxDialWin;
add ix,bc;
ld a,(page_dial_screen) ; Page buffer
ld c,0B3h ; ¨§ ¡ãä¥à  ¢ ⥪áâ. ®ª­®
call scrn4__
pop ix
ret
;-----------------------------------------------------------
; ‡ ªàëâì ¯à®á⮥ ®ª­®
;-----------------------------------------------------------
close_window:
ld ix,DialData1 ; â ¡«¨æ  ®á­. ¤¨ «. ®ª­ 
jr close_dial_win1
;-----------------------------------------------------------
; ‡ ªàëâì ¤¨ «®£®¢®¥ ®ª­® ¨ ¢®ááâ. ¬¥áâ® ¯®¤ ­¨¬
;-----------------------------------------------------------
Close_Dial_Win:
call ResILCr ; á¡à®á¨âì ªãàá®à
ld ix,DialData ; â ¡«¨æ  ®á­. ¤¨ «. ®ª­ 
close_dial_win1:
ld a,(ix+2) ; with shadow
add a,2
ld l,a
ld a,(ix+3)
inc a
ld h,a ; Win len
ld e,(ix+0)
ld d,(ix+1)
ld ix,(WinBoxBuff) ; Address Box buffers
ld a,(page_dial_screen) ; Page buffer
ld c,0B3h ; ¨§ ¡ãä¥à  ¢ ⥪áâ. ®ª­®
jp scrn4__
;-----------------------------------------------------------
; Setting dialog invert objects
;
; Input: e=X pos
; d=Y pos
; c=X len
;-----------------------------------------------------------
SetDialInv:
push ix
ld ix,DialData ; â ¡«¨æ  ®á­. ¤¨ «. ®ª­ 
in a,(SLOT3)
push af
ld a,(page_dial_screen) ; Page buffer
out (SLOT3),a
ld l,c
ld h,1
ld (RDlIlen+1),hl ; á®åà. à §¬¥à
ld (RDlIpos+1),de ; á®åà. ¯®«®¦.
ld a,e
sub (ix+0)
ld c,a
ld a,d
sub (ix+1)
ld b,a
call GetPutA
ex de,hl
ld (RDlIbuf+2),hl
dec e; ; 0-ï ¤«¨­  ? (ª®£¤  "Input Line" ¡¥§ ¨¬¥­¨)
inc e;
jr z,SetDia1; ; ¢ë©â¨
ld b,e
set_dial_tmp_inv:
ld a,(color_array+26) ; 30h 梥â Selected title (®¡ê¥ªâ )
ld e,a
ld a,(color_array+25) ; 梥â hot-¡ãª¢ë ¤¨ «. ®ª­ 
ld d,a
SetDin1:inc hl
ld a,(hl)
and 0Fh
cp d ; hot-¡ãª¢  ?
ld a,e
jr nz,$+5
and 0F0h
or d
ld (hl),a
inc hl
djnz SetDin1
ld ix,(RDlIbuf+2) ; Put Name with invert
ld hl,(RDlIlen+1)
ld de,(RDlIpos+1)
call PutDialLn
SetDia1:pop af
out (SLOT3),a
pop ix
ret
;-------------------------------------------------
; Set claster buttons invert
; Input:
; E - X pos
; D - Y pos
; C - X len
; (¤«ï CheckBox)
;-------------------------------------------------
SetClasInv:
;PUSH IX
;LD IX,DialData ; â ¡«¨æ  ®á­. ¤¨ «. ®ª­ 
;IN A,(SLOT3)
;PUSH AF ; á®åà. page4
;LD A,(page_dial_screen)
;OUT (SLOT3),A ; ¢ª«. ¡ãä¥à
;PUSH HL
;LD L,C ; Len X
;LD H,1 ; Len Y
;LD (RClIlen+1),HL ; Save len
;LD (RClIpos+1),DE ; Save pos
;dec c ; 0-ï ¤«¨­  ? (ª®£¤  "Input Line" ¡¥§ ¨¬¥­¨)
;inc c
;jr z,SetDia3 ; ¢ë©â¨
;LD A,E
;SUB (IX+0)
;LD C,A
;LD A,D
;SUB (IX+1)
;LD B,A
;CALL GetPutA
;EX DE,HL
;LD (RClIbuf+2),HL
;LD B,E
;ld a,(color_array+26) ; 30h 梥⠢뤥«. ®¡ê¥ªâ 
;ld a,(ColDialWn) ; 梥⠤¨ «. ®ª­ 
;ld e,a
;ld a,(color_array+25) ; 梥â hot-¡ãª¢ë ¤¨ «. ®ª­ 
;ld d,a
;SetDin2:inc hl
;ld a,(hl)
;and 0Fh
;cp d ; hot-¡ãª¢  ?
;ld a,e
;jr nz,$+5
;and 0F0h
;or d
;ld (hl),a
;inc hl
;djnz SetDin2
;LD IX,(RClIbuf+2) ; Put Name with invert
;LD HL,(RClIlen+1)
;LD DE,(RClIpos+1)
;CALL PutDialLn
;SetDia3:POP HL
;POP AF
;OUT (SLOT3),A
;POP IX
ld e,(ix+2) ; Xo pos element
inc e
;inc e
;inc e
ld d,(hl) ; Y pos element
ld (CursorPos),de
push hl
call PILCurs ; Set cursor
pop hl
;ld a,1
;ld (CIflag+1),a
ret
;-----------------------------------------------------------
; Res dialog invert objects
; Input: None
;-----------------------------------------------------------
ResDialInv:
push ix
in a,(SLOT3)
push af
ld a,(page_dial_screen) ; Page buffer
out (SLOT3),a
ld a,(RDlIlen+1)
or a; ; 0-ï ¤«¨­  ? (ª®£¤  "Input Line" ¡¥§ ¨¬¥­¨)
jr z,ResDia1; ; ¢ë©â¨
ld hl,(RDlIbuf+2)
ld b,a
ld a,(color_array+24) ; 梥⠤¨ «. ®ª­ 
ld e,a
ld a,(color_array+25) ; 梥â hot-¡ãª¢ë ¤¨ «. ®ª­ 
ld d,a
ResDin1:inc hl
ld a,(hl)
and 0Fh
cp d ; hot-¡ãª¢  ?
ld a,e
jr nz,$+5
and 0F0h
or d
ld (hl),a
inc hl
djnz ResDin1
RDlIbuf:ld ix,0 ; Put Name with invert
RDlIlen:ld hl,0
RDlIpos:ld de,0
call PutDialLn
;CIflag: ld a,0 ; 1 - Was claster invert
;or a
;call nz,ResClasInv
ResDia1:call ResILCr ; ¢ëª«. ªãàá®à ®¡ê¥ªâ  "Input Line"
pop af
out (SLOT3),a
pop ix
ld hl,what
ld (hl),evMessage ; ⨯ ᮡëâ¨ï
inc hl
ld (hl),msHiddInvr ; ¢­ãâà. ª®¬ ­¤ 
jp TransMessage ; ¯¥à¥¤ âì á®®¡é¥­¨¥
;-------------------------------------------------
; Res Claster invert
; Input: None
;-------------------------------------------------
ResClasInv:
push ix
IN A,(SLOT3)
PUSH AF ; á®åà. page4
LD A,(page_dial_screen)
OUT (SLOT3),A ; ¢ª«. ¡ãä¥à
push hl
;LD HL,(RClIbuf+2)
;ld a,(RClIlen+1)
;or a; ; 0-ï ¤«¨­  ? (ª®£¤  "Input Line" ¡¥§ ¨¬¥­¨)
;jr z,ResDia2; ; ¢ë©â¨
;ld b,a
;ld a,(color_array+24) ; 梥⠤¨ «. ®ª­ 
;ld e,a
;ld a,(color_array+25) ; 梥â hot-¡ãª¢ë ¤¨ «. ®ª­ 
;ld d,a
;ResDin2:inc hl
;ld a,(hl)
;and 0Fh
;cp d ; hot-¡ãª¢  ?
;ld a,e
;jr nz,$+5
;and 0F0h
;or d
;ld (hl),a
;inc hl
;djnz ResDin2
;RClIbuf:LD IX,0 ; Put Name with invert
;RClIlen:LD HL,0
;RClIpos:LD DE,0
;CALL PutDialLn
;ResDia2:
call ResILCr ; ¢ëª«. ªãàá®à
;xor a
;LD (CIflag+1),a
pop hl
POP AF
OUT (SLOT3),A
pop ix
ret
;-------------------------------------------------
; ‚뢮¤ ­  íªà ­
;-------------------------------------------------
PutDialLn:
ld a,d
cp 31
ret nc
bit 7,e
jr z,pdln__
ld a,e
ld e,0
neg
ld c,a
sub l
neg
ld l,a
ret z
ret m
ld a,c
add a,a
db 0DDh
add a,l
db 0DDh
ld l,a
jr nc,pdln__
db 0DDh
inc h
pdln__: ld a,e
cp 80
ret nc
add a,l
cp 80
jr c,$+6
ld a,80
sub e
ld l,a
ld a,(page_dial_screen)
ld c,0B3h ; ª®¯¨à. á ¡ãä¥à  ­  íªà ­
jp scrn4__
;-------------------------------------------------
; ‚뤥«¨âì ¡ãâ®­
;-------------------------------------------------
PushBut:in a,(SLOT3)
push af
ld a,(page_dial_screen) ; Page buffer
out (SLOT3),a
push ix
ld e,(ix+2) ; Xo left
ld d,(ix+4) ; Y
ld a,(ix+3) ; Xi right
sub e
ld l,a
ld h,1 ; Y len
push hl ; save Len
push de ; save Pos
ld a,l
ld ix,DialData ; â ¡«¨æ  ®á­. ¤¨ «. ®ª­ 
ld a,e
sub (ix+0)
ld c,a
ld a,d
sub (ix+1)
ld b,a
call GetPutA
ld c,l
sla c
ld b,0
ld hl,work_buffer
ex de,hl
ldir ; ᪮¯¨à. ¢ ¡ãä¥à
pop de
pop hl
ld ix,work_buffer
in a,(SLOT3) ; Page1
ld c,0B3h ; ¨§ ¡ãä¥à  ­  íªà ­
call scrn4__
ld b,8
halt
djnz $-1
pop ix
pop af
out (SLOT3),a
ret
;---------------------------------------------------------------------
; <20>¥à¥¤ ç  á®®¡é¥­¨© ¯® ®¡ê¥ªâ ¬ á ⥪ã饣® ®¡ê¥ªâ 
;---------------------------------------------------------------------
TransMessUp:
push iy
push ix
jr TransEx
;---------------------------------------------------------------------
; <20>¥à¥¤ ç  á®®¡é¥­¨© ¯® ®¡ê¥ªâ ¬ á ¯¥à¢®£® ®¡ê¥ªâ 
;---------------------------------------------------------------------
TransMessage:
push iy
push ix
ld ix,DialTab+5 ; ’ ¡«¨æ  ®¡ê¥ªâ®¢
TransLp:ld hl,TransEx
push hl
ld a,(ix+1) ; ⥪ã騩 ®¡ê¥ªâ
and 7Fh ; á¡à. 7-© ¡¨â (ä« £ ¢ë¤¥«¥­¨ï ®¡ê¥ªâ )
cp InputLine
jp z,EvInputLine
cp InpLine
jp z,EvInpLine
cp Button
jp z,EvButton
cp ClsCheckBox
jp z,EvClasterBut
cp ClsRadioBut
jp z,EvClasterBut
cp ListBox
jp z,EListBox
cp PalleteBox
jp z,EPallete
cp TestColor
jp z,ETestCol
cp PResident1
jp z,EResident1
cp PResident2
jp z,EResident2
pop hl
TransEx:ld c,(ix+0)
ld b,0
add ix,bc ; á«¥¤. ®¡ê¥ªâ
bit 7,(ix+0)
jr z,TransLp ; ­¥ ª®­¥æ â ¡«¨æë ®¡ê¥ªâ®¢
pop ix
pop iy
ld hl,what ; ¯®«¥ ᮡë⨩
ld a,(hl)
cp evMessage ; ⨯ ᮡëâ¨ï
ret nz ; test command
ld (hl),evNothing
ret
;===========================================================
; ‚뢮¤ Ž¡ëç­®£® Žª­ 
;===========================================================
;-----------------------------------------------------------
; <20>à®æ¥¤ãà  ¯®¤£®â®¢ª¨ ¨ ¢ë¢®¤  ®¡ëç­®£® ®ª­ .
; ˆá¯®«ì§ã¥âáï ¤«ï ¢ë¢®¤  ¨­ä. ®ª®­.
; ¢å®¤: hl=®¯¨á â¥«ì ®ª­ 
;-----------------------------------------------------------
PutWindow:
ld a,(color_array+24) ; 梥⠤¨ «. ®ª­ 
push af
ld a,(color_array+27) ; 梥⠨­ä®à¬. ®ª®­
ld (color_array+24),a ; 梥⠤¨ «. ®ª­ 
ld ix,DialData1; ; â ¡«¨æ  ¤¨ «. ®ª­ 
in a,(SLOT3)
push af
ld a,(page_dial_screen) ; áâà. ¡ãä¥à  ®ª­ 
out (SLOT3),a
ld a,(hl) ; X ¯®«®¦. ®ª­ 
ld (ix+0),a ;+0 Xpos
inc hl
ld a,(hl) ; Y ¯®«®¦. ®ª­ 
ld (ix+1),a ;+1 Ypos
inc hl
ld a,(hl) ; è¨à¨­  ®ª­ 
ld (ix+2),a ;+2 Xlen
inc hl
ld a,(hl) ; ¢ëá®â  ®ª­ 
ld (ix+3),a ;+3 Ylen
inc hl
ld de,DialName ; â¨â« ®ª­ 
put_win1__:
ldi
ld a,(hl)
or a
jr nz,put_win1__
ldi
push hl
call SavDial ; á®åà. ¯«®é ¤ì íªà ­ 
call PutDialRc ; ®ç¨áâ¨âì ¬¥á⮠梥⮬ ®ª­ 
ld hl,FramDSl
call PutDialFr ; ¢áâ ¢¨âì à ¬ªã ¨ â¨â« ®ª­ 
call PutDialSh ; ¢áâ ¢¨âì ⥭ì
pop hl
; 横« ᪠­¨à. ­  ®¡ê¥ªâë ®¯¨á â¥«ï ®ª­ 
put_win_cycle:
ld a,(hl) ; ⨯ á«¥¤. ®¡ê¥ªâ  ®¯¨á â¥«ï
inc hl
bit 7,a ; -1 ?
jr nz,put_win_done ; ª®­¥æ ®¯¨á â¥«ï ®ª­ 
ld de,put_win_cycle
push de
cp TextLine
jp z,PutTextLine ; ¢áâ ¢¨âì ⥪áâ. áâபã
cp HLine
jp z,PutHLine ; ¢áâ ¢¨âì à §¤¥«. «¨­¨î
;cp Frame
;jp z,PFrame ; ¢áâ ¢¨âì à ¬ªã
pop de
put_win_done:
call PutDial ; ¢ë¢¥á⨠®ª­® ­  íªà ­
pop af
out (SLOT3),a
pop af
ld (color_array+24),a ; ¢®ááâ. 梥â
ret