File-Manager/MOD0/OBJS/RADIO.ASM
2025-04-05 01:58:39 +10:00

790 lines
18 KiB
NASM
Executable File
Raw Permalink 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.

; ‚ª«î砥⠮¡ê¥ªâë ~Radio Button~ ¨ ~Check Box~
;
;=====================================================================
; <20>à®à¨á®¢ª  ®¡ê¥ªâ  "Radio Button"
; object ~Claster radio buttons~ (¨¬¥¥â 䮪ãá)
; Input: HL-®¯¨á â¥«ì ®¡ê¥ªâ 
; Format table:
; +0 - ­®¬¥à ®¡ê¥ªâ  ~Radio Button"
; +1 - Xo «¥¢®¥ ¯®«®¦. ®¡ê¥ªâ 
; +2 - Xi ¯à ¢®¥ ¯®«®¦. ®¡ê¥ªâ 
; +3 - Yo «¥¢®¥ ¯®«®¦. ®¡ê¥ªâ 
; +4 - Yi ¯à ¢®¥ ¯®«®¦. ®¡ê¥ªâ 
; +5 - Xi ¯à ¢®¥ ¯®«®¦. ¨¬¥­¨
; from: +0 - Y ¯®«®¦. radio-ª­®¯ª¨
; +1 - ᪥­-ª®¤ hot-¡ãª¢ë
; +2 - âਣ. ï祩ª 
; +3,4 -  ¤à¥á ï祩ª¨
; 80h - ª®­¥æ â ¡«¨æë ®¡ê¥ªâ 
;---------------------------------------------------------------------
; db ClsRadioBut ; ­®¬¥à ®¡ê¥ªâ 
; dw 0202h,0112h ; Yo,Xo,lenY,lenX (á "() ")
; db "&Viewer command",0 ; ¨¬ï í«¥¬¥­â 
; db 2Dh ; ᪥­-ª®¤ hot-¡ãª¢ë
; dw Mode1 ; ï祩ª  ¯ ¬ïâ¨
; db "&Editor command",0 ; ¨¬ï í«¥¬¥­â 
; db 12h ; ᪥­-ª®¤ hot-¡ãª¢ë
; dw Mode2 ; ï祩ª  ¯ ¬ïâ¨
; db 0 ; ª®­¥æ ª« áâ¥à 
;=====================================================================
PutClsRadioBut:
push iy
inc iy
ld (iy+0),a ; ­®¬¥à ®¡ê¥ªâ 
ld a,(hl) ; X pos
inc hl
ld c,a
ld (ix+4),a ; Save X pos
add a,(ix+0) ; Pos X from begin screen
ld (iy+1),a ;+1 Xo
ld a,(hl) ; Y pos
inc hl
ld b,a
ld (ix+5),a ; Save Y pos
add a,(ix+1) ; Pos Y from begin screen
ld (iy+3),a ;+3 Yo
call GetPutA
ld a,(hl)
inc hl
ld (ix+6),a
add a,(iy+1)
ld (iy+2),a ; Xi pos
ld a,(hl)
inc hl
add a,(iy+3)
ld (iy+4),a
ld a,(ix+6)
add a,(iy+1)
ld (iy+5),a ; Xi pos name
ld bc,6 ; next element claster
add iy,bc
; Next element
ClChkLp:ld c,(ix+4) ; pos element
ld b,(ix+5)
call GetPutA
ld b,0
ex de,hl
ld (hl),"("
inc hl
inc hl
inc b
push hl
inc hl
inc hl
inc b
ld (hl),")"
inc hl
inc hl
inc b
inc hl
inc hl
inc b
; ¨¬ï í«¥¬¥­â  ®¡ê¥ªâ 
ld a,(color_array+24) ; 梥⠤¨ «. ®ª­ 
ld c,a
ld a,(de)
ClChkL1:inc de
cp "&"
jr nz,ClChkN0
ld a,(color_array+25) ; 梥â hot-¡ãª¢ë ¤¨ «. ®ª­ 
ld c,a
ld a,(de)
inc de
ld (hl),a
inc hl
ld a,(hl)
and 0F0h
or c
ld (hl),a
inc hl
ld a,(color_array+24) ; 梥⠤¨ «. ®ª­ 
ld c,a
inc b
ld a,(de)
inc de
ClChkN0:ld (hl),a
inc hl
ld (hl),c
inc hl
inc b
ld a,(de)
or a
jr nz,ClChkL1
inc de
ld a,(ix+5) ; Current Y pos
add a,(ix+1) ; from begin screen
ld (iy+0),a
inc iy
ex de,hl
ld a,(hl)
inc hl
ld (iy+0),a ; ᪥­-ª®¤ hot-¡ãª¢ë
inc iy
ld c,(hl)
inc hl
ld b,(hl)
inc hl
ld a,(bc)
ld (iy+0),a ; ï祩ª 
inc iy
ld (iy+0),c ; bc= ¤à¥á ï祩ª¨
inc iy
ld (iy+0),b
inc iy
pop bc
or a
ld a," "
jr z,$+4
ld a,""
ld (bc),a
inc (ix+5)
ld a,(hl)
or a
jp nz,ClChkLp
ld (iy+0),80h ; End tab claster
inc iy
inc hl
; á®åà. à §¬¥à â ¡«¨æë ¢ ’ ¡«¨æ¥ ®¡ê¥ªâ®¢
push iy
exx
pop hl
pop de
or a
sbc hl,de
ld a,l
ld (de),a
exx
ld a,1
ld (SavElem+1),a ; ¯¥à¢ë© í«¥¬¥­â
ret
;=====================================================================
; <20>à®à¨á®¢ª  ®¡ê¥ªâ  "Check Box"
; object ~Claster check buttons~ (¨¬¥¥â 䮪ãá)
; Input: HL-®¯¨á â¥«ì ®¡ê¥ªâ 
; Format table:
; +0 - ­®¬¥à ®¡ê¥ªâ  "CheckBox"
; +1 - Xo «¥¢®¥ ¯®«®¦. ®¡ê¥ªâ 
; +2 - Xi ¯à ¢®¥ ¯®«®¦. ®¡ê¥ªâ 
; +3 - Yo «¥¢®¥ ¯®«®¦. ®¡ê¥ªâ 
; +4 - Yi ¯à ¢®¥ ¯®«®¦. ®¡ê¥ªâ 
; +5 - Xi ¯à ¢®¥ ¯®«®¦. ¨¬¥­¨ ®¡ê¥ªâ 
; from: +0 - Y ¯®«®¦. 祪-¡®ªá 
; +1 - ᪥­-ª®¤ hot-¡ãª¢ë
; +2 - âਣ. ï祩ª 
; +3,4 -  ¤à¥á ï祩ª¨
; 80h - ª®­¥æ â ¡«¨æë ®¡ê¥ªâ 
;---------------------------------------------------------------------
; db ClsCheckBox ; ­®¬¥à ®¡ê¥ªâ 
; dw 0202h,0225h ; Yo,Xo,lenY,lenX (á "[x] ")
; db "&Clear r/o attribute",0 ; ¨¬ï í«¥¬¥­â 
; db 2Ch ; ᪥­-ª®¤ hot-¡ãª¢ë
; dw cSystem1 ;  ¤à¥á ï祩ª¨
; db "Clear &attribute",0 ; ¨¬ï í«¥¬¥­â 
; db 1Dh ; ᪥­-ª®¤ hot-¡ãª¢ë
; dw cSystem2 ;  ¤à¥á ï祩ª¨
; db 0 ; ª®­¥æ ª« áâ¥à 
;=====================================================================
PutClsCheckBox:
PUSH IY
INC IY
LD (IY+0),A ; ­®¬¥à ®¡ê¥ªâ 
LD A,(HL) ; Xo pos
INC HL
LD C,A
LD (IX+4),A ; Save X pos ##
ADD A,(IX+0) ; Pos X from begin screen
LD (IY+1),A ;+1 Xo
LD A,(HL) ; Yo pos
INC HL
LD B,A
LD (IX+5),A ; Save Yo pos
ADD A,(IX+1) ; Pos Yo from begin screen
LD (IY+3),A ;+3 Yo
CALL GetPutA
LD A,(HL) ; X Len
INC HL
LD (IX+6),A ; è¨à¨­  ®¡ê¥ªâ 
;
ADD A,(IY+1) ;+1 Xo «¥¢ ï ¯®§¨æ¨ï ®¡ê¥ªâ 
LD (IY+2),A ;+2 Xi pos
LD A,(HL) ; Y Len
INC HL
ADD A,(IY+3) ;+3 Yo pos object
LD (IY+4),A ;+4 Yi pos object
LD A,(IX+6)
ADD A,(IY+1)
LD (IY+5),A ; Xi pos name
LD BC,6 ; next element claster
ADD IY,BC
; Next element
ClRadLp:LD C,(IX+4) ; pos element
LD B,(IX+5)
CALL GetPutA
LD B,0
EX DE,HL
LD (HL),"["
INC HL
INC HL
INC B
PUSH HL
INC HL
INC HL
INC B
LD (HL),"]"
INC HL
INC HL
INC B
INC HL
INC HL
INC B
; ¨¬ï í«¥¬¥­â  ®¡ê¥ªâ 
LD A,(color_array+24) ; 梥⠤¨ «. ®ª­ 
LD C,A
LD A,(DE)
ClRadL1:INC DE
CP "&"
JR NZ,ClRadN0
LD A,(color_array+25) ; 梥â hot-¡ãª¢ë ¤¨ «. ®ª­ 
LD C,A
LD A,(DE)
INC DE
LD (HL),A
INC HL
LD A,(HL)
AND 0F0h
OR C
LD (HL),A
INC HL
LD A,(color_array+24) ; 梥⠤¨ «. ®ª­ 
LD C,A
INC B
LD A,(DE)
INC DE
ClRadN0:LD (HL),A
INC HL
LD (HL),C
INC HL
INC B
LD A,(DE)
OR A
JR NZ,ClRadL1
INC DE
LD A,(IX+5) ; Current Y pos
ADD A,(IX+1) ; from begin screen
LD (IY+0),A
INC IY
EX DE,HL
ld a,(hl)
ld (iy+0),a ; ᪥­-ª®¤ hot-¡ãª¢ë
inc hl
inc iy
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD A,(BC)
LD (IY+0),A ; ï祩ª 
INC IY
LD (IY+0),C ; bc= ¤à¥á ï祩ª¨
INC IY
LD (IY+0),B
INC IY
POP BC
OR A
LD A," "
JR Z,$+4
LD A,"x"
LD (BC),A
INC (IX+5)
LD A,(HL)
OR A
JP NZ,ClRadLp
LD (IY+0),80h ; End tab claster
INC IY
INC HL
; á®åà. à §¬¥à â ¡«¨æë ¢ ’ ¡«¨æ¥ ®¡ê¥ªâ®¢
push iy
exx
pop hl
pop de
or a
sbc hl,de ; ¤«¨­  â ¡«¨æë "Check Box"
ld a,l
ld (de),a ; DialTab+5
exx
ld a,1
ld (SavElem+1),a ; ¯¥à¢ë© í«¥¬¥­â
ret
;-----------------------------------------------------------
; <20> ç «ì­ë© 䮪ãá ­  ®¡ê¥ªâ "Check Box" ¨«¨ "Radio Button"
;-----------------------------------------------------------
ClastI: ld de,color_array+24 ; 70h 梥⠤¨ «. ®ª®­
ld (set_dial_tmp_inv+1),de ; ­¥ "¢ë¤¥«ïâì" 梥⮬ 祪-¡®ªáë
ld e,(ix+2) ; Xo
inc e
ld d,(ix+4) ; Y
ld a,(ix+6) ; Xi name
sub e
ld c,a
call SetDialInv
ld hl,color_array+26
ld (set_dial_tmp_inv+1),hl ; ¢®ááâ. ï祩ªã
push ix
pop hl
ld de,7
add hl,de
ld a,(ix+7) ; Y ¯®«®¦. 1-£® í«¥¬¥­â  ª« áâ¥à 
ld (hl),a ; Y pos check button
jp SetClasInv ; ¢ë¤¥«¨âì í«¥¬¥­â ®¡ê¥ªâ 
;-------------------------------------------------
; “§­ âì á®áâ®ï­¨¥ ï祩ª¨ ª« áâ¥à 
;-------------------------------------------------
GetClsData:
push ix
pop hl
ld bc,7
add hl,bc ; Begin claster elements
GetDtLp:inc hl ; Y pos
inc hl ; ᪥­-ª®¤ hot-¡ãª¢ë
ld a,(hl) ; ï祩ª 
inc hl
ld e,(hl) ; de=¤à¥á ï祩ª¨
inc hl
ld d,(hl)
inc hl
ld (de),a
bit 7,(hl) ; 7bit-End claster
jr z,GetDtLp
ret
;=====================================================================
;
; Ž¡à ¡®â稪 ᮡë⨩ ®¡ê¥ªâ®¢ "Check Box" ¨ "Radio Button"
;
;=====================================================================
EvClasterBut:
ld hl,what
ld a,(hl)
inc hl
cp evMouseFr
jr z,ECmouse ; Mouse fire
cp evKeyboard
jr z,ECkeys ; Key press
cp evCombKey
jp z,ECcombK ; Key press
ret
; ‘®¡ë⨥ - Œë誠
ECmouse:LD E,(HL) ; X pos
INC HL
LD D,(HL) ; Y pos
LD A,E
BIT 7,(IX+2)
JR NZ,$+6
CP (IX+2) ; Xo left pos
RET C ; <
BIT 7,(IX+3)
RET NZ
CP (IX+3) ; Xi right pos
RET NC ; >
LD A,D
CP (IX+4) ; Yo left pos
RET C ; <
CP (IX+5) ; Yi right pos
RET NC ; >
xor a
LD (ECnext+1),a
DEC A
LD (SaveA1+1),a ; Begin element claster
PUSH IX
POP HL
INC HL
inc hl
ld bc,5 ; len element claster
LD E,B ; number element
LD A,D
EClsLp1:ADD HL,BC
BIT 7,(HL)
JP NZ,SelClas ; Elem not found
INC E
CP (HL) ; Compare with Y pos elem
JR NZ,EClsLp1
JR CSelNxt
; ‘®¡ë⨥ - ®¡ëç­ ï ª« ¢¨è 
ECkeys: xor a
ld (ECnext+1),a
dec a
ld (SaveA1+1),a ; Begin element claster
ld a,(hl) ;+1 what
cp 20h ; ¯à®¡¥«
jr z,ECspace
bit 7,(ix+1)
jr nz,ECkeyN ; ®¡ê¥ªâ 㦥 ¢ë¤¥«¥­
cp 9 ; Tab
jp z,SelCls0 ; If tab then select my
ECkeyN: inc hl
ld a,(hl) ;+2 what ᪥­-ª®¤
push ix
pop hl
inc hl
inc hl
ld bc,5 ; Len elements
ld e,b
ECkeyLp:add hl,bc
bit 7,(hl)
ret nz
inc e
inc hl
cp (hl) ; hot-key element
dec hl
jr nz,ECkeyLp
CSelNxt:bit 7,(ix+1)
jp nz,CSelect ; ®¡ê¥ªâ 㦥 ¢ë¤¥«¥­
jp SelCls1
; Ž¡à ¡®âª  ¯à®¡¥« 
ECspace:BIT 7,(IX+1)
RET Z ; not select
LD A,(SavElem+1)
OR A
JR NZ,ECspc1
INC A
LD (SavElem+1),A
ECspc1: LD (ECnext+1),A
PUSH IX
POP HL
INC HL
inc hl
ld de,5
LD B,A
ADD HL,DE ; find elem.label
DJNZ $-1
JP ECnext ; change
; Šãàá®à­ë¥ ª« ¢¨è¨
ECcombK:bit 7,(ix+1)
jr nz,ECcombn ; ®¡ê¥ªâ 㦥 ¢ë¤¥«¥­
ld b,(hl) ;+1 what
inc hl
ld a,(hl) ;+2 what
cp 56h ; ªãàá®à ¢¯à ¢®
jp z,SelCls0
push ix
ld e,(ix+0) ; à §¬¥à â ¡«¨æë "Input Line"
ld d,0
add ix,de
bit 7,(ix+0)
pop ix
ret z ; ¥é¥ ­¥ ª®­¥æ ®¡ê¥ªâ®¢
cp 54h ; ªãàá®à ¢«¥¢®
jp z,SelCls0
ld a,b
and 00111111b ; ¡¨âë Ctrl, Alt
ret nz
ld a,(hl) ;+2 what
cp 15+80h ; Tab ᪥­-ª®¤+80h
ret nz
jp SelCls0 ; If tab then select my
;
ECcombn:xor a
ld (ECnext+1),a ; Flag change buttons
inc hl
ld a,(hl) ;+2 what
cp 58h ; ¢¢¥àå
jr z,ECup
cp 54h ; ¢«¥¢®
jr z,ECup
cp 52h ; ¢­¨§
jr z,ECdown
cp 56h ; ¢¯à ¢®
ret nz
; ªãàá®à ¢­¨§
ECdown: PUSH IX
POP HL
INC HL
inc hl
ld e,l
ld d,h
ld bc,5
LD A,(SavElem+1)
OR A
JR NZ,$+3
INC A
INC A ; increment element
LD (SavElem+1),A
ECcmlp: ADD HL,BC ; find label
BIT 7,(HL)
CALL NZ,EndClst ; table is over
DEC A
JR NZ,ECcmlp
CALL ResClasInv ; Res inver elem
JP Pcurs ; next invert
; Get begin table elem
EndClst:EX DE,HL
ADD HL,BC ; table is begin
LD A,1
LD (SavElem+1),A ; first elem.
RET
; Šãàá®à ¢¢¥àå
ECup: PUSH IX
POP HL
INC HL
inc hl
ld de,5
LD A,(SavElem+1)
OR A
JR NZ,$+3
INC A
DEC A ; decrement cur.elem.
CALL Z,BegClst
LD (SavElem+1),A
LD B,A
ADD HL,DE ; find label
DJNZ $-1
CALL ResClasInv ; Res inver elem
JR Pcurs ; next invert
; Get end table elem
BegClst:PUSH HL
SUB A
DEC A
INC A
ADD HL,DE ; find nember end element
BIT 7,(HL)
JR Z,$-4
POP HL
RET ; A=end element
; selected claster
SelClas:BIT 7,(IX+1)
JR NZ,SaveA1 ; NZ-is select
SelCls0:ld e,0
SelCls1:LD A,E
LD (SaveA1+1),A
call MoveObj
call ResDialInv ; Res orevios invert
LD IX,DialTab+5
SaveA1: LD A,0
INC A
JR Z,EClexit ; Element not found
DEC A
LD (SavElem+1),A
LD (ECnext+1),A
JR CButton ; Change buttons
; ‘®¡ë⨥ - Œë誠 (¢ ¢ë¡à ­­®¬ ª« áâ¥à¥)
CSelect:LD A,1
LD (ECnext+1),A
LD A,(SavElem+1)
CP E
JR Z,ECnext
LD A,E
LD (SavElem+1),A
CALL ResClasInv ; Res inver elem
CButton:PUSH IX
POP HL
INC HL
inc hl
ld de,5
SavElem:LD A,0
OR A
JR NZ,$+3
INC A
LD B,A
ADD HL,DE
DJNZ $-1
Pcurs: CALL SetClasInv ; Set inver elem
ECnext: ld a,0
or a
call nz,ChangeB
EClexit:ld hl,what ; Event claster exit
ld (hl),evNothing
jp get_fire
;---------------------------------------------------------------------
; ˆ§¬¥­¥­¨¥ í«¥¬¥­â®¢ CheckBox-  ¨«¨ Radio-ª­®¯®ª
;
; ¢å®¤: HL-Address claster element label
;---------------------------------------------------------------------
ChangeB:LD A,(IX+1)
RES 7,A
CP ClsCheckBox
JP Z,ChangeR ; ¨§¬¥­¨âì CheckBox
; ˆ§¬¥­¨âì Radio-ª­®¯ªã
LD E,L
LD D,H
PUSH IX
POP HL
LD BC,7
ADD HL,BC
PUSH HL ; Save cur.elem
ChangL1:INC HL ; Begin elements claster
INC HL
;INC HL
LD (HL),B ; (Ceil)=0
INC HL
INC HL
INC HL
BIT 7,(HL)
JR Z,ChangL1
EX DE,HL ; HL=Current element claster
INC B
INC HL
INC HL
INC HL
LD (HL),B ; Cur.elem=1
INC HL
INC HL
INC HL
POP HL ; Reset begin elem table
IN A,(SLOT3)
PUSH AF
LD A,(page_dial_screen)
OUT (SLOT3),A
ChangL2:LD D,(HL) ; Y pos
INC HL
INC HL
;INC HL ;?
LD A,(HL) ; Address ceil
INC HL
INC HL
INC HL
LD E,(IX+2) ; X ¯®«®¦. ""
INC E
PUSH IX
PUSH DE
LD IX,DialData
EX AF,AF'
LD A,E
SUB (IX+0)
LD C,A
LD A,D
SUB (IX+1)
LD B,A
CALL GetPutA
EX AF,AF'
LD C,A
OR A
LD A," "
JR Z,$+4
LD A,""
LD (DE),A
POP DE
POP IX
LD A,D
CP 31
JR NC,cl1
BIT 7,E
JR NZ,cl1
LD A,E
CP 80
JR NC,cl1
PUSH HL
LD A,C
PUSH AF
LD C,84h ; Set position print
RST 08h
POP AF
OR A
LD A," "
JR Z,$+4
LD A,""
LD BC,0182h
RST 08h ; Print on/off
POP HL
cl1: BIT 7,(HL)
JR Z,ChangL2
CALL ResILCr ; Res cursor
CALL PILCurs ; Set cursor
EI
POP AF
OUT (SLOT3),A
RET
;-------------------------------------------------
; ˆ§¬¥­¥­¨¥ í«¥¬¥­â  CheckBox- 
;-------------------------------------------------
ChangeR:
IN A,(SLOT3)
PUSH AF
LD A,(page_dial_screen)
OUT (SLOT3),A
LD D,(HL) ; Y pos
INC HL
INC HL
LD A,(HL) ; ï祩ª 
XOR 1
LD (HL),A
INC HL
INC HL
INC HL
LD E,(IX+2) ; X ¯®«®¦. "x"
INC E
PUSH IX
PUSH DE
LD IX,DialData
EX AF,AF'
LD A,E
SUB (IX+0)
LD C,A
LD A,D
SUB (IX+1)
LD B,A
CALL GetPutA
EX AF,AF'
LD C,A
OR A
LD A," "
JR Z,$+4
LD A,"x"
LD (DE),A
POP DE
POP IX
LD A,D
CP 31
JR NC,cl2
BIT 7,E
JR NZ,cl2
LD A,E
CP 80
JR NC,cl2
LD A,C
PUSH AF
LD C,84h ; Set position print
RST 08h
POP AF
OR A
LD A," "
JR Z,$+4
LD A,"x"
LD BC,0182h
RST 08h ; Print
cl2: CALL ResILCr
CALL PILCurs
EI
POP AF
OUT (SLOT3),A
RET