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

1208 lines
28 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.

; ‘®¤¥à¦¨â ®¡ê¥ªâë ~Input Line~ ¨ ~Inp Line~ (¢¢®¤ ¤ âë/¢à¥¬¥­¨ ä ©«®¢)
;
;=====================================================================
; <20>à®à¨á®¢ª  ®¡ê¥ªâ 
; object ~Input Line~ (¨¬¥¥â 䮪ãá)
; Input: HL-®¯¨á â¥«ì ®¡ê¥ªâ 
; Format table (¤ ­­ ï â ¡«¨æ  ¢ DialTab):
; +0 - ­®¬¥à ®¡ê¥ªâ  ~Input Line~
; +1 - Xo «¥¢ ï ¯®§¨æ¨ï ®¡ê¥ªâ 
; +2 - Xi ¯à ¢ ï ¯®§¨æ¨ï ®¡ê¥ªâ 
; +3 - Y ¯®§¨æ¨ï ®¡ê¥ªâ 
; +4 - Xi position text (¯®§¨æ¨ï ¨¬¥­¨ ª« áâ¥à  ?)
; +5 - Xo «¥¢ ï ¯®§¨æ¨ï ¯®«ï ¢¢®¤ 
; +6 - ;Hot-keys (¨¬¥­¨ ª« áâ¥à )
; +7 - ª®­â¥ªáâ
; +8,9 -  ¤à¥á áâàãªâãàë áâப¨ ¢¢®¤ 
;---------------------------------------------------------------------
; ”®à¬ â ®¯¨á â¥«ï:
; db InputLine ; ­®¬¥à ®¡ê¥ªâ 
; dw 0503h ; Yo,Xo
; db 10 ; è¨à¨­  ¯®«ï ¢¢®¤ 
; db 1 ; ª®­â¥ªáâ
; dw InputBuffer ; áâàãªâãà  áâப¨ ¢¢®¤ 
;=====================================================================
PutInputLine:
push iy ; iy=DialTab+5
inc iy ; ¯à®©â¨ ï祩ªã ¤«¨­ë ¤ ­­®© â ¡«¨æë
ld (iy+0),a ;+0 ­®¬¥à ®¡ê¥ªâ  "Input Line"
ld a,(hl) ; X pos
inc hl
ld c,a
add a,(ix+0) ; X ¯®«®¦. ®â ­ ç «  íªà ­ 
ld (iy+1),a ;+1 Xo
ld (ix+4),a ; X temp coord
ld a,(hl) ; Y pos
inc hl
ld b,a
add a,(ix+1) ; Pos Y ®â ­ ç «  íªà ­ 
ld (iy+3),a ;+3 Yo ¯®§¨æ¨ï ªãàá®à 
call GetPutA
ld a,(ix+4) ; «¥¢ë© ªà © ¯®«ï ¢¢®¤  (íªà ­. ª®®à¤¨­ âë)
ld (iy+4),a ; Xi ¯à ¢ ï ¯®§¨æ¨ï ­ ç «  ⥪áâ 
ld (iy+5),a ;+5 Xi ¯à ¢ ï ¯®§¨æ¨ï ªãàá®à 
ld (pInputAddr+1),de ;  ¤à¥á ¢ íªà ­. ¡ãä¥à¥
ld a,(hl) ; è¨à¨­  ¯®«ï ¢¢®¤  (¨§ ®¯¨á â¥«ï)
ld (pInputWidth+1),a
inc hl
ld a,(hl) ; ª®­â¥ªáâ
inc hl
ld (iy+7),a ;+7
ld e,(hl)
inc hl
ld d,(hl)
ld (iy+8),e ;+8 de=áâàãªâãà  áâப¨ ¢¢®¤ 
ld (iy+9),d ;+9
inc hl
inc de ; ¯à®©â¨ ï祩ªã "+0"
; ˆ­¨æ¨ «¨§ æ¨ï áâàãªâãàë áâப¨ ¢¢®¤ 
push hl
ld hl,4 ; ᬥé. ¤® ¡ãä¥à  áâப¨
add hl,de
xor a
ld c,a
ld b,a
cpir ; ­ ©â¨ ª®­¥æ áâப¨
ld a,c
cpl
ld b,a ; ¤«¨­  áâப¨
ld c,0 ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
ld a,(pInputWidth+1) ; è¨à¨­  ¯®«ï ¢¢®¤ 
sub b ; è¨à¨­  ¯®«ï - ¤«¨­  áâப¨
jr nc,pInputLine1 ; áâப  ª®à®ç¥ ¯®«ï । ªâ¨à®¢ ­¨ï
neg
inc a
ld c,a ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
ld a,(pInputWidth+1) ; è¨à¨­  ¯®«ï ¢¢®¤ 
dec a
jr $+3
pInputLine1:
ld a,b
pop hl
ex de,hl
ld (hl),1 ;+1 ä« £=1 ReadyString
inc hl
ld (hl),a ;+2 X ¯®§¨æ¨ï ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
inc hl
ld (hl),c ;+3 X ᬥé. áâப¨ §  «¥¢ë© ªà ©
inc hl
ld (hl),b ;+4 ª®«-¢® ¢¢¥¤. ᨬ¢®«®¢
inc hl
ex de,hl
push hl
add a,(iy+5) ; X ¯®§¨æ¨ï ªãàá®à 
ld l,a
ld h,(iy+3) ; Y ¯®§¨æ¨ï ªãàá®à 
ld (CursorPos),hl ; Y/X ¯®§¨æ¨ï ªãàá®à 
ld b,0
ex de,hl
add hl,bc ; de=®áâ â®ª ¢¨¤¨¬®© áâப¨
ex de,hl
; ¯¥à¥ª ç âì ¤ ­­ë¥ ¨§ ¡ãä¥à  áâப¨ ¢ íªà ­. ¡ãä¥à
pInputAddr:
ld hl,0 ;  ¤à¥á ¢ íªà ­. ¡ãä¥à¥
ld a,(color_array+33) ; 梥â áâப¨ ¢¢®¤ 
and 0F0h
or 08h
ld c,a ; 梥⠭¥ । ªâ. áâப¨ ¢¢®¤ 
pInputWidth:
ld b,1 ; è¨à¨­  ¯®«ï ¢¢®¤ 
ld a,(de)
inc de
ld (hl),a
inc hl
ld (hl),c ; 梥â áâப¨
inc hl
inc (ix+4) ; X ++¯à ¢ë© ªà © ¯®«ï ¢¢®¤  (íªà ­. ª®®à¤¨­ âë)
djnz $-9
pInputLine2: ; ¨§ "PutInpLine"
pop hl
ld a,(ix+4) ; X ¯à ¢ë© ªà © ¯®«ï ¢¢®¤  (íªà ­. ª®®à¤¨­ âë)
ld (iy+2),a ; Xi ¯à ¢ ï ¯®§¨æ¨ï ®¡ê¥ªâ 
ld bc,10 ; à §¬¥à â ¡«¨æë
add iy,bc ; IY-next element
; á®åà. à §¬¥à â ¡«¨æë ¢ ’ ¡«¨æ¥ ®¡ê¥ªâ®¢
push iy
exx
pop hl
pop de ; de=iy
and a
sbc hl,de ; ¤«¨­  â ¡«¨æë "Input Line"
ld a,l
ld (de),a ; DialTab+5
exx
ret
;=====================================================================
;
; Ž¡à ¡®â稪 ᮡë⨩ ®¡ê¥ªâ®¢ "Input Line"
;
;=====================================================================
step_scroll equ 1 ; è £ áªà®««¨­£ 
EvInputLine:
ld hl,what ; ᯨ᮪ ᮡë⨩
ld a,(hl)
inc hl
cp evMouseFr
jr z,EvInputMouse
cp evKeyboard
jr z,EvInputKeys
cp evCombKey
jp z,EvInputComb
ret
; ‘®¡ë⨥ - Œë誠
EvInputMouse:
LD E,(HL) ; X coord
INC HL
LD D,(HL) ; Y coord
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) ; Sel or nosel
JR Z,SetInputLine ; ¢ë¤¥«¨âì, ®¡ê¥ªâ ­¥ ¢ 䮪ãá¥
BIT 7,(IX+6)
JR NZ,$+6
CP (IX+6) ; Xo input line
RET C
SUB (IX+6) ; Shift from begin
LD C,A
LD L,(IX+9) ; áâàãªâãà  ¡ãä¥à 
LD H,(IX+10)
INC HL
LD (HL),0 ;+1 ãáâ. ä« £ "­¥ áâ¨à âì áâபã"
INC HL
CP (HL) ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
RET Z
;PUSH HL
INC HL
ADD A,(HL) ;+3 X ᬥé. áâப¨ §  «¥¢ë© ªà ©
INC HL
CP (HL) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
LD A,(HL)
;POP HL
dec hl;
dec hl;
JR Z,EIM
JR C,EIM
INC HL
SUB (HL) ;+3
DEC HL
LD C,A
EIM: ld (hl),c ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
dec hl
dec hl
push iy
push hl
pop iy
call PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
pop iy
jr InputLineExt
; ‘®¡ë⨥ - ®¡ëç­ ï ª« ¢¨è 
EvInputKeys:
bit 7,(ix+1) ; Sel or nosel
jr nz,InputLineWork ; ®¡ê¥ªâ 㦥 ¢ë¤¥«¥­
ld a,(hl) ;+1 what
cp 9 ; Tab
ret nz
; 䮪ãá ­  ®¡ê¥ªâ "Input Line"
SetInputLine:
call MoveObj ; Select "Input line"
call ResDialInv ; Reset previos object
ld ix,DialTab+5 ; ’ ¡«¨æ  ®¡ê¥ªâ®¢
push iy
ld l,(ix+9) ; hl=áâàãªâãà  áâப¨ ¢¢®¤  "Input Line"
ld h,(ix+10)
push hl
pop iy
inc hl
ld (hl),1 ;+1 ä« £ ReadyString (1=®ç¨áâ¨âì áâப㠯ਠ¢¢®¤¥)
ld a,(color_array+33) ; 梥â áâப¨ ¢¢®¤ 
and 0F0h
or 08h
ld (ColorInLn+1),a ; 梥⠭¥ । ªâ. áâப¨
call PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
ld a,(color_array+33)
ld (ColorInLn+1),a ; ¢®ááâ. 梥â
pop iy
call PILCurs ; ¢ª«. ªãàá®à
ei
InputLineExt:
ld hl,what ; ¯®«¥ ᮡë⨩
ld (hl),evNothing
jp get_fire
; <20> ¡®â  ¢ áâப¥ । ªâ¨à®¢ ­¨ï
InputLineWork:
LD A,(HL) ; what+1 ª®¤ ª« ¢¨è¨
CP 8 ; "§ ¡®©"
JR Z,$+5
CP " "
RET C
PUSH IY
LD DE,InputLineWex
PUSH DE
LD L,(IX+9) ; hl=áâàãªâãà  áâப¨ ¢¢®¤ 
LD H,(IX+10)
PUSH HL
POP IY
ex af,af'
res 7,(iy+1) ;+1 ä« £ ReadyString
ld a,(D0642) ; ä« £¨ ª« ¢ë
bit 1,a ; ¡¨â Ins
ld a,1 ; ¢áâ ¢ª 
jr nz,$+3
dec a ; § ¬¥­ 
and 1
rrca ; ¢¯à ¢® (¬«.¡¨â -> ¯¥à¥­®á)
or (iy+1)
ld (iy+1),a
ex af,af'
CP 8 ; "§ ¡®©"
JP Z,BackDelete
EX AF,AF'
BIT 0,(IY+1) ;+1 ä« £ ReadyString
CALL NZ,ClearIL ; ®ç¨áâ¨âì ¢áî áâப㠨 ¥¥ ¡ãä¥à
LD A,(IY+4) ; InputSymb
CP (IY+0) ; Max len
JR NZ,InLineWork
LD A,(IY+2)
ADD A,(IY+3)
CP (IY+0)
RET NC
BIT 7,(IY+1)
RET NZ
InLineWork:
LD A,(IY+4)
SUB (IY+3)
SUB (IY+2)
JR Z,NoInsert
DEC (IY+4)
BIT 7,(IY+1)
JR Z,NoInsert
INC (IY+4)
; ¢¢®¤ ¢ á¥à¥¤¨­ã ⥪áâ  (¢áâ ¢ª )
LD C,A
LD B,0
LD L,(IX+9)
LD H,(IX+10)
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
NoInsert:
LD L,(IX+9)
LD H,(IX+10)
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) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
CALL Z,OutIL ; ªãàá®à §  ¯®«¥¬ ¢¢®¤ 
CALL PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
POP DE
InputLineWex:
LD HL,what ; ¯®«¥ ᮡë⨩
LD (HL),evNothing
POP IY
RET
; Šãàá®à §  ¯®«¥¬ ¢¢®¤ 
OutIL: ld a,(iy+3)
add a,step_scroll ; è £ áªà®««¨­£ 
ld (iy+3),a
ld a,(iy+2)
sub step_scroll ; è £ áªà®««¨­£ 
ld (iy+2),a
ret
; Žç¨áâ¨âì । ªâ. áâபã
ClearIL:xor a
ld b,(iy+0) ;+0 ¤«¨­  ¡ãä¥à  । ªâ. áâப¨
ld l,(ix+9) ; hl=áâàãªâãà  áâப¨ ¢¢®¤ 
ld h,(ix+10)
inc hl
inc hl
inc hl
inc hl
inc hl ;+5 ¡ãä¥à । ªâ. áâப¨
ld (hl),a
djnz $-2
ld (iy+2),a ;+2 X ¯®§¨æ¨ï ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
ld (iy+3),a ;+3 X ᬥé. áâப¨ §  «¥¢ë© ªà ©
ld (iy+4),a ;+4 á¡à. ç¨á«® ¢¢¥¤¥­­ëå ᨬ¢®«®¢
res 0,(iy+1) ;+1 á¡à. ä« £ ReadyString
ret
; ‘®¡ë⨥ - ªãàá. ª« ¢¨è¨ ¨«¨ ª®¬¡¨­ æ¨¨
EvInputComb:
bit 7,(ix+1) ; sel or nosel
jr nz,EvInputComb1 ; ®¡ê¥ªâ 㦥 ¢ë¤¥«¥­
ld b,(hl) ;+1 what
inc hl
ld a,(hl) ;+2 what
cp 56h ; ªãàá®à ¢¯à ¢®
jp z,SetInputLine
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,SetInputLine
ld a,b
and 00111111b ; ¡¨âë Ctrl, Alt
ret nz
ld a,(hl) ;+2 what
cp 15+80h ; Tab ᪥­-ª®¤+80h
ret nz
jp SetInputLine ; Shift+Tab, ­  ¯à¥¤ë¤ã騩 ®¡ê¥ªâ
;
EvInputComb1:
push iy
inc hl
ld a,(hl) ;+2 what
ld l,(ix+9) ; Address buffer
ld h,(ix+10)
ld de,InputLineWex
push de
push hl
pop iy
cp 54h ; ªãàá®à ¢«¥¢®
jr z,InputLeft
cp 56h ; ªãàá®à ¢¯à ¢®
jr z,InputRight
cp 4Fh ; Del 㤠«¨âì ᨬ¢®« ¢ ⥪. ¯®§¨æ¨¨
jp z,InputDel
cp 57h ; Home ¢ ­ ç «® áâப¨
jp z,InputHome
cp 51h ; End ¢ ª®­¥æ áâப¨
jp z,InputEnd
pop de
pop iy
ret
; Šãàá®à ¢«¥¢® ­  ®¤­® ¬¥áâ®
InputLeft:
ld a,(iy+2)
dec a
jp p,InLeft
ld a,(iy+3)
sub step_scroll ; è £ áªà®««¨­£ 
ret c ; ªãàá®à ¢ ªà ©­¥¬ «¥¢®¬ ¯®«®¦.
ld (iy+3),a ; X ᬥé. áâப¨ §  «¥¢ë© ªà © (¢ ᨬ¢®« å)
ld a,(iy+2) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
add a,step_scroll-1 ; è £ áªà®««¨­£ 
InLeft: ld (iy+2),a
call PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
res 0,(iy+1) ;+1 ReadyString á¡à.ä« £ "áâ¥à¥âì áâபã"
ret
; Šãàá®à ¢¯à ¢® ­  ®¤­® ¬¥áâ®
InputRight:
ld a,(iy+2)
add a,(iy+3)
cp (iy+4)
jr z,InputRight2 ; ¤«ï "ᬥ­¨âì æ¢¥â áâப¨"
ld a,(ix+3)
sub (ix+6)
ld b,a
ld a,(iy+2)
inc a
cp b
jr nz,InRight
ld a,(iy+3) ; X ᬥé. áâப¨ §  «¥¢ë© ªà © (¢ ᨬ¢®« å)
add a,step_scroll ; è £ áªà®««¨­£ 
ld (iy+3),a
ld a,(iy+2) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
sub step_scroll-1 ; è £ áªà®««¨­£ 
InRight:ld (iy+2),a
InputRight2:
call PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
res 0,(iy+1) ;+1 ReadyString á¡à.ä« £ "áâ¥à¥âì áâபã"
ret
; ‡ ¡®© - 㤠«¨âì ᨬ¢®« «¥¢¥¥ ªãàá®à 
BackDelete:
LD A,(IY+2)
OR A
JR NZ,BackDelete1
LD A,(IY+3)
SUB step_scroll ; è £ áªà®««¨­£ 
RET C
LD (IY+3),A
LD A,(IY+2)
ADD A,step_scroll ; è £ áªà®««¨­£ 
LD (IY+2),A
BackDelete1:
LD L,(IX+9)
LD H,(IX+10)
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,$+7
LD C,A
LD B,0
LDIR
xor a
ld (de),a
DEC (IY+2) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
DEC (IY+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
CALL PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
RES 0,(IY+1) ;+1 ReadyString á¡à.ä« £ "áâ¥à¥âì áâபã"
RET
; Delete - 㤠«¨âì ᨬ¢®« ¢ ⥪. ¯®§¨æ¨¨
InputDel:
LD L,(IX+9)
LD H,(IX+10)
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) ;+1 ReadyString á¡à.ä« £ "áâ¥à¥âì áâபã"
RET
; Home - ¢ ­ ç «® áâப¨
InputHome:
ld a,(iy+2) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
add a,(iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
ret z
xor a
ld (iy+2),a ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
ld (iy+3),a ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
call PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
res 0,(iy+1) ;+1 ReadyString á¡à.ä« £ "áâ¥à¥âì áâபã"
ret
; End - ¢ ª®­¥æ áâப¨
InputEnd:
ld a,(iy+4)
sub (iy+3)
cp (iy+2)
jr z,InEnd1 ; ¤«ï "ᬥ­¨âì æ¢¥â áâப¨"
add a,(iy+3)
ld c,a
ld (iy+3),0
ld a,(ix+3)
sub (ix+6)
sub c
jr z,$+6
jr nc,InEndNIL
neg
InEndLp:ld c,a
ld a,(iy+3) ; X ᬥé. áâப¨ §  «¥¢ë© ªà © (¢ ᨬ¢®« å)
add a,step_scroll ; è £ áªà®««¨­£ 
ld (iy+3),a
ld a,c
sub step_scroll ; è £ áªà®««¨­£ 
jr nc,InEndLp
InEndNIL:
ld a,(iy+4)
sub (iy+3)
ld (iy+2),a ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
InEnd1: call PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
res 0,(iy+1) ;+1 ReadyString á¡à.ä« £ "áâ¥à¥âì áâபã"
ret
;-----------------------------------------------------------
; ‚뢮¤ áâப¨ ®¡ê¥ªâ  "Input Line" ­  íªà ­
;-----------------------------------------------------------
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"
LD A,E
NEG
LD L,A
LD E,H
LD (prnadd+1),HL
LD C,84h ; ãáâ. ¯®§¨æ¨î ªãàá®à 
RST 08h
LD L,(IX+9) ; hl=áâàãªâãà  áâப¨ ¢¢®¤ 
LD H,(IX+10)
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.line) = Len inp.line
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,work_buffer ; à ¡. ¡ãä¥à InputLine
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
ColorInLn:
ld e,31h ; 梥⠢뤥«. ®¡ê¥ªâ  (color_array+26)
ld c,85h ; ¢ë¢®¤ áâப¨ á  âਡãâ ¬¨
RST 08h
prne: LD A,(IY+2)
ADD A,(IX+6)
LD E,A
LD D,(IX+4)
LD (CursorPos),de ; Y/X ¯®§¨æ¨ï ªãàá®à 
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,work_buffer ; à ¡. ¡ãä¥à InputLine
LD A,(IX+3) ; Xi - Xo (inp.line) = Len inp.line
SUB (IX+6)
LD C,A
LD B,0
IN A,(SLOT3)
PUSH AF
LD A,(page_dial_screen)
OUT (SLOT3),A
LDI
INC DE
JP PE,$-3
POP AF
OUT (SLOT3),A
RET
;-------------------------------------------------
; “áâ ­®¢¨âì 䮪ãá ­  ®¡ê¥ªâ "Input Line"
;-------------------------------------------------
InpLineI:
ld de,color_array+33 ; 梥â áâப¨ ¢¢®¤ 
ld (set_dial_tmp_inv+1),de
ld e,(ix+2) ; Xo left ª®®à¤. ¨¬¥­¨ ª« áâ¥à 
ld d,(ix+4) ; Y
ld a,(ix+5) ; Xi right ª®®à¤. ¨¬¥­¨ ª« áâ¥à 
sub e
ld c,a ; ¤«¨­  ¢ë¤¥«. ¬¥âª¨
call SetDialInv
ld de,color_array+26 ; 梥â Selected title (®¡ê¥ªâ )
ld (set_dial_tmp_inv+1),de
ld de,(CursorPos) ; Y/X ¯®§¨æ¨ï ªãàá®à 
call PILCurs ; ¢ª«. ªãàá®à
ei
ret
;---------------------------------------------------------------------
;=====================================================================
; <20>à®à¨á®¢ª  ®¡ê¥ªâ  ~Inp Line~
;
; Žâ«¨ç¨¥ ®â "Input Line" - ०¨¬ "§ ¬¥­ë" ⥪áâ ; ­¥â æ¢¥â  ­¥ ।.
; áâப¨; ¯à¨ ¯®«ã祭¨¨ 䮪ãá  ªãàá®à ãáâ. ¢ ­ ç «® áâப¨.
; ‚¢®¤ïâáï ⮫쪮 ᨬ¢®«ë 0..9, ".", ":".
;
; object ~Inp Line~ (¨¬¥¥â 䮪ãá)
; Input: HL-®¯¨á â¥«ì ®¡ê¥ªâ 
; Format table (¤ ­­ ï â ¡«¨æ  ¢ DialTab):
; +0 - ­®¬¥à ®¡ê¥ªâ  ~Input Line~
; +1 - Xo «¥¢ ï ¯®§¨æ¨ï ®¡ê¥ªâ 
; +2 - Xi ¯à ¢ ï ¯®§¨æ¨ï ®¡ê¥ªâ 
; +3 - Y ¯®§¨æ¨ï ®¡ê¥ªâ 
; +4 - Xi position text (¯®§¨æ¨ï ¨¬¥­¨ ª« áâ¥à  ?)
; +5 - Xo «¥¢ ï ¯®§¨æ¨ï ¯®«ï ¢¢®¤ 
; +6 - ;Hot-keys (¨¬¥­¨ ª« áâ¥à )
; +7 - ª®­â¥ªáâ
; +8,9 -  ¤à¥á áâàãªâãàë áâப¨ ¢¢®¤ 
;---------------------------------------------------------------------
; ”®à¬ â ®¯¨á â¥«ï:
; db InpLine ; ­®¬¥à ®¡ê¥ªâ 
; dw 0503h ; Yo,Xo
; db 12 ; è¨à¨­  ¯®«ï ¢¢®¤ 
; db 4 ; ª®­â¥ªáâ
; dw Buffer ; áâàãªâãà  áâப¨ ¢¢®¤ 
;=====================================================================
PutInpLine:
push iy ; iy=DialTab+5
inc iy ; ¯à®©â¨ ï祩ªã ¤«¨­ë ¤ ­­®© â ¡«¨æë
ld (iy+0),a ;+0 ­®¬¥à ®¡ê¥ªâ  "Input Line"
ld a,(hl) ; X pos
inc hl
ld c,a
add a,(ix+0) ; X ¯®«®¦. ®â ­ ç «  íªà ­ 
ld (iy+1),a ;+1 Xo
ld (ix+4),a ; X temp coord
ld a,(hl) ; Y pos
inc hl
ld b,a
add a,(ix+1) ; Pos Y ®â ­ ç «  íªà ­ 
ld (iy+3),a ;+3 Yo ¯®§¨æ¨ï ªãàá®à 
call GetPutA
ld a,(ix+4) ; «¥¢ë© ªà © ¯®«ï ¢¢®¤  (íªà ­. ª®®à¤¨­ âë)
ld (iy+4),a ; Xi ¯à ¢ ï ¯®§¨æ¨ï ­ ç «  ⥪áâ 
ld (iy+5),a ;+5 Xi ¯à ¢ ï ¯®§¨æ¨ï ªãàá®à 
ld (pInpAddr__+1),de ;  ¤à¥á ¢ íªà ­. ¡ãä¥à¥
ld b,(hl) ; è¨à¨­  ¯®«ï ¢¢®¤  (¨§ ®¯¨á â¥«ï)
inc hl
ld a,(hl) ; ª®­â¥ªáâ
inc hl
ld (iy+7),a ;+7
ld e,(hl)
inc hl
ld d,(hl)
ld (iy+8),e ;+8 de=áâàãªâãà  áâப¨ ¢¢®¤ 
ld (iy+9),d ;+9
inc hl
inc de ; ¯à®©â¨ ï祩ªã "+0"
; ¨­¨æ. áâàãªâãàë áâப¨ ¢¢®¤ 
ex de,hl
xor a
ld (hl),a ;+1 ä« £=0 ReadyString (­¥ ®ç¨é âì áâபã)
inc hl
ld (hl),a ;+2 X ¯®§¨æ¨ï ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
inc hl
ld (hl),a ;+3 X ᬥé. áâப¨ §  «¥¢ë© ªà ©
inc hl
ld (hl),b ;+4 ª®«-¢® ¢¢¥¤. ᨬ¢®«®¢
inc hl
;cp (hl) ;+5 ¥áâì áâப ?
;jr nz,$+5 ; ¤ 
;dec hl
;ld (hl),a ;+4 ­¥â ¢¢¥¤. ᨬ¢®«®¢
;inc hl
ex de,hl
push hl
add a,(iy+5) ; X ¯®§¨æ¨ï ªãàá®à 
ld l,a
ld h,(iy+3) ; Y ¯®§¨æ¨ï ªãàá®à 
ld (CursorPos),hl ; Y/X ¯®§¨æ¨ï ªãàá®à 
; ¯¥à¥ª ç âì ¤ ­­ë¥ ¨§ ¡ãä¥à  áâப¨ ¢ íªà ­. ¡ãä¥à
pInpAddr__:
ld hl,0 ;  ¤à¥á ¢ íªà ­. ¡ãä¥à¥
ld a,(color_array+33) ; 梥â áâப¨ ¢¢®¤ 
ld c,a
; b=è¨à¨­  ¯®«ï ¢¢®¤ 
;dec de
;ld a,(de) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
;inc de
;or a
;jr z,pInpBlank ; ­¥â áâப¨
ld a,(de)
inc de
ld (hl),a
inc hl
ld (hl),c ; 梥â áâப¨
inc hl
inc (ix+4) ; X ++¯à ¢ë© ªà © ¯®«ï ¢¢®¤  (íªà ­. ª®®à¤¨­ âë)
djnz $-9
jp pInputLine2
;
;pInpBlank:
;ld a," "
;ld (hl),a
;inc hl
;ld (hl),c ; 梥â áâப¨
;inc hl
;inc (ix+4) ; X ++¯à ¢ë© ªà © ¯®«ï ¢¢®¤  (íªà ­. ª®®à¤¨­ âë)
;djnz $-7
;jp pInputLine2
;=====================================================================
;
; Ž¡à ¡®â稪 ᮡë⨩ ®¡ê¥ªâ®¢ ~Inp Line~
;
;=====================================================================
EvInpLine:
ld hl,what ; ᯨ᮪ ᮡë⨩
ld a,(hl)
inc hl
cp evMouseFr
jr z,EvInpMouse
cp evKeyboard
jr z,EvInpKeys
cp evCombKey
jp z,EvInpComb
ret
; ‘®¡ë⨥ - Œë誠
EvInpMouse:
ld e,(hl) ; X coord
inc hl
ld d,(hl) ; Y coord
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) ; Xi ¯à ¢ë© ªà © ¯®«ï ¢¢®¤ 
ret nz
cp (ix+3) ; Xi ¯à ¢ë© ªà © ¯®«ï ¢¢®¤ 
ret nc
bit 7,(ix+1) ; Sel or nosel
jr z,SetInpLine ; ¢ë¤¥«¨âì - ®¡ê¥ªâ ­¥ ¢ 䮪ãá¥
bit 7,(ix+6)
jr nz,$+6
cp (ix+6) ; Xo input line
ret c
sub (ix+6) ; Shift from begin
ld c,a
ld l,(ix+9) ; áâàãªâãà  ¡ãä¥à 
ld h,(ix+10)
inc hl
ld (hl),0 ;+1 ãáâ. ä« £ "­¥ áâ¨à âì áâபã"
inc hl
cp (hl) ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ret z
push hl
inc hl
inc hl
cp (hl) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
ld a,(hl)
pop hl
jr z,$+5
jr c,$+3
ld c,a ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
ld (hl),c
dec hl
dec hl
push iy
push hl
pop iy
call PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
pop iy
jr InpLineExt
; ‘®¡ë⨥ - ®¡ëç­ ï ª« ¢¨è 
EvInpKeys:
bit 7,(ix+1) ; Sel or nosel
jr nz,InpLineWork ; ®¡ê¥ªâ 㦥 ¢ë¤¥«¥­
ld a,(hl) ;+1 what
cp 9 ; Tab
ret nz
; 䮪ãá ­  ®¡ê¥ªâ "Inp Line"
SetInpLine:
call MoveObj ; Select "Inp line"
call ResDialInv ; Reset previos object
ld ix,DialTab+5 ; ’ ¡«¨æ  ®¡ê¥ªâ®¢
push iy
ld l,(ix+9) ; hl=áâàãªâãà  áâப¨ ¢¢®¤  "Inp Line"
ld h,(ix+10)
push hl
pop iy
inc hl
xor a
ld (hl),a ;+1 ä« £ ReadyString (1=®ç¨áâ¨âì áâப㠯ਠ¢¢®¤¥)
inc hl
ld (hl),a ;+2 X ¯®§¨æ¨ï ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
inc hl
ld (hl),a ;+3 X ᬥé. áâப¨ §  «¥¢ë© ªà ©
inc hl
call PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
pop iy
call PILCurs ; ¢ª«. ªãàá®à
ei
InpLineExt:
ld hl,what ; ¯®«¥ ᮡë⨩
ld (hl),evNothing
jp get_fire
; <20> ¡®â  ¢ áâப¥ । ªâ¨à®¢ ­¨ï
InpLineWork:
ld a,(hl) ; what+1 ª®¤ ª« ¢¨è¨
cp 8 ; "§ ¡®©"
jr z,$+12
cp "."
jr z,$+8
cp "0"
ret c
cp ":"+1
ret nc
; ᨬ¢®«ë ".", 0..9, ":"
push iy
ld de,InpLineWex
push de
ld l,(ix+9) ; áâàãªâãà  ¡ãä¥à 
ld h,(ix+10)
push hl
pop iy
ex af,af'
res 7,(iy+1) ;+1 ä« £ ReadyString
ld a,1; ; 01/00 ¢áâ ¢ª /§ ¬¥­ 
and 1
rrca ; ¢¯à ¢® (¬«.¡¨â -> ¯¥à¥­®á)
or (iy+1)
ld (iy+1),a ;+1 ä« £ ReadyString
ex af,af'
cp 8 ; "§ ¡®©"
jp z,BackDel
ex af,af'
ld a,(iy+4) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
cp (iy+0) ;+0 ¬ ªá. ¤«¨­  áâப¨
jr z,no_ins
sub (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
jr z,no_ins ; ­¥ à §¤¢. áâபã
dec (iy+4) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
bit 7,(iy+1) ;+1 ä« £ ReadyString
jr z,no_ins ; ­¥ à §¤¢. áâபã
inc (iy+4) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
; ¢¢®¤ ¢ á¥à¥¤¨­ã ⥪áâ  (¢áâ ¢ª )
ld c,a
ld b,0
ld l,(ix+9) ; áâàãªâãà  ¡ãä¥à 
ld h,(ix+10)
ld a,(iy+4) ;+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
no_ins: ld l,(ix+9) ; áâàãªâãà  ¡ãä¥à 
ld h,(ix+10)
ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
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 ; á®åà. ᨬ¢®« ¢ áâப¥
ld a,(iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
cp (iy+0) ; ¬ ªá. ¤«¨­  áâப¨
jr z,$+5 ; ¢áï áâப  § ¯®«­¥­ 
inc (iy+4) ; ++ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
inc (iy+2) ; X ++¯®«®¦. ªãàá®à  ¢ áâப¥
ld a,(ix+3) ; Xi ¯à ¢ë© ªà © ¯®«ï ¢¢®¤ 
sub (ix+6) ; Xo «¥¢ë© ªà © ¯®«ï
cp (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
jr nz,$+5 ; ªãàá®à ­¥ §  ¯®«¥¬ ¢¢®¤ 
dec (iy+2) ; X --¯®«®¦. ªãàá®à 
call PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
pop de
InpLineWex:
ld hl,what ; ¯®«¥ ᮡë⨩
ld (hl),evNothing
pop iy
ret
; ‘®¡ë⨥ - ªãàá. ª« ¢¨è¨ ¨«¨ ª®¬¡¨­ æ¨¨
EvInpComb:
bit 7,(ix+1) ; sel or nosel
jr nz,EvInpComb1 ; ®¡ê¥ªâ 㦥 ¢ë¤¥«¥­
ld b,(hl) ;+1 what
inc hl
ld a,(hl) ;+2 what
cp 56h ; ªãàá®à ¢¯à ¢®
jp z,SetInpLine
push ix
ld e,(ix+0) ; à §¬¥à â ¡«¨æë "Inp Line"
ld d,0
add ix,de
bit 7,(ix+0)
pop ix
ret z ; ¥é¥ ­¥ ª®­¥æ ®¡ê¥ªâ®¢
cp 54h ; ªãàá®à ¢«¥¢®
jp z,SetInpLine
ld a,b
and 00111111b ; ¡¨âë Ctrl, Alt
ret nz
ld a,(hl) ;+2 what
cp 15+80h ; Tab ᪥­-ª®¤+80h
ret nz
jp SetInpLine ; Shift+Tab, ­  ¯à¥¤ë¤ã騩 ®¡ê¥ªâ
;
EvInpComb1:
push iy
inc hl
ld a,(hl) ;+2 what
ld l,(ix+9) ; áâàãªâãà  ¡ãä¥à 
ld h,(ix+10)
ld de,InpLineWex
push de
push hl
pop iy
cp 54h ; ªãàá®à ¢«¥¢®
jr z,InpLeft
cp 56h ; ªãàá®à ¢¯à ¢®
jr z,InpRight
cp 4Fh ; Del 㤠«¨âì ᨬ¢®« ¢ ⥪. ¯®§¨æ¨¨
jp z,InpDel
cp 57h ; Home ¢ ­ ç «® áâப¨
jp z,InpHome
cp 51h ; End ¢ ª®­¥æ áâப¨
jp z,InpEnd
pop de
pop iy
ret
; Šãàá®à ¢«¥¢® ­  ®¤­® ¬¥áâ®
InpLeft:ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
dec a
ret m ; §  «¥¢ë¬ ªà ¥¬ ¯®«ï
InpPrint:
ld (iy+2),a
jp PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
; Šãàá®à ¢¯à ¢® ­  ®¤­® ¬¥áâ®
InpRight:
ld a,(iy+2) ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
cp (iy+4) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
ret z ; ª®­¥æ áâப¨
ld a,(ix+3) ; Xi ¯à ¢ë© ªà © ¯®«ï ¢¢®¤ 
sub (ix+6) ; Xo «¥¢ë© ªà © ¯®«ï
ld b,a
ld a,(iy+2) ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
inc a
cp b
ret z ; 㯥૨áì ¢ ¯à ¢ë© ªà © ¯®«ï
jr InpPrint
; ‡ ¡®© - 㤠«¨âì ᨬ¢®« «¥¢¥¥ ªãàá®à 
BackDel:ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
or a
ret z ; ¤®è«¨ ¤® «¥¢®£® ªà ï ¯®«ï
ld l,(ix+9) ; áâàãªâãà  ¡ãä¥à 
ld h,(ix+10)
ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
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+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
jr z,$+7 ; ªãàá®à §  ª®­æ®¬ áâப¨
ld c,a
ld b,0
ldir ; ®¡­®¢¨âì ®áâ â®ª áâப¨
xor a
ld (de),a ; ¢ ª®­¥æ áâப¨
dec (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
dec (iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
jp PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
; Delete - 㤠«¨âì ᨬ¢®« ¢ ⥪. ¯®§¨æ¨¨
InpDel: ld l,(ix+9) ; áâàãªâãà  ¡ãä¥à 
ld h,(ix+10)
ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
inc a
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) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
sub (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ret z ; ªãàá®à §  ª®­æ®¬ áâப¨
ld c,a
ld b,0
ldir ; ®¡­®¢¨âì ®áâ â®ª áâப¨
xor a
ld (de),a ; ¢ ª®­¥æ áâப¨
dec (iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
jp PrnInLn ; ¢ë¢¥á⨠áâப㠭  íªà ­
; Home - ¢ ­ ç «® áâப¨
InpHome:ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
or a
ret z
xor a ; X ¯®«®¦. ªãàá®à 
jp InpPrint ; ¢ë¢¥á⨠áâப㠭  íªà ­
; End - ¢ ª®­¥æ áâப¨
InpEnd: ld a,(iy+4) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
cp (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ret z
ld c,a
ld a,(ix+3) ; Xi ¯à ¢ë© ªà © ¯®«ï ¢¢®¤ 
sub (ix+6) ; Xo «¥¢ë© ªà © ¯®«ï
cp c
ld a,c
jp nz,InpPrint ; áâப  ¬¥­ìè¥ è¨à¨­ë ¯®«ï
dec a ; --¯®«®¦. ªãàá®à 
jp InpPrint ; ¢ë¢¥á⨠áâப㠭  íªà ­