FFORMAT/RADIO.ASM
2025-05-02 04:08:17 +10:00

1971 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.

; Œ¥âª  "###" - ®âà ¡®âª  "Enter" ª ª Tab
; Œ¥âª  "$$$" - à áª®¬¬¥­â à¨âì, çâ®¡ë ¯®¯ ¤ âì Enter-®¬
; (¨ Tab-®¬) ¢ InputLine.
;
; <20>ãä¥à ¨¬¥­¨ ¬¥âª¨ ¤¨áª¥âë
LabelBuff: DB 11 ; Max input symbols
DB 0 ; ReadyString
DB 0 ; Pos X
DB 0 ; Add X
DB 0 ; Inp.Symb
LABEL: DS 12,0
cSystem: DB 0 ; 01/00 - á®§¤./­¥ á®§¤. á¨áâ. ¤¨áª¥âã
Mode0: DB 0 ; "Standart mode"
Mode2: DB 1 ; "Optimize sectors"
Mode1: DB 0 ; "Quick format"
CurElem0: DW 0 ; ⥪. ¯®«®¦. ªãàá®à  ListBox1- 
CurElem1: DW 0 ; ⥪. ¯®«®¦. ªãàá®à  ListBox2- 
CurILFl: DB 0 ; ä« £ ªãàá®à  00-¢ëª«/01-¢ª«
;Flag: DB 0 ; ä« £ ªãàá®à  00-­¥â/01-¥áâì
Timer: DB 1 ; â ©¬¥à
CursPos: DW 0 ; ¯®§¨æ¨ï ªãàá®à 
_OS: DB 0 ; 00/01/02 ⨯ Ž‘ (ms-dos/tr-dos/cpm)
; Ž¯æ¨¨ ¢ë¡®à  ä®à¬ â  FDD
; ¤¨áª "A"
DriveA:
SetDriveA0: DB 1 ; 1.44Mb 3.5"
SetDriveA1: DB 0 ; 720kB 5.25"
SetDriveA2: DB 0 ; None (ï祩ª  ­¥ ®âá«¥¦¨¢ ¥âáï)
; ¤¨áª "B"
DriveB:
SetDriveB0: DB 0 ; 1.44Mb 3.5"
SetDriveB1: DB 1 ; 720kB 5.25"
SetDriveB2: DB 0 ; None
;[]===========================================================[]
; Žâà¨á®¢ª  ®¡ê¥ªâ 
; Put object 'input line'
; Input: HL-label
; Format mouse table:
; +0 - Object ~Input line~
; +1 - Xo position object
; +2 - Xi position object
; +3 - Y position object
; +4 - Xi position text
; +5 - Xo position input line
; +6 - Hot keys
; +7 - Context
; +8,9 - Address input buffer
;
PInpLine:
PUSH IY ; iy=DialTab+5
INC IY
LD (IY+0),A ;+0 object
LD A,(HL) ;X pos
INC HL
LD C,A
ADD A,(IX+0) ;Pos X from begin screen
LD (IY+1),A ;+1 Xo
LD (IX+4),A ;Temp X coord
LD A,(HL) ;Y pos
INC HL
LD B,A
ADD A,(IX+1) ;Pos Y from begin screen
LD (IY+3),A ;+3 Yo
CALL GetPutA
EX DE,HL
LD A,(ColDialWn)
LD C,A
LD A,(DE)
PInpLp1: INC DE
CP '~'
JR NZ,PInpN0
LD C,ColDhotkey
;LD C,A
LD A,(DE)
INC DE
LD (HL),A
INC HL
RES 5,A
LD (IY+6),A ;Hot key
LD A,(HL)
AND 0F0h
OR C
LD (HL),A
INC HL
INC DE
INC (IX+4)
LD A,(ColDialWn)
LD C,A
LD A,(DE)
INC DE
PInpN0: LD (HL),A
INC HL
LD (HL),C
INC HL
INC (IX+4)
LD A,(DE)
OR A
JR NZ,PInpLp1
EX DE,HL
INC HL
LD A,(IX+4)
LD (IY+4),A ;Xi position text
LD A,(IX+4)
LD (IY+5),A ;Xi position input line
LD (next1+1),DE
LD B,(HL) ;len input line
INC HL
LD A,(HL) ;context
INC HL
LD (IY+7),A
LD E,(HL) ;DE-Address input buffer
LD (IY+8),E
INC HL
LD D,(HL)
LD (IY+9),D
INC HL
LD A,(DE)
INC DE
SUB A
INC A
LD (DE),A ;Ready
DEC A
INC DE
LD (DE),A ;Pos X
INC DE
LD (DE),A ;Add X
INC DE
INC DE
PUSH HL
next1: LD HL,0
LD C,ColInpLine ; 梥â áâப¨ ¢¢®¤ 
;LD C,A
PInpLp2: LD A,(DE)
INC DE
LD (HL),A
INC HL
LD (HL),C
INC HL
INC (IX+4)
DJNZ PInpLp2 ; 横« ¯à®å®¤  áâப¨ ¢¢®¤ 
POP HL
LD E,(IY+5)
LD D,(IY+3)
LD (CursPos),DE
LD A,(IX+4)
LD (IY+2),A ;Xi position object
LD BC,000Ah
ADD IY,BC ;IY-next element
PUSH IY
EXX ;Len label objects
POP HL
POP DE
OR A
SBC HL,DE
LD A,L
LD (DE),A
EXX
RET
; Žâà¨á®¢ª  ®¡ê¥ªâ 
; Object ~Claster radio buttons~
; Input: HL-label
; Format mouse table:
; +0 - Object ~Claster radio buttons"
; +1 - Xo position object
; +2 - Xi position object
; +3 - Yo position object
; +4 - Yi position object
; +5 - Xi position name
; from: +0 - Y position radio button
; +1 - Hot key
; +2 - Context
; +3 - (Ceil)
; +4,5 - Address ceil
; 80h - End buttons
PClRadioB:
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
SUB 2
LD C,A
LD B,0
ADD A,4
ADD A,(IY+1)
LD (IY+2),A ;Xi pos
LD A,(HL)
INC HL
ADD A,3 ;Yi pos
ADD A,(IY+3)
LD (IY+4),A
LD A,"Ú"
LD (DE),A
INC DE
LD A,ColLstBxFr ; 梥â à ¬ª¨
LD (DE),A
INC DE
LD A," "
LD (DE),A
INC DE
INC DE
LDI ;$-5
INC DE
LD A,(HL)
OR A
JR NZ,$-5
LD A," "
LD (DE),A
INC DE
INC DE
INC HL
LD A,(IX+6)
SUB C
INC A
ADD A,(IY+1)
LD (IY+5),A ;Xi pos name
LD A,C
OR A
JR Z,ClRadN1
LD B,C
clrd1: LD A,"Ä"
LD (DE),A
INC DE
LD A,ColLstBxFr ;
LD (DE),A
INC DE
DJNZ clrd1
ClRadN1: LD A,"¿"
LD (DE),A
INC DE
LD A,ColLstBxFr ;
LD (DE),A
INC (IX+5)
LD BC,6 ;Next element claster
ADD IY,BC
;
LD C,(IX+4) ;Empty string
LD B,(IX+5)
CALL GetPutA
EX DE,HL
LD (HL),"³"
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
INC HL
LD C,(IX+6)
LD B,0
ADD HL,BC
ADD HL,BC
LD (HL),"³"
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
INC (IX+5)
EX DE,HL
;
; 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
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
INC HL
INC HL
INC HL
INC B
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,(ColDialWn) ;Put name element
LD C,A
LD A,(DE)
ClRadL1: INC DE
CP '~'
JR NZ,ClRadN0
LD C,ColDhotkey
;LD C,A
LD A,(DE)
INC DE
LD (HL),A
INC HL
RES 5,A
LD (IY+1),A ;Hot key
LD A,(HL)
AND 0F0h
OR C
LD (HL),A
INC HL
INC DE
LD A,(ColDialWn)
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+6)
SUB B
LD C,A
LD B,0
ADD HL,BC
ADD HL,BC
LD (HL),"³"
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
LD A,(IX+5) ;Current Y pos
ADD A,(IX+1) ;from begin screen
LD (IY+0),A
INC IY
INC IY
EX DE,HL
LD A,(HL)
INC HL
LD (IY+0),A ;Context
INC IY
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD A,(BC)
LD (IY+0),A ;(Ceil)
INC IY
LD (IY+0),C ;BC=Ceil
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
;
LD C,(IX+4) ;End string
LD B,(IX+5)
CALL GetPutA
EX DE,HL
LD (HL),"À"
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
INC HL
LD B,(IX+6)
clrd2: LD A,"Ä"
LD (HL),A
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
INC HL
DJNZ clrd2
LD (HL),"Ù"
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
EX DE,HL
PUSH IY
EXX
POP HL
POP DE
OR A
SBC HL,DE
LD A,L
LD (DE),A
EXX
RET
; Žâà¨á®¢ª  ®¡ê¥ªâ 
; Object ~Claster check buttons~
; Input: HL-label
; Format mouse table:
; +0 - Object ~Claster check buttons"
; +1 - Xo position object
; +2 - Xi position object
; +3 - Yo position object
; +4 - Yi position object
; +5 - Xi position name
; from: +0 - Y position check button
; +1 - Hot key
; +2 - Context
; +3 - (Ceil)
; +4,5 - Address ceil
; 80h - End buttons
PClCheckB:
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
SUB 2
LD C,A
LD B,0
ADD A,4
ADD A,(IY+1)
LD (IY+2),A ;Xi pos
LD A,(HL)
INC HL
ADD A,3 ;Yi pos
ADD A,(IY+3)
LD (IY+4),A
LD A,"Ú"
LD (DE),A
INC DE
LD A,ColLstBxFr ;
LD (DE),A
INC DE
LD A," "
LD (DE),A
INC DE
INC DE
LDI ;$-5
INC DE
LD A,(HL)
OR A
JR NZ,$-5
LD A," "
LD (DE),A
INC DE
INC DE
INC HL
LD A,(IX+6)
SUB C
INC A
ADD A,(IY+1)
LD (IY+5),A ;Xi pos name
LD A,C
OR A
JR Z,ClChkN1
LD B,C
clch1: LD A,"Ä"
LD (DE),A
INC DE
LD A,ColLstBxFr ;
LD (DE),A
INC DE
DJNZ clch1
ClChkN1: LD A,"¿"
LD (DE),A
INC DE
LD A,ColLstBxFr ;
LD (DE),A
INC (IX+5)
LD BC,6 ;Next element claster
ADD IY,BC
;
LD C,(IX+4) ;Empty string
LD B,(IX+5)
CALL GetPutA
EX DE,HL
LD (HL),"³"
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
INC HL
LD C,(IX+6)
LD B,0
ADD HL,BC
ADD HL,BC
LD (HL),"³"
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
INC (IX+5)
EX DE,HL
; 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
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
INC HL
INC HL
INC HL
INC B
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,(ColDialWn) ;Put name element
LD C,A
LD A,(DE)
ClChkL1: INC DE
CP '~'
JR NZ,ClChkN0
LD C,ColDhotkey
;LD C,A
LD A,(DE)
INC DE
LD (HL),A
INC HL
RES 5,A
LD (IY+1),A ;Hot key
LD A,(HL)
AND 0F0h
OR C
LD (HL),A
INC HL
INC DE
LD A,(ColDialWn)
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+6)
SUB B
LD C,A
LD B,0
ADD HL,BC
ADD HL,BC
LD (HL),"³"
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
;
LD A,(IX+5) ;Current Y pos
ADD A,(IX+1) ;from begin screen
LD (IY+0),A
INC IY
INC IY
EX DE,HL
LD A,(HL)
INC HL
LD (IY+0),A ;Context
INC IY
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD A,(BC)
LD (IY+0),A ;(Ceil)
INC IY
LD (IY+0),C ;BC=Ceil
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
;
LD C,(IX+4) ;End string
LD B,(IX+5)
CALL GetPutA
EX DE,HL
LD (HL),"À"
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
INC HL
LD B,(IX+6)
clch2: LD A,"Ä"
LD (HL),A
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
INC HL
DJNZ clch2
LD (HL),"Ù"
INC HL
;ld a,(ColLstBxFr) ;
LD (HL),ColLstBxFr
EX DE,HL
PUSH IY
EXX
POP HL
POP DE
OR A
SBC HL,DE
LD A,L
LD (DE),A
EXX
RET
; Žâà¨á®¢ª  ®¡ê¥ªâ 
; Object ~Frame~
; Input: HL-label
; Format mouse table: None
;
PFrame: LD C,(HL) ; X pos
INC HL
LD B,(HL) ; Y pos
INC HL ; X len
INC HL ; Y len
LD A,(HL)
PUSH AF ; á®åà. Y len
PUSH BC
CALL GetPutA
LD A,"Ú"
LD (DE),A
INC DE
LD A,ColorFrame
LD (DE),A
INC DE
DEC HL
LD B,(HL) ; X len
.loop1: LD A,"Ä"
LD (DE),A
INC DE
LD A,ColorFrame
LD (DE),A
INC DE
DJNZ .loop1
LD A,"¿"
LD (DE),A
INC DE
LD A,ColorFrame
LD (DE),A
POP BC
.loop2: INC B
PUSH BC
CALL GetPutA
EX DE,HL
LD (HL),"³"
INC HL
LD (HL),ColorFrame
INC HL
EX DE,HL
LD B,(HL) ; X len
.loop3: LD A," "
LD (DE),A
INC DE
LD A,ColorFrame ; 梥⠢­ãâਠä३¬ 
LD (DE),A
INC DE
DJNZ .loop3
LD A,"³"
LD (DE),A
INC DE
LD A,ColorFrame
LD (DE),A
INC DE
POP BC
INC HL
DEC (HL)
DEC HL
JR NZ,.loop2
INC B
CALL GetPutA
LD A,"À"
LD (DE),A
INC DE
LD A,ColorFrame
LD (DE),A
INC DE
LD B,(HL) ; X len
INC HL
POP AF
LD (HL),A ; ¢®ááâ. Y len
.loop4: LD A,"Ä"
LD (DE),A
INC DE
LD A,ColorFrame
LD (DE),A
INC DE
DJNZ .loop4
LD A,"Ù"
LD (DE),A
INC DE
LD A,ColorFrame
LD (DE),A
INC HL
RET
;[]===========================================================[]
; Event Input Line
EInpLine:
LD HL,what ; ᯨ᮪ ᮡë⨩
LD A,(HL)
INC HL
CP evMouseFr
JR Z,EImouse
CP evKeyboard
JR Z,EIkeys
CP evCombKey
JP Z,EIcombK
RET
;Event - Mouse fire
EImouse: LD E,(HL) ;Xcoord
INC HL
LD D,(HL) ;Ycoord
LD A,D
CP (IX+4) ;Y pos input line
RET NZ
LD A,E
BIT 7,(IX+2)
JR NZ,$+6
CP (IX+2) ;Xo pos
RET C
BIT 7,(IX+3)
RET NZ
CP (IX+3) ;Xi pos
RET NC
BIT 7,(IX+1)
JR Z,SetInLn
BIT 7,(IX+6)
JR NZ,$+6
CP (IX+6) ;Xo inp.line
RET C
SUB (IX+6) ;shift from begin
LD C,A
LD L,(IX+9)
LD H,(IX+0Ah)
INC HL
LD (HL),0 ;Flag
INC HL
CP (HL)
RET Z
PUSH HL
INC HL
ADD A,(HL) ;AddX
INC HL
CP (HL) ;InpSymb
LD A,(HL)
POP HL
JR Z,EIM
JR C,EIM
INC HL
SUB (HL)
DEC HL
LD C,A
EIM: LD (HL),C
DEC HL
DEC HL
PUSH IY
PUSH HL
POP IY
CALL PrnInLn
POP IY
JR InLnExt
;Event - Key press
EIkeys: BIT 7,(IX+1)
JR NZ,ILwork
LD A,(HL) ; what+1
RES 5,A
; CP 9 ; Tab
; JR Z,SetInLn
; cp 0Dh ; $$$
; jr z,SetInLn
CP (IX+7) ;Hot key
RET NZ
SetInLn: CALL MoveObj ;Select Input line
CALL ResDialInv ;Reset previos invert
LD IX,DialTab+5
LD E,(IX+2) ;Xo
LD D,(IX+4) ;Y
LD A,(IX+5) ;Xi text
SUB E
LD C,A ;Len text
CALL SetDialInv
PUSH IY
LD L,(IX+9)
LD H,(IX+0Ah)
PUSH HL
POP IY
INC HL
LD (HL),1 ;Flag
INC HL
SUB A
LD (HL),A ;Pos X
INC HL
LD (HL),A ;Add X
INC HL
CALL PrnInLn
POP IY
CALL PILCurs ; ãáâ. ªãàá®à
EI
InLnExt: LD HL,what
LD (HL),evNothing
JP GetFire
; Work select input line
ILwork: LD A,(HL) ; what+1 Get keys
ILwrk2: CP 8
JR Z,ILw1
CP " "
RET C
ILw1: PUSH IY
LD DE,InLnWex
PUSH DE
LD L,(IX+9) ;Address buffer
LD H,(IX+0Ah)
PUSH HL
POP IY
PUSH AF
RES 7,(IY+1)
LD A,1
AND 1
RRCA
OR (IY+1)
LD (IY+1),A
POP AF
CP 8
JP Z,ILdelet
EX AF,AF'
BIT 0,(IY+1)
CALL NZ,ClearIL
LD A,(IY+4) ;InpytSymb
CP (IY+0) ;Max len
JR NZ,ILn
LD A,(IY+2)
ADD A,(IY+3)
CP (IY+0)
RET NC
BIT 7,(IY+1)
RET NZ
ILn: LD A,(IY+4)
SUB (IY+3)
SUB (IY+2)
JR Z,NoInsrt
DEC (IY+4)
BIT 7,(IY+1)
JR Z,NoInsrt
INC (IY+4)
; ‚¢®¤ ¢ á¥à¥¤¨­ã ⥪áâ 
LD C,A
LD B,0
LD L,(IX+9)
LD H,(IX+0Ah)
LD A,(IY+4)
ADD A,L
LD L,A
JR NC,$+3
INC H
INC HL
INC HL
INC HL
INC HL
INC HL
LD D,H
LD E,L
DEC HL
LDDR
NoInsrt: LD L,(IX+9)
LD H,(IX+0Ah)
LD A,(IY+2)
ADD A,(IY+3)
ADD A,L
LD L,A
JR NC,$+3
INC H
INC HL
INC HL
INC HL
INC HL
INC HL
EX AF,AF'
LD (HL),A
INC (IY+4)
INC (IY+2)
LD A,(IX+3)
SUB (IX+6)
CP (IY+2)
CALL Z,OutIL
CALL PrnInLn
POP DE
InLnWex: LD HL,what
LD (HL),evNothing
POP IY
RET
;Šãàá®à §  íªà ­®¬
OutIL: LD A,(IY+3)
ADD A,8 ;Step
LD (IY+3),A
LD A,(IY+2)
SUB 8 ;Step
LD (IY+2),A
RET
;Clear Buffer
ClearIL: SUB A
LD B,(IY+0)
LD L,(IX+9)
LD H,(IX+0Ah)
INC HL
INC HL
INC HL
INC HL
INC HL
LD (HL),A
DJNZ $-2
LD (IY+4),A
RES 0,(IY+1)
RET
; Combination keys
EIcombK: BIT 7,(IX+1)
JR NZ,EIcombn
PUSH IX
LD E,(IX+0)
LD D,0
ADD IX,DE
BIT 7,(IX+0)
POP IX
RET Z
INC HL
LD A,(HL) ; what+2 Shift+Tab
CP 9
RET NZ
JP SetInLn ; ¢ë¤¥«¨âì ¯à¥¤. ®¡ê¥ªâ
;
EIcombn: PUSH IY
LD C,(HL) ; what+1
INC HL
LD A,(HL) ; what+2
LD L,(IX+9) ; Address buffer
LD H,(IX+0Ah)
LD DE,InLnWex
PUSH DE
PUSH HL
POP IY
BIT 7,C ; ªãàá®à­ë¥ ¨«¨ shift+... ?
JR NZ,eicmb1 ; Shift+...
CP 54h
JR Z,ILleft ; ªãàá®à ¢«¥¢®
CP 56h
JR Z,ILright ; ªãàá®à ¢¯à ¢®
CP 4Fh
JP Z,IL_del_ ; 㤠«¨âì ᨬ¢®« ¢ ⥪. ¯®§¨æ¨¨
CP 57h
JP Z,ILHome ; ¢ ­ ç «® áâப¨
CP 51h
JP Z,ILEnd ; ¢ ª®­¥æ áâப¨
JR eicmb2
eicmb1: CP " "
JR C,eicmb2
CP "~"+1
JP C,ILwrk2 ; ­  ¢¢®¤ ᨬ¢®«®¢
eicmb2: POP DE
POP IY
RET
;Šãàá®à ¢«¥¢® ­  ®¤­® ¬¥áâ®
ILleft: LD A,(IY+2)
DEC A
JP P,ILlfnxt
LD A,(IY+3)
SUB 8 ;Step
RET C
LD (IY+3),A
LD A,(IY+2)
ADD A,8 ;Step
ILlfnxt: LD (IY+2),A
CALL PrnInLn
RES 0,(IY+1)
RET
;Šãàá®à ¢¯à ¢® ­  ®¤­® ¬¥áâ®
ILright: LD A,(IY+2)
ADD A,(IY+3)
CP (IY+4)
RET Z
LD A,(IX+3)
SUB (IX+6)
LD B,A
LD A,(IY+2)
INC A
CP B
JR NZ,ILrgnxt
LD A,(IY+3)
ADD A,8 ;Step
LD (IY+3),A
LD A,(IY+2)
SUB 8 ;Step
ILrgnxt: LD (IY+2),A
CALL PrnInLn
RES 0,(IY+1)
RET
;delete
ILdelet: LD A,(IY+2)
OR A
JR NZ,ILDelNx
LD A,(IY+3)
SUB 8 ;Step
RET C
LD (IY+3),A
LD A,(IY+2)
ADD A,8 ;Step
LD (IY+2),A
ILDelNx: LD L,(IX+9)
LD H,(IX+0Ah)
LD A,(IY+2)
ADD A,(IY+3)
ADD A,L
LD L,A
JR NC,$+3
INC H
INC HL
INC HL
INC HL
INC HL
INC HL
LD D,H
LD E,L
DEC DE
LD A,(IY+4)
SUB (IY+3)
SUB (IY+2)
JR Z,ILDelN
LD C,A
LD B,0
LDIR
ILDelN: SUB A
LD (DE),A
DEC (IY+2)
DEC (IY+4)
CALL PrnInLn
RES 0,(IY+1)
RET
;Delete Char in Current Position
IL_del_: LD L,(IX+9)
LD H,(IX+0Ah)
LD A,(IY+2)
INC A
ADD A,(IY+3)
ADD A,L
LD L,A
JR NC,$+3
INC H
INC HL
INC HL
INC HL
INC HL
INC HL
LD D,H
LD E,L
DEC DE
LD A,(IY+4)
SUB (IY+3)
SUB (IY+2)
RET Z
LD C,A
LD B,0
LDIR
SUB A
LD (DE),A
DEC (IY+4)
CALL PrnInLn
RES 0,(IY+1)
RET
;Home
ILHome: LD A,(IY+2)
OR A
RET Z
SUB A
LD (IY+2),A
LD (IY+3),A
CALL PrnInLn
RES 0,(IY+1)
RET
;End string
ILEnd: LD A,(IY+4)
SUB (IY+3)
CP (IY+2)
RET Z
ADD A,(IY+3)
LD C,A
LD (IY+3),0
LD A,(IX+3)
SUB (IX+6)
SUB C
JR Z,ILEndLp
JR NC,EndNIL
NEG
ILEndLp: LD C,A
LD A,(IY+3)
ADD A,8 ;Step
LD (IY+3),A
LD A,C
SUB 8 ;Step
JR NC,ILEndLp
EndNIL: LD A,(IY+4)
SUB (IY+3)
LD (IY+2),A
CALL PrnInLn
RES 0,(IY+1)
RET
;[]===========================================================[]
; Put Input Line in window
PrnInLn: LD A,(CurILFl)
PUSH AF
CALL ResILCr ; á¡à®á¨âì ªãàá®à
LD HL,0
LD E,(IX+6) ;Xo pos inp.line
LD D,(IX+4) ;Y pos object
BIT 7,(IX+3)
JP NZ,prne
BIT 7,E
JR Z,$+7
LD A,E
NEG
LD L,A
LD E,H
LD (prnadd+1),HL
;LD C,BIOS.LP_SET_PLACE ; ãáâ. ¯®§¨æ¨î ªãàá®à 
;RST ToBIOS
LD C,Dss.Locate
RST ToDSS
LD L,(IX+9) ;Address buffer
LD H,(IX+0Ah)
LD A,(IY+3)
ADD A,L
LD L,A
JR NC,$+3
INC H
INC HL
INC HL
INC HL
INC HL
INC HL
LD A,(IX+3) ;Xi-Xo(inp.ln.)=Len inp.ln.
SUB (IX+6)
LD E,A
LD C,A
LD B,A
LD A,(IX+6)
ADD A,C
CP 80+1
JR C,$+8
LD A,80
SUB (IX+6)
LD B,A
BIT 7,(IX+6)
JR Z,$+11
LD A,(IX+6)
NEG
SUB C
NEG
LD B,A
PUSH BC
SUB A
LD B,E
LD DE,CompBuff
PUSH DE
LD (DE),A
INC DE
DJNZ $-2
LD A,(IY+0)
SUB (IY+3)
CP C
JR NC,$+3
LD C,A
LD B,0
LD A,(IY+4)
SUB C
JR NC,$+4
ADD A,C
LD C,A
POP DE
PUSH DE
LD A,B
OR C
JR Z,$+4
LDIR
POP HL
POP BC
prnadd: LD DE,0
ADD HL,DE
LD A,B
OR A
JR Z,prne
LD C,86h ; ¢ë¢®¤ áâப¨ ¡¥§  âਡã⮢
RST ToBIOS
prne: LD A,(IY+2)
ADD A,(IX+6)
LD E,A
LD D,(IX+4)
LD (CursPos),DE
POP AF
OR A
CALL NZ,PILCurs ; ãáâ. ªãàá®à
EI
PUSH IY
LD IY,DialData
LD A,(IX+6)
SUB (IY+0)
LD C,A
LD A,(IX+4)
SUB (IY+1)
LD B,A
POP IY
PUSH IX
LD IX,DialData
CALL GetPutA
POP IX
LD HL,CompBuff
LD A,(IX+3) ;Xi-Xo(inp.ln.)=Len inp.ln.
SUB (IX+6)
LD C,A
LD B,0
IN A,(Page3)
PUSH AF
LD A,(hPages.Win2)
OUT (Page3),A
LDI
INC DE
JP PE,$-3
POP AF
OUT (Page3),A
RET
;;;;;;;;;;;;;;;;
PILCurs: LD DE,(CursPos) ; ãáâ. ªãàá®à
LD (ResILCr.CrPs),DE
BIT 7,E
JR NZ,.cre
;
LD C,Dss.Locate
RST ToDSS
;
LD BC,Dss.K_SETUP.ShowCursor
RST ToDSS
;
.cre: LD A,1
LD (CurILFl),A
LD A,12 ;!FIXIT ­ ¤® «¨?
RET
;;;;;;;;;;;;;;;;
; ‘¡à®á¨âì ªãàá®à
ResILCr: LD A,(CurILFl)
OR A
RET Z
;
.CrPs+1: LD DE,0
BIT 7,E
RET NZ
;
LD BC,Dss.K_SETUP.HideCursor
RST ToDSS
XOR A
LD (CurILFl),A
RET
;;;;;;;;;;;;;;;;
;!FIXIT CURSOR ¯¥à¥¤¥« âì ªãàá®à ­  ¤®á ¨ ã¡à âì ¯¥à¥å¢ âì ¯à¥à뢠­¨©
;Šãàá®à ®¡ê¥ªâ  InputLine
; PrnILCr: LD A,(Timer) ;¯ ã§  ¬¨£ ­¨ï
; DEC A
; CALL Z,.PutILCr
; LD (Timer),A
; RET
; ;
; .PutILCr: LD A,(Flag)
; CPL
; LD (Flag),A
; PILCurs: LD DE,(CursPos) ; ãáâ. ªãàá®à
; LD (ResILCr.CrPs),DE
; BIT 7,E
; JR NZ,.cre
; ;
; LD C,0B4h ; ¯®«ãç¨âì ᨬ¢®«
; SUB A
; RST ToBIOS
; LD A,(Flag)
; OR A
; LD B,1Bh
; JR Z,.NoILC
; LD B,5Bh ; ªãàá®à ç¥àâ®çª®©
; .NoILC: LD C,0B5h ; ᨬ¢®« ­  íªà ­
; SUB A
; RST ToBIOS
; .cre: LD A,1
; LD (CurILFl),A
; LD A,12
; RET
;;;;;;;;;;;;;;;;
; ‘¡à®á¨âì ªãàá®à
; ResILCr: LD A,(CurILFl)
; OR A
; RET Z
; LD A,#FF
; LD (Flag),A
; INC A
; LD (CurILFl),A
; LD A,12
; LD (Timer),A
; .CrPs+1: LD DE,0
; BIT 7,E
; RET NZ
; ;
; LD C,#B4 ; ¯®«ãç¨âì ᨬ¢®«
; SUB A
; RST ToBIOS
; LD BC,1BB5h ; ᨬ¢®« ­  íªà ­
; SUB A
; RST ToBIOS
; RET
;;;;;;;
;
InpLineI:
LD E,(IX+2) ;Xo
LD D,(IX+4) ;Y
LD A,(IX+5) ;Xi text
SUB E
LD C,A ;Len text
CALL SetDialInv
LD DE,(CursPos)
CALL PILCurs ; ãáâ. ªãàá®à
EI
RET
ClastI: 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 E,(IX+2) ;Xo
INC E
LD D,(IX+7) ;Y elem
LD A,(IX+3)
SUB E
DEC A
LD C,A ;Len X
JP SetClasInv
; Set claster buttons invert
; Input:
; E - X pos
; D - Y pos
; C - X len
SetClasInv:
PUSH IX
LD IX,DialData
IN A,(Page3)
PUSH AF ;á®åà.page4
LD A,(hPages.Win2)
OUT (Page3),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
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 E,ColDialInv
;LD E,A
LD D,ColDhotkey
;LD D,A
SetDin2: INC HL
LD A,(HL)
AND 0Fh
CP D
JR Z,.loc2 ;$+5
LD A,(HL)
;XOR E
AND 0xF0 ;
OR E ;
LD (HL),A
.loc2: INC HL
DJNZ SetDin2
LD IX,(RClIbuf+2) ;Put Name with invert
LD HL,(RClIlen+1)
LD DE,(RClIpos+1)
CALL PutDialLn
POP HL
POP AF
OUT (Page3),A
POP IX
LD E,(IX+2) ;Xo pos element
INC E
INC E
INC E
LD D,(HL) ;Y pos element
LD (CursPos),DE
PUSH HL
CALL PILCurs ; Set cursor
POP HL
LD A,1
LD (CIflag+1),A
RET
; Get claster data
GetClDt: PUSH IX
POP HL
LD BC,7
ADD HL,BC ;Begin claster elements
GetDtLp: INC HL ;Ypos
INC HL ;Hot key
INC HL ;Context
LD A,(HL) ;(Ceil)
INC HL
LD E,(HL) ;Address Ceil
INC HL ;
LD D,(HL) ;
INC HL
LD (DE),A
BIT 7,(HL) ;7bit-end claster
JR Z,GetDtLp
RET
;[]===========================================================[]
; Event claster radio/check buttons
;
EClasterB:
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
; Event - Mouse fire
; ¯à®¢¥àª  ª®®à¤¨­ â ¬ë誨
ECmouse: LD E,(HL) ;Xpos
INC HL
LD D,(HL) ;Ypos
LD A,E
BIT 7,(IX+2)
JR NZ,$+6
CP (IX+2) ;Xo pos
RET C ;<
BIT 7,(IX+3)
RET NZ
CP (IX+3) ;Xi pos
RET NC ;>
LD A,D
CP (IX+4) ;Yo pos
RET C ;<
CP (IX+5) ;Yi pos
RET NC ;>
SUB A
LD (ECnext+1),A
DEC A
LD (SaveA1+1),A ;Begin element claster
PUSH IX
POP HL
INC HL
LD BC,6 ;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
;Event - Key press
ECkeys: SUB A
LD (ECnext+1),A
DEC A
LD (SaveA1+1),A ;Begin element claster
LD A,(HL)
; CP 0Dh
; JR Z,ECspace ; test on "Enter"
CP " "
JR Z,ECspace ; test on "Space"
RES 5,A
BIT 7,(IX+1)
JR NZ,ECkeyN ; I is select
CP 9 ; Tab
JP Z,SelCls0 ; ¢ë¤¥«¨âì á«¥¤. ®¡ê¥ªâ
CP 0Dh ; ###
JP Z,SelCls0 ; ¢ë¤¥«¨âì á«¥¤. ®¡ê¥ªâ
ECkeyN: PUSH IX
POP HL
INC HL
LD BC,6 ;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) ;NZ-object is select
JP NZ,CSelect
JP SelCls1
;Test on space
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
LD DE,6
LD B,A
ADD HL,DE ;find elem.label
DJNZ $-1
JP ECnext ;change
;Test on cursor keys
ECcombK: BIT 7,(IX+1)
JR NZ,ECcombn ;is select
PUSH IX
LD E,(IX+0)
LD D,0
ADD IX,DE
BIT 7,(IX+0)
POP IX
RET Z
INC HL
LD A,(HL) ; Shift+Tab
CP 9
RET NZ
JP SelCls0 ; ¢ë¤¥«¨âì ¯à¥¤. ®¡ê¥ªâ
;
ECcombn: SUB A
LD (ECnext+1),A ;Flag change buttons
INC HL
LD A,(HL)
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
LD E,L
LD D,H
LD BC,6
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
;Cursor up
ECup: PUSH IX
POP HL
INC HL
LD DE,6
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
LD E,(IX+2) ;Xo name
INC E
LD D,(IX+4) ;Y name
LD A,(IX+6) ;Xi name
SUB E
LD C,A ;len name
CALL SetDialInv ;Set my invert
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
;Event - Mouse fire (in select claster)
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
LD DE,6
SavElem: LD A,0
OR A
JR NZ,$+3
INC A
LD B,A
ADD HL,DE
DJNZ $-1
Pcurs: LD E,(IX+2) ;Xo pos element
INC E
LD D,(HL) ;Y pos element
LD A,(IX+3)
SUB E
DEC A
LD C,A ;len element
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 GetFire
;[]===========================================================[]
; Change buttons (Check/Radio)
; Input parameters: HL-Address claster element label
ChangeB: LD A,(IX+1)
RES 7,A
CP ClRadioBut
JP Z,ChangeR
; Change check button
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,(Page3)
PUSH AF
LD A,(hPages.Win2)
OUT (Page3),A
ChangL2: LD D,(HL) ;Ypos
INC HL
INC HL
INC HL
LD A,(HL) ;Address ceil
INC HL
INC HL
INC HL
LD E,(IX+2) ;X pos
INC E
INC E
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,BIOS.LP_SET_PLACE ; ãáâ. ¯®§¨æ¨î ªãàá®à 
RST ToBIOS
POP AF
OR A
LD A," "
JR Z,$+4
LD A,""
LD BC,0182h
RST ToBIOS ;Print on/off
POP HL
cl1: BIT 7,(HL)
JR Z,ChangL2
CALL ResILCr ; á¡à®á¨âì ªãàá®à
CALL PILCurs ; Set cursor
EI
POP AF
OUT (Page3),A
RET
;Change radio button ([x])
ChangeR: IN A,(Page3)
PUSH AF
LD A,(hPages.Win2)
OUT (Page3),A
LD D,(HL) ;Ypos
INC HL
INC HL
INC HL
LD A,(HL) ;Address ceil
XOR 1
LD (HL),A
INC HL
INC HL
INC HL
LD E,(IX+2) ;Xpos
INC E
INC E
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,BIOS.LP_SET_PLACE ; ãáâ. ¯®§¨æ¨î ªãàá®à 
RST ToBIOS
POP AF
OR A
LD A," "
JR Z,$+4
LD A,"x"
LD BC,0182h
RST ToBIOS ;Print
cl2: CALL ResILCr ; á¡à®á¨âì ªãàá®à
CALL PILCurs ; ãáâ. ªãàá®à
EI
POP AF
OUT (Page3),A
RET