flex_nav/plugins/fneditor/fetext.a80

1947 lines
29 KiB
Plaintext
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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; LAST UPDATE: 20.03.2025 savelij
;[]==========================================================[]
FEPrnASCIIpage LD HL,PrnASCIIinfo
PUSH HL
LD HL,(FEPageShift)
LD (FETempShift),HL
LD B,0x1C
FEPrnASCIIlp PUSH BC
CALL PrnASCIIline ;‚뢮¤¨¬ áâப㠢 ¡ãä ¨ ­  íªà ­
POP BC
JR C,FillASCII ;CY-‡ ª®­ç¨«¨áì ¡ ©âë ¤«ï ¯¥ç â¨
LD A,B
ADD A,0x08
LD B,A
CP 0xE4
JR NZ,FEPrnASCIIlp
SUB A
LD (FEEmptyLines),A
LD E,(IY+CursorX)
LD D,(IY+CursorY)
CALL FESetCursor
CALL GetString
RET
;<3B>à®æ¥¤ãà  ®âç¨á⪨ ­¨¦­¥© ®¡« á⨠íªà ­ 
FillASCII LD A,0xE4
SUB B
LD (FEFLenASC),A
JR Z,FEFASCIIe ;Z-­¥â ®âç¨á⪨
LD A,B
LD (FEFPosASC),A
MAKEWINDOW WINSUBOBJ.WOBIND
W_FILL 0,0,624,0,COLORI.PANEL
FEFPosASC EQU $ - 7
FEFLenASC EQU $ - 3
W_END
FEFASCIIe LD A,(FEFLenASC)
SRL A
SRL A
SRL A
LD (FEEmptyLines),A
LD E,(IY+CursorX)
LD D,(IY+CursorY)
CALL FESetCursor
CALL GetString
RET
;[]----------------------------------------------------------[]
RefrASCIIpage LD HL,PrnASCIIinfo
PUSH HL
CALL FEResCursor
LD HL,(FEPageShift)
LD (FETempShift),HL
LD B,0x1C
LD C,(IY+CursorY)
.RefrASCIIlp PUSH BC
LD A,C
OR A
JR NZ,.RfASCII
CALL PrnASCIIstring
LD HL,(FETempShift)
CALL FESearchDown
LD (FETempShift),HL
JR .L1
.RfASCII CALL PrnASCIIline ;‚뢮¤¨¬ áâப㠢 ¡ãä ¨ ­  íªà ­
.L1 POP BC
RET C ;CY-‡ ª®­ç¨«¨áì ¡ ©âë ¤«ï ¯¥ç â¨
DEC C
LD A,B
ADD A,0x08
LD B,A
CP 0xE4
JR NZ,.RefrASCIIlp
RET
;[]----------------------------------------------------------[]
;<3B>à®æ¥¤ãà  ¯¥ç â¨ ⥪.áâப¨ ¢ ¡ãä¥à ¨ ­  íªà ­
PrnASCIIline LD IXH,B
LD C,0xF0
LD HL,(FEFileLenght)
LD DE,(FETempShift)
OR A
SBC HL,DE
RET C
LD B,0xF0
LD A,H
OR A
JR NZ,PutASCIIln
OR L
SCF
RET Z
LD B,L
PutASCIIln LD HL,TempBuffer
GETPORT WINSP.CPU1
PUSH AF
LD DE,(FETempShift)
LD A,D ;‚뤥«ï¥¬ ­®¬¥à áâà ­¨æë
AND 0xC0
RLCA
RLCA
EXX
LD E,A ;DE - €¤à¥á áâà ­¨æë ¢ ᯨ᪥
LD D,HIGH (PagesList)
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
EXX
RES 7,D ;‚ª«.á 0x4000
SET 6,D
PutASCIIlnLp BIT 7,D
JR Z,PutLnA1
RES 7,D
SET 6,D
EXX
INC E ;DE - €¤à¥á áâà ­¨æë ¢ ᯨ᪥
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
EXX
PutLnA1 LD A,(DE)
INC DE
CP 0x0D
JR NZ,PutLineA1
BIT 7,D
JR Z,PutLnA2
RES 7,D
SET 6,D
EXX
INC E ;DE - €¤à¥á áâà ­¨æë ¢ ᯨ᪥
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
EXX
PutLnA2 LD A,(DE)
CP 0x0A
JR NZ,PutLnExitA
INC DE
JR PutLnExitA
PutLineA1 CP 0x0A
JR Z,PutLnExitA
CP 0x09
JR NZ,PutLineA2
PutTabA LD (HL),0x20
INC L
LD A,L
CP C
JR Z,PutLnEA1
AND 0x07
JR NZ,PutTabA
JR PutLineA3-2
PutLnEA0 BIT 7,D
JR Z,PutLEA1
RES 7,D
SET 6,D
EXX
INC E ;DE - €¤à¥á áâà ­¨æë ¢ ᯨ᪥
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
EXX
PutLEA1 LD A,(DE)
CP 0x0D
JR Z,PutLineA3
INC DE
CP 0x0A
JR Z,PutLnExitA
PutLnEA1 DJNZ PutLnEA0
JR PutLineA3
PutLineA2 LD (HL),A
INC L
LD A,L
CP C
JR Z,PutLineA3
DJNZ PutASCIIlnLp
PutLineA3 BIT 7,D
JR Z,PutLnA3
RES 7,D
SET 6,D
EXX
INC E ;DE - €¤à¥á áâà ­¨æë ¢ ᯨ᪥
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
EXX
PutLnA3 LD A,(DE)
CP 0x0D
JR NZ,PutLnExitA
INC DE
BIT 7,D
JR Z,PutLnA4
RES 7,D
SET 6,D
EXX
INC E ;DE - €¤à¥á áâà ­¨æë ¢ ᯨ᪥
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
EXX
PutLnA4 LD A,(DE)
CP 0x0A
JR NZ,PutLnExitA
INC DE
PutLnExitA RES 6,D
EXX
LD A,E
EXX
BIT 7,D
RES 7,D
JR Z,.L1
INC A
.L1 RRCA
RRCA
OR D
LD D,A
LD (FETempShift),DE
POP AF
SETPORT WINSP.CPU1,,0
LD A,(IY+CursAddX)
ADD A,0x4E
SUB L
JR Z,PutLnExA
JR C,PutLnExA
LD B,A
LD A,0x20
.L2 LD (HL),A
INC L
DJNZ .L2
PutLnExA LD L,(IY+CursAddX)
LD H,HIGH (TempBuffer)
LD DE,0x0000
LD B,0x4E
LD C,IXH
LD A,COLORP.PANEL + COLORI.FILES
CALL JUMPS.PrnTxtLnNormC
OR A
RET
;[]==========================================================[]
PrnASCIIstring LD HL,TempBuffer
LD DE,LineBuffer
LD A,(IY+LenString)
OR A
JR Z,PrASCIIexit
LD B,A
LD C,0xF0
PrASCIIstr1 LD A,(DE)
INC E
CP 0x09
JR NZ,PrASCIIstr2
PutTabS LD (HL),0x20
INC L
LD A,L
CP C
JR Z,PrASCIIexit
AND 0x07
JR NZ,PutTabS
JR PrASCIIstr3
PrASCIIstr2 LD (HL),A
INC L
PrASCIIstr3 DJNZ PrASCIIstr1
PrASCIIexit LD A,(IY+CursAddX)
ADD A,0x4E
SUB L
JR Z,PrASCIIex1
JR C,PrASCIIex1
LD B,A
LD A,0x20
.L1 LD (HL),A
INC L
DJNZ .L1
PrASCIIex1 CALL FEResCursor
LD L,(IY+CursAddX)
LD H,HIGH (TempBuffer)
LD DE,0x0000
LD B,0x4E
LD A,(IY+CursorY)
ADD A,A
ADD A,A
ADD A,A
ADD A,0x1C
LD C,A
LD A,COLORP.PANEL + COLORI.FILES
CALL JUMPS.PrnTxtLnNormC
LD E,(IY+CursorX)
LD D,(IY+CursorY)
CALL FESetCursor
RET
;[]==========================================================[]
FESearchUp LD B,0xF0
LD A,H
OR A
JR NZ,.SearchUpBeg
OR L
SCF
RET Z
LD B,L
.SearchUpBeg PUSH HL
GETPORT WINSP.CPU1
PUSH AF
LD A,H ;‚뤥«ï¥¬ ­®¬¥à áâà ­¨æë
AND 0xC0
RLCA
RLCA
LD E,A
LD D,HIGH (PagesList)
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
RES 7,H
SET 6,H
LD C,0x00
LD IXL,C
INC C
DEC B
DEC HL
BIT 6,H
JR NZ,.SrchUp0
DEC E
LD A,(DE)
SETPORT WINSP.CPU1,,0
SET 6,H
.SrchUp0 LD A,(HL)
CP 0x0A
JR NZ,FESrchUp1+1
LD A,B
OR A
JR Z,FESrchUpEx
INC C
DEC B
DEC HL
BIT 6,H
JR NZ,FESrchUp1
DEC E
LD A,(DE)
SETPORT WINSP.CPU1,,0
SET 6,H
FESrchUp1 LD A,(HL)
CP 0x0D
JR Z,FESearchUpLp
DEC C
INC B
INC HL
BIT 7,H
JR Z,FESearchUpLp1
INC E
LD A,(DE)
SETPORT WINSP.CPU1,,0
RES 7,H
SET 6,H
JR FESearchUpLp1
FESearchUpLp LD A,B
OR A
JR Z,FESrchUpEx
FESearchUpLp1 DEC HL
BIT 6,H
JR NZ,.SrchUp2
DEC E
LD A,(DE)
SETPORT WINSP.CPU1,,0
SET 6,H
.SrchUp2 LD A,(HL)
CP 0x0A
JR Z,FESrchUpEx
CP 0x0D
JR Z,FESrchUpEx
INC IXL
INC C
DJNZ FESearchUpLp1
FESrchUpEx POP AF
SETPORT WINSP.CPU1,,0
POP HL
LD B,0x00
OR A
SBC HL,BC
RET
;[]----------------------------------------------------------[]
FESearchDown LD B,0xF0
EX DE,HL
LD HL,(FEFileLenght)
OR A
SBC HL,DE
EX DE,HL
RET C
LD A,D
OR A
JR NZ,.SearchDnBeg
OR E
SCF
RET Z
LD B,E
.SearchDnBeg PUSH HL
GETPORT WINSP.CPU1
PUSH AF
LD A,H ;‚뤥«ï¥¬ ­®¬¥à áâà ­¨æë
AND 0xC0
RLCA
RLCA
LD E,A
LD D,HIGH (PagesList)
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
RES 7,H
SET 6,H
LD C,0x00
DEC HL
FESearchDnLp INC C
INC HL
BIT 7,H
JR Z,.SrchDn0
INC E
LD A,(DE)
SETPORT WINSP.CPU1,,0
RES 7,H
SET 6,H
.SrchDn0 LD A,(HL)
CP 0x0D
JR NZ,.SrchE1
INC HL
BIT 7,H
JR Z,.SrchDn1
INC E
LD A,(DE)
SETPORT WINSP.CPU1,,0
RES 7,H
SET 6,H
.SrchDn1 LD A,(HL)
CP 0x0A
JR NZ,.SrchEEx
INC C
JR .SrchEEx
.SrchE1 CP 0x0A
JR Z,.SrchEEx
DJNZ FESearchDnLp
INC HL
BIT 7,H
JR Z,.SrchDnE
INC E
LD A,(DE)
SETPORT WINSP.CPU1,,0
RES 7,H
SET 6,H
.SrchDnE LD A,(HL)
CP 0x0D
JR NZ,.SrchEEx
INC C
INC HL
BIT 7,H
JR Z,.SrchDE1
INC E
LD A,(DE)
SETPORT WINSP.CPU1,,0
RES 7,H
SET 6,H
.SrchDE1 LD A,(HL)
CP 0x0A
JR NZ,.SrchEEx
INC C
.SrchEEx POP AF
SETPORT WINSP.CPU1,,0
POP HL
LD B,0x00
ADD HL,BC
RET
;[]==========================================================[]
GetString LD HL,(FEFileLenght)
LD DE,(LineShift)
OR A
SBC HL,DE
RET C
LD B,0xF0
LD C,B
LD A,H
OR A
JR NZ,GetLine
LD B,L
GetLine LD HL,LineBuffer
LD A,B
OR A
JR Z,GetLnE1
GETPORT WINSP.CPU1
PUSH AF
LD A,D ;‚뤥«ï¥¬ ­®¬¥à áâà ­¨æë
AND 0xC0
RLCA
RLCA
EXX
LD E,A ;DE - €¤à¥á áâà ­¨æë ¢ ᯨ᪥
LD D,HIGH (PagesList)
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
EXX
RES 7,D ;‚ª«.á 0x4000
SET 6,D
GetLnLoop BIT 7,D
JR Z,GetLn1
RES 7,D
SET 6,D
EXX
INC E ;DE - €¤à¥á áâà ­¨æë ¢ ᯨ᪥
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
EXX
GetLn1 LD A,(DE)
INC DE
CP 0x0D
JR Z,GetLnExit
CP 0x0A
JR Z,GetLnExit
LD (HL),A
INC L
DJNZ GetLnLoop
GetLnExit POP AF
SETPORT WINSP.CPU1,,0
GetLnE1 SUB A
LD (IY+ReadyStr),A
LD A,L
LD (IY+LenString),A
LD (IY+PrvLenStr),A
push af
neg
ld b,a
LD A,0x20
.L1 LD (HL),A
INC L
DJNZ .L1
pop af
SUB (IY+StringX)
RET NC
LD A,(IY+StringX)
LD (IY+LenString),A
RET
;[]----------------------------------------------------------[]
PutString LD A,(IY+ReadyStr)
OR A
RET Z
LD A,(IY+LenString)
OR A
JR Z,PutStr2
LD L,A
LD H,HIGH (LineBuffer)
PutStr1 DEC L
LD A,0x20
CP (HL)
JR NZ,PutStr2
DEC (IY+LenString)
LD A,L
OR A
JR NZ,PutStr1
PutStr2
SETPORT WINSP.Y_PORT,0xC0
LD A,(IY+PrvLenStr)
SUB (IY+LenString)
CALL NZ,CorrectFile
PutStrN SUB A
LD (IY+ReadyStr),A
LD HL,LineBuffer
LD A,(IY+LenString)
LD (IY+PrvLenStr),A
OR A
RET Z
LD B,A
GETPORT WINSP.CPU1
PUSH AF
LD DE,(LineShift)
LD A,D ;‚뤥«ï¥¬ ­®¬¥à áâà ­¨æë
AND 0xC0
RLCA
RLCA
EXX
LD E,A ;DE - €¤à¥á áâà ­¨æë ¢ ᯨ᪥
LD D,HIGH (PagesList)
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
EXX
RES 7,D ;‚ª«.á 0x4000
SET 6,D
PutStringLp BIT 7,D
JR Z,PutStr3
RES 7,D
SET 6,D
EXX
INC E ;DE - €¤à¥á áâà ­¨æë ¢ ᯨ᪥
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
EXX
PutStr3 LD A,(HL)
LD (DE),A
INC DE
INC L
DJNZ PutStringLp
POP AF
SETPORT WINSP.CPU1,,0
RET
CorrectFile JR NC,MinusBytes
PlusBytes NEG
LD C,A
LD B,0x00
LD HL,(FEFileLenght)
LD E,L
LD D,H
ADD HL,BC
LD A,H
CP 0xC0
JP NC,NoMemSpace
LD (FEFileLenght),HL
EX DE,HL
PUSH HL
LD BC,(LineShift)
OR A
SBC HL,BC
LD C,L
LD B,H
POP HL
DI
EXX
GETPORT WINSP.CPU0
LD L,A
GETPORT WINSP.CPU1
LD E,A
GETPORT WINSP.CPU2
LD C,A
EXX
LD A,(PagesList)
SETPORT WINSP.CPU0,,0
LD A,(PagesList+1)
SETPORT WINSP.CPU1,,0
LD A,(PagesList+2)
SETPORT WINSP.CPU2,,0
LD A,B
OR A
JR Z,.MovUp1
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.MovUp0 DEC H
DEC D
ACCEL ACCELCMD.COPY
LD A,(HL)
LD (DE),A
ACCEL ACCELCMD.OFF
DEC B
JR NZ,.MovUp0
.MovUp1 LD A,C
OR A
JR Z,MoveUpE
LD (.LenUp),A
SBC HL,BC
EX DE,HL
SBC HL,BC
EX DE,HL
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.LenUp EQU $-1
ACCEL ACCELCMD.COPY
LD A,(HL)
LD (DE),A
ACCEL ACCELCMD.OFF
MoveUpE EXX
LD A,C
SETPORT WINSP.CPU2,,0
LD A,E
SETPORT WINSP.CPU1,,0
LD A,L
SETPORT WINSP.CPU0,,0
EXX
EI
RET
MinusBytes LD C,A
LD B,0x00
LD HL,(LineShift)
PUSH HL
ADD HL,BC
PUSH HL
EX DE,HL
LD HL,(FEFileLenght)
OR A
SBC HL,BC
LD (FEFileLenght),HL
LD BC,(LineShift)
OR A
SBC HL,BC
LD C,L
LD B,H
POP HL
POP DE
DI
EXX
GETPORT WINSP.CPU0
LD L,A
GETPORT WINSP.CPU1
LD E,A
GETPORT WINSP.CPU2
LD C,A
EXX
LD A,(PagesList)
SETPORT WINSP.CPU0,,0
LD A,(PagesList+1)
SETPORT WINSP.CPU1,,0
LD A,(PagesList+2)
SETPORT WINSP.CPU2,,0
LD A,B
OR A
JR Z,MovFl1
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
MovFl0
ACCEL ACCELCMD.COPY
LD A,(HL)
LD (DE),A
ACCEL ACCELCMD.OFF
INC H
INC D
DEC B
JR NZ,MovFl0
MovFl1 LD A,C
OR A
JR Z,MoveFlE
LD (.LenFl),A
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.LenFl EQU $-1
ACCEL ACCELCMD.COPY
LD A,(HL)
LD (DE),A
ACCEL ACCELCMD.OFF
MoveFlE EXX
LD A,C
SETPORT WINSP.CPU2,,0
LD A,E
SETPORT WINSP.CPU1,,0
LD A,L
SETPORT WINSP.CPU0,,0
EXX
EI
RET
NoMemSpace CALL GetString
CALL PrnASCIIstring
CALL PrnASCIIinfo
INC SP
INC SP
RET
;[]==========================================================[]
PrnASCIIinfo LD HL,LineT
LD DE,ColT
LD BC,FreeT
LD A,0x01
REPT 0x04
LD (HL),A
INC HL
LD (DE),A
INC DE
LD (BC),A
INC BC
ENDM
LD (HL),A
LD (DE),A
LD (BC),A
LD HL,(CurLine)
LD DE,LineT
INC HL
CALL JUMPS.ConvNumTxt16
LD DE,ColT
LD A,(IY+CursorX)
ADD A,(IY+CursAddX)
INC A
CALL JUMPS.ConvNumTxt8
LD HL,0xC000
LD DE,FreeT
LD BC,(FEFileLenght)
OR A
SBC HL,BC
CALL JUMPS.ConvNumTxt16
LD HL,ReadyNo
LD A,(IY+ReadyFile)
OR A
JR Z,.L1
LD HL,ReadyYes
.L1 LD DE,0x017E
LD BC,0x0011
LD A,0x80
CALL JUMPS.PrnTxtLnIFF
LD HL,LineT
LD DE,0x01AE
LD BC,0x0011
LD A,0x80
CALL JUMPS.PrnTxtLnIFF
LD HL,ColT
LD DE,0x01F8
LD BC,0x0011
LD A,0x80
CALL JUMPS.PrnTxtLnIFF
LD HL,FreeT
LD DE,0x0248
LD BC,0x0011
LD A,0x80
CALL JUMPS.PrnTxtLnIFF
LD IX,EditVBar
LD HL,(ELines)
LD DE,(EquipLines)
OR A
SBC HL,DE
JR Z,TstLine
LD (ELines),DE
CALL JUMPS.InitScrBar
LD HL,(CurLine)
LD (CLine),HL
CALL JUMPS.PrnVScrBar
JR TstAddX
TstLine LD HL,(CLine)
LD DE,(CurLine)
OR A
SBC HL,DE
JR Z,TstAddX
LD (CLine),DE
CALL JUMPS.PrnVScrBar
TstAddX LD A,(CAddX)
SUB (IY+CursorX)
CP (IY+CursAddX)
RET Z
LD A,(IY+CursorX)
ADD A,(IY+CursAddX)
LD (CAddX),A
LD IX,EditHBar
CALL JUMPS.PrnHScrBar
RET
ReadyNo DEFB 0x01,0
ReadyYes DEFB "*",0
LineT DUPL 6,0
ColT DUPL 6,0
FreeT DUPL 6,0
;[]==========================================================[]
TInsertSymbol CP 0x20
JR NC,InsSymbol
CP 0x08
JP Z,BackSpace
CP 0x0D
JP Z,Enter
CP 0x09
RET NZ
InsSymbol: push af
call Insert
call TCursorRight
pop bc
call AutoBracket
LD A,0x01
LD (IY+ReadyStr),A
LD (IY+ReadyFile),A
jp PrnASCIIstring
AutoBracket: ld a,1
AutoBrackets EQU $-1
and a
ret z
call CanInsertBrackets
ret c
ld a,b
call Subst
db 4
db "(){}[]<>"
cp b
jr nz,Insert
cp '\"' ; #22
ret nz
jp Insert
CanInsertBrackets:
LD A,(IY+LenString) ;InpytSymb
CP 240 ;Max len
RET Z
LD H,HIGH (LineBuffer)
LD L,(IY+StringX)
ld a,(hl)
and a
ret z
cp 32
ret z
cp 9
ret z
scf
ret
Insert EX AF,AF'
LD A,(IY+LenString) ;InpytSymb
CP 240 ;Max len
RET Z
SUB (IY+StringX)
JR C,.NotInsert
JR Z,.NotInsert
;‚¢®¤ ¢ á¥à¥¤¨­ã ⥪áâ 
LD C,A
LD B,0x00
LD L,(IY+LenString)
LD H,HIGH (LineBuffer)
LD E,L
LD D,H
DEC HL
LDDR
.NotInsert LD H,HIGH (LineBuffer)
LD L,(IY+StringX)
EX AF,AF'
LD (HL),A
ld a,(IY+LenString)
inc a
cp l
jr nc,.set
ld a,l
inc a
.set: ld (IY+LenString),a
ret
;[]----------------------------------------------------------[]
;<3B>®¤áâ ­®¢ª  a ¯® ᯨáªã §  call.
;¯¥à¢ë© ¡ ©â ᯨ᪠ ᮤ¥à¦¨â ç¨á«®
;á«¥¤ãîé¨å ¤ «¥¥ ¯ à ®¡à §¥æ-§ ¬¥­¨â¥«ì.
;‚室: a. ‚ë室: a
; BXO„: A,List
; BXO„: A
Subst: ex (sp),hl
push bc
ld b,(hl)
inc hl
ld c,a
Subst1: cp (hl)
inc hl
jr nz,Subst2
ld c,(hl)
Subst2: inc hl
djnz Subst1
ld a,c
pop bc
ex (sp),hl
ret
;[]----------------------------------------------------------[]
;DoubleString
TDoubleString: ld l,(iy+LenString)
ld a,l
and a
adc a,a ;¡ã¤¥â ¯à¥¢ë襭 ¡ãä¥à ¢ 256 ᨬ¢®«®¢
ret c
adc a,2
ret c
ld h,0x00
push hl
push hl
pop bc
ld de,LineBuffer
add hl,de
ld (hl),0x0D
inc hl
ld (hl),0x0A
inc hl
ex hl,de
ld a,c
or a
jr z,.skip
ldir
.skip: pop hl
add hl,hl
inc hl
inc hl
ld (iy+LenString),l
ld a,0x01
ld (iy+ReadyStr),a
ld (iy+ReadyFile),a
call PutString
ld hl,(EquipLines)
inc hl
ld (EquipLines),hl
call FEPrnASCIIpage
jp TCursorDown
;[]----------------------------------------------------------[]
;Enter
Enter LD A,(IY+LenString)
SUB (IY+StringX)
jr nc,.less
xor a
.less: LD C,A
call CalcStartTabs
ld a,l
ld (.tabs),a
push af
inc a
LD L,(IY+LenString)
add a,l
ld e,a
ld d,h
xor a
cp c
jr z,.endLine
LD B,0x00
LD H,HIGH (LineBuffer)
dec l
LDDR
.endLine: pop af
and a
jr z,.skip
ld c,a
ld b,0x00
ld h,HIGH (LineBuffer)
ld l,a
dec l
lddr
.skip: ex hl,de
ld (hl),0x0A
dec hl
ld (hl),0x0D
add a,(IY+LenString)
add a,2
ld (IY+LenString),a
LD A,0x01
LD (IY+ReadyStr),A
LD (IY+ReadyFile),A
CALL PutString
LD HL,(EquipLines)
INC HL
LD (EquipLines),HL
CALL FEPrnASCIIpage
ld a,0
.tabs EQU $-1
LD (IY+StringX),A
and a
call nz,StringXToCursorX
LD (IY+CursorX),a
JP TCursorDown
StringXToCursorX:
ld b,a
ld c,0x00
ld hl,LineBuffer
.loop: ld A,(HL)
INC HL
CP 0x09
JR NZ,.skip
LD A,C
AND 0xF8
ADD A,0x08
LD C,A
DEC C
.skip: INC C
DJNZ .loop
ld a,c
ret
CalcStartTabs: ld hl,LineBuffer
ld a,1
.param EQU $-1
and a
ret z
ld b,(iy+StringX)
.loop: ld a,(hl)
cp 0x20
jr z,.next
cp 0x09
ret nz
.next: inc l
djnz .loop
ret
;[]----------------------------------------------------------[]
Undo: xor a
LD (IY+ReadyStr),A
LD (IY+ReadyFile),A
call GetString
CALL PrnASCIIstring
jp PrnASCIIinfo
;[]----------------------------------------------------------[]
;BackSpace
BackSpace LD A,(IY+StringX)
OR A
RET Z
LD L,A
LD H,HIGH (LineBuffer)
LD E,L
LD D,H
DEC DE
LD A,(IY+LenString)
SUB (IY+StringX)
JR Z,BackSp1
LD C,A
LD B,0x00
LDIR
SUB A
BackSp1 LD (DE),A
INC A
LD (IY+ReadyStr),A
LD (IY+ReadyFile),A
DEC (IY+LenString)
CALL PrnASCIIstring
JP TCursorLeft
;[]----------------------------------------------------------[]
TDeleteString: sub a
ld (IY+LenString),a
ld (IY+StringX),a
ld l,a
ld h,HIGH (LineBuffer)
ld (hl),a
inc a
ld (IY+ReadyStr),A
ld (IY+ReadyFile),A
call PutString
jr AddString
;[]----------------------------------------------------------[]
TDeleteSymbol LD A,(IY+LenString)
SUB (IY+StringX)
JR Z,AddString
LD C,A
LD B,0x00
LD L,(IY+StringX)
LD H,HIGH (LineBuffer)
INC HL
LD E,L
LD D,H
DEC DE
LDIR
SUB A
LD (DE),A
INC A
LD (IY+ReadyStr),A
LD (IY+ReadyFile),A
DEC (IY+LenString)
CALL PrnASCIIstring
CALL PrnASCIIinfo
RET
AddString CALL PutStr2
LD A,(IY+StringX)
CP 0xF0
RET Z
LD HL,(LineShift)
CALL FESearchDown
LD DE,(FEFileLenght)
OR A
SBC HL,DE
RET Z
ADD HL,DE
GETPORT WINSP.CPU1
PUSH AF
LD A,H ;‚뤥«ï¥¬ ­®¬¥à áâà ­¨æë
AND 0xC0
RLCA
RLCA
LD E,A
LD D,HIGH (PagesList)
LD A,(DE) ;’¥ª.áâà ­¨æ 
SETPORT WINSP.CPU1,,0
RES 7,H
SET 6,H
DEC HL
BIT 6,H
JR NZ,AddStr0
DEC E
LD A,(DE)
SETPORT WINSP.CPU1,,0
SET 6,H
AddStr0 LD A,(HL)
CP 0x0D
LD B,0x01
JR Z,AddStr2
CP 0x0A
LD B,0x00
JR NZ,AddStr2
DEC HL
BIT 6,H
JR NZ,AddStr1
DEC E
LD A,(DE)
SETPORT WINSP.CPU1,,0
SET 6,H
AddStr1 LD A,(HL)
CP 0x0D
LD B,0x01
JR NZ,AddStr2
LD B,0x02
AddStr2 POP AF
SETPORT WINSP.CPU1,,0
LD A,B
OR A
RET Z
CALL MinusBytes
CALL PutStrN
LD HL,(EquipLines)
DEC HL
LD (EquipLines),HL
CALL FEPrnASCIIpage
RET
;[]----------------------------------------------------------[]
;Delete word
TDeleteWord LD A,(IY+StringX)
OR A
RET Z
LD C,A
LD B,A
LD L,A
LD H,HIGH (LineBuffer)
LD A,(IY+LenString)
SUB C
LD E,A
PUSH HL
DEC L
DEC C
LD A,(HL)
CP 0x09
JR Z,.next
CP 0x20
JR Z,.next
CP ','
JR Z,.next
CP '.'
JR Z,.next
DEC B
JR Z,.skip
.DWord0 DEC L
DEC C
LD A,(HL)
CP 0x09
JR Z,.DWord2
CP 0x20
JR Z,.DWord2
CP ','
JR Z,.DWord2
CP '.'
JR Z,.DWord2
DJNZ .DWord0
JR .skip
.DWord1 LD A,(HL)
CP 0x09
JR Z,.next
CP 0x20
JR Z,.next
CP ','
JR Z,.next
CP '.'
JR NZ,.DWord2
.next DEC L
DEC C
DJNZ .DWord1
.DWord2 INC L
INC C
.skip LD A,(IY+StringX)
LD (IY+StringX),C
SUB C
LD C,A
EX AF,AF'
LD A,(IY+LenString)
SUB C
LD (IY+LenString),A
LD C,E
LD B,0x00
EX DE,HL
POP HL
LD A,C
OR A
JR Z,.L1
LDIR
.L1 EX DE,HL
EX AF,AF'
LD B,A
SUB A
.L2 LD (HL),A
INC L
DJNZ .L2
INC A
LD (IY+ReadyStr),A
LD (IY+ReadyFile),A
CALL PrnASCIIstring
INC (IY+StringX)
JP TCursorLeft
;[]----------------------------------------------------------[]
;Šãàá®à ¢«¥¢® ­  ®¤­® ¬¥áâ®
TCursorLeft LD A,(IY+StringX)
OR A
RET Z
DEC A
LD (IY+StringX),A
LD C,0x00
JR Z,CursLf3
LD HL,LineBuffer
LD B,A
CursLf1 LD A,(HL)
INC HL
CP 0x09
JR NZ,CursLf2
LD A,C
AND 0xF8
ADD A,0x08
LD C,A
DEC C
CursLf2 INC C
DJNZ CursLf1
CursLf3 LD B,(IY+CursAddX)
CursLf4 LD A,C
SUB (IY+CursAddX)
JR NC,CursLf5
LD A,(IY+CursAddX)
SUB Step
LD (IY+CursAddX),A
JR CursLf4
CursLf5 LD (IY+CursorX),A
LD A,B
CP (IY+CursAddX)
CALL NZ,RefrASCIIpage
CALL FEResCursor
LD E,(IY+CursorX)
LD D,(IY+CursorY)
CALL FESetCursor
CALL PrnASCIIinfo
LD A,(IY+LenString)
SUB (IY+StringX)
RET Z
LD B,A
LD L,(IY+LenString)
LD H,HIGH (LineBuffer)
LD D,0x00
LD A,0x20
CursLf6 DEC HL
CP (HL)
RET NZ
LD (HL),D
DEC (IY+LenString)
DJNZ CursLf6
RET
;[]----------------------------------------------------------[]
;Šãàá®à ¢¯à ¢® ­  ®¤­® ¬¥áâ®
TCursorRight LD A,(IY+CursorX)
ADD A,(IY+CursAddX)
CP 240
RET Z
LD A,(IY+StringX)
CP 240
RET Z
INC A
LD (IY+StringX),A
LD C,0x00
LD HL,LineBuffer
OR A
JR Z,.CursRg3
LD B,A
.CursRg1 LD A,(HL)
INC HL
CP 0x09
JR NZ,.CursRg2
LD A,C
AND 0xF8
ADD A,0x08
LD C,A
DEC C
.CursRg2 INC C
DJNZ .CursRg1
.CursRg3 LD B,(IY+CursAddX)
.CursRg4 LD A,C
SUB (IY+CursAddX)
CP 0x4E
JR C,CursRg5
LD A,(IY+CursAddX)
ADD A,Step
LD (IY+CursAddX),A
JR .CursRg4
CursRg5 LD (IY+CursorX),A
LD A,B
CP (IY+CursAddX)
CALL NZ,RefrASCIIpage
LD A,(IY+LenString)
SUB (IY+StringX)
JR NC,CursRg6
LD L,(IY+LenString)
LD H,HIGH (LineBuffer)
LD (HL),0x20
INC (IY+LenString)
CursRg6 CALL FEResCursor
LD E,(IY+CursorX)
LD D,(IY+CursorY)
CALL FESetCursor
CALL PrnASCIIinfo
RET
;[]----------------------------------------------------------[]
;Word left
TWordLeft LD A,(IY+StringX)
OR A
RET Z
LD C,A
LD B,A
LD L,A
LD H,HIGH (LineBuffer)
.WordLf0 DEC L
DEC C
LD A,(HL)
CP 0x09
JR Z,.next
CP 0x20
JR Z,.next
CP ','
JR Z,.next
CP '.'
JR Z,.next
DJNZ .WordLf0
JR .skip
.WordLf1 LD A,(HL)
CP 0x09
JR Z,.next
CP 0x20
JR Z,.next
CP ','
JR Z,.next
CP '.'
JR NZ,.WordLf2
.next DEC L
DEC C
DJNZ .WordLf1
.WordLf2 INC C
.skip LD (IY+StringX),C
INC (IY+StringX)
JP TCursorLeft
;[]----------------------------------------------------------[]
;Word right
TWordRight LD A,(IY+LenString)
SUB (IY+StringX)
RET Z
LD B,A
LD L,(IY+StringX)
LD H,HIGH (LineBuffer)
LD C,L
.WordRg0 LD A,(HL)
CP 0x09
JR Z,.next
CP 0x20
JR Z,.next
CP ','
JR Z,.next
CP '.'
JR Z,.next
INC L
INC C
DJNZ .WordRg0
JR .WordRg2
.WordRg1 LD A,(HL)
CP 0x09
JR Z,.next
CP 0x20
JR Z,.next
CP ','
JR Z,.next
CP '.'
JR NZ,.WordRg2
.next INC L
INC C
DJNZ .WordRg1
.WordRg2 LD (IY+StringX),C
LD A,C
OR A
JP Z,THomeString
DEC (IY+StringX)
JP TCursorRight
;[]----------------------------------------------------------[]
THomeString ld a,1
.param EQU $-1
and a
jr z,.toZero
LD A,(IY+StringX)
ld e,a
ld l,0
ld d,l
ld c,0x09
ld b,(iy+LenString)
ld h,HIGH (LineBuffer)
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.loop: ld a,(hl)
or a
jr z,.toFirst
cp 0x20
jr z,.next
cp c
jr nz,.firstSym
ld a,7
add a,d
ld d,a
.next: inc l
inc d
djnz .loop
jr .toZero
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.firstSym: ld a,l
cp e
jr c,.skipTabs
jr nz,.skipTabs
.toFirst: and a
jr z,.skipTabs
.toZero: sub a
ld l,a
ld d,a
.skipTabs: LD B,(IY+CursAddX)
ld a,l
LD (IY+StringX),A
LD (IY+CursorX),d
and a
jr nz,.notZero
LD (IY+CursAddX),A
jr .skip
.notZero: cp b
jr nc,.skip
SUB A
LD (IY+CursAddX),A
.skip: LD A,B
CP (IY+CursAddX)
CALL NZ,RefrASCIIpage
CALL FEResCursor
LD E,(IY+CursorX)
LD D,(IY+CursorY)
CALL FESetCursor
CALL PrnASCIIinfo
LD A,(IY+LenString)
SUB (IY+StringX)
RET Z
LD B,A
LD L,(IY+LenString)
LD H,HIGH (LineBuffer)
LD D,0x00
LD A,0x20
HomeStr DEC HL
CP (HL)
RET NZ
LD (HL),D
DEC (IY+LenString)
DJNZ HomeStr
RET
;[]----------------------------------------------------------[]
TEndString LD A,(IY+LenString)
OR A
RET Z
LD B,A
LD L,A
LD H,HIGH (LineBuffer)
LD D,0x00
LD A,0x20
EndStr1 LD (HL),D
DEC HL
CP (HL)
JR NZ,EndStr2
DJNZ EndStr1
EndStr2 LD (IY+LenString),B
LD A,B
CP (IY+StringX)
RET Z
OR A
JP Z,THomeString.toZero
DEC A
LD (IY+StringX),A
JP TCursorRight
;[]----------------------------------------------------------[]
TCursorUp CALL PutString
LD HL,(LineShift)
LD A,H
OR L
RET Z
LD A,(IY+CursorY)
OR A
JP Z,TScrollUp
CALL FESearchUp
LD (LineShift),HL
DEC (IY+CursorY)
LD HL,(CurLine)
DEC HL
LD (CurLine),HL
JP CursorExit
TCursorDown CALL PutString
LD HL,(LineShift)
LD DE,(FEFileLenght)
OR A
SBC HL,DE
RET Z
ADD HL,DE
CALL FESearchDown
LD A,(IY+CursorY)
CP 0x18
JP Z,TScrollDown
LD (LineShift),HL
INC (IY+CursorY)
LD HL,(CurLine)
INC HL
LD (CurLine),HL
JP CursorExit
TScrollUp CALL PutString
LD HL,(FEPageShift)
LD A,H
OR L
JP Z,TCursorUp
CALL FESearchUp
LD (FEPageShift),HL
LD (FETempShift),HL
LD HL,(LineShift)
CALL FESearchUp
LD (LineShift),HL
LD HL,(CurLine)
DEC HL
LD (CurLine),HL
CALL FEResCursor
CALL FEScrollSCRdown
LD B,0x1C
CALL PrnASCIIline
LD E,(IY+CursorX)
LD D,(IY+CursorY)
CALL FESetCursor
JP CursorExit
TScrollDown CALL PutString
LD HL,(FEPageShift)
LD B,0x19
.ScrlDn1 PUSH BC
CALL FESearchDown
POP BC
JP C,TCursorDown
DJNZ .ScrlDn1
LD (FETempShift),HL
LD HL,(FEPageShift)
CALL FESearchDown
LD (FEPageShift),HL
LD HL,(LineShift)
CALL FESearchDown
LD (LineShift),HL
LD HL,(CurLine)
INC HL
LD (CurLine),HL
CALL FEResCursor
CALL FEScrollSCRup
LD B,0xDC
CALL PrnASCIIline
LD E,(IY+CursorX)
LD D,(IY+CursorY)
CALL FESetCursor
CursorExit CALL GetString
LD HL,LineBuffer
LD C,0x00
LD A,(IY+CursorX)
add a,(iy+CursAddX)
OR A
JR Z,CursEx3
LD B,A
CursEx1 LD A,(HL)
INC HL
CP 0x09
JR NZ,CursEx2
LD A,C
AND 0xF8
ADD A,0x08
LD C,A
DEC C
CursEx2 INC C
LD a,c
cp b
jr nc,CursEx3
jr CursEx1
CursEx3: ld (iy+StringX),l
LD B,(IY+CursAddX)
LD (IY+CursAddX),0x00
CursEx4: LD A,C
SUB (IY+CursAddX)
CP 0x4E
JR C,CursEx5
LD A,(IY+CursAddX)
ADD A,Step
LD (IY+CursAddX),A
JR CursEx4
CursEx5 LD (IY+CursorX),A
LD A,B
CP (IY+CursAddX)
CALL NZ,RefrASCIIpage
CALL FEResCursor
LD E,(IY+CursorX)
LD D,(IY+CursorY)
CALL FESetCursor
CALL PrnASCIIinfo
RET
;[]----------------------------------------------------------[]
FETPageUp CALL PutString
LD HL,(FEPageShift)
LD A,H
OR L
JP Z,FETBegFile
LD DE,(CurLine)
LD B,0x19
PageUp1 PUSH DE
PUSH BC
CALL FESearchUp
POP BC
POP DE
JR C,.L1
DEC DE
DJNZ PageUp1
.L1 LD (FEPageShift),HL
LD (CurLine),DE
JR PageExit
TPageDown CALL PutString
LD HL,(FEPageShift)
LD DE,(CurLine)
LD B,0x19
PageDn1 PUSH DE
PUSH BC
CALL FESearchDown
POP BC
POP DE
JP C,FETEndFile
INC DE
DJNZ PageDn1
LD BC,(FEFileLenght)
OR A
SBC HL,BC
JP Z,FETEndFile
ADD HL,BC
LD (FEPageShift),HL
LD (CurLine),DE
PageExit LD A,(IY+CursorY)
OR A
JR Z,PageEx3
LD B,A
PageEx1 PUSH HL
PUSH BC
CALL FESearchDown
POP BC
POP DE
JR C,PageEx2
LD E,L
LD D,H
DJNZ PageEx1
DEC B
PageEx2 INC B
LD A,(IY+CursorY)
SUB B
LD (IY+CursorY),A
LD HL,(CurLine)
LD A,L
SUB B
LD L,A
LD A,H
SBC A,0x00
LD H,A
LD (CurLine),HL
EX DE,HL
PageEx3 LD (LineShift),HL
NewPage CALL GetString
LD HL,LineBuffer
LD C,0x00
LD A,(IY+StringX)
OR A
JR Z,PagePr3
LD B,A
PagePr1 LD A,(HL)
INC HL
CP 0x09
JR NZ,PagePr2
LD A,C
AND 0xF8
ADD A,0x08
LD C,A
DEC C
PagePr2 INC C
DJNZ PagePr1
PagePr3 LD (IY+CursAddX),0x00
PagePr4 LD A,C
SUB (IY+CursAddX)
CP 0x4E
JR C,PagePr5
LD A,(IY+CursAddX)
ADD A,Step
LD (IY+CursAddX),A
JR PagePr4
PagePr5 LD (IY+CursorX),A
CALL FEPrnASCIIpage
RET
;[]----------------------------------------------------------[]
FETBegFile CALL PutString
LD HL,(LineShift)
LD A,H
OR L
RET Z
LD HL,0x0000
LD (FEPageShift),HL
LD (LineShift),HL
LD (CurLine),HL
LD (IY+CursorY),L
JP NewPage
FETEndFile CALL PutString
LD HL,(FEPageShift)
LD B,0x19
EndFl1 PUSH BC
CALL FESearchDown
POP BC
JR C,EndFile1
DJNZ EndFl1
LD HL,(FEFileLenght)
LD B,0x19
EndFl2 PUSH BC
CALL FESearchUp
POP BC
DJNZ EndFl2
LD (FEPageShift),HL
LD (IY+CursorY),0x18
EndFlEx LD HL,(FEFileLenght)
CALL FESearchUp
LD (LineShift),HL
LD HL,(EquipLines)
DEC HL
LD (CurLine),HL
JP NewPage
EndFile1 LD A,0x18
SUB B
CP (IY+CursorY)
RET Z
LD (IY+CursorY),A
LD HL,(FEFileLenght)
CALL FESearchUp
LD (LineShift),HL
LD HL,(EquipLines)
DEC HL
LD (CurLine),HL
JP NewPage
;[]----------------------------------------------------------[]
TNewCrPos PUSH HL
PUSH DE
CALL PutString
POP DE
POP HL
SRL H
RR L
SRL H
RR L
SRL H
RR L
LD A,E
SUB 0x1C
SRL A
SRL A
SRL A
LD D,A
LD E,L
LD HL,(FEPageShift)
OR A
JR Z,NewPos2
LD B,A
NewPos1 PUSH DE
PUSH BC
CALL FESearchDown
POP BC
POP DE
JP C,FETEndFile
DJNZ NewPos1
NewPos2 LD (LineShift),HL
LD HL,(CurLine)
LD A,D
SUB (IY+CursorY)
LD (IY+CursorY),D
LD C,A
LD B,0x00
JR NC,.L1
DEC B
.L1 ADD HL,BC
LD (CurLine),HL
SUB A
LD (IY+StringX),A
PUSH DE
CALL GetString
POP DE
LD C,0x00
LD A,E
ADD A,(IY+CursAddX)
JR Z,NewPos6
LD E,A
LD A,(IY+LenString)
OR A
JR Z,NewPos6
LD B,A
LD HL,LineBuffer
NewPos3 LD A,(HL)
INC L
CP 0x09
JR NZ,NewPos4
LD A,C
AND 0xF8
ADD A,0x08
LD C,A
DEC C
NewPos4 INC C
LD A,C
CP E
JR NC,NewPos5
DJNZ NewPos3
NewPos5 LD (IY+StringX),L
LD A,(IY+LenString)
SUB L
JR NC,NewPos6
NEG
LD B,A
LD A,0x20
.L2 LD (HL),A
INC L
DJNZ .L2
LD (IY+LenString),L
NewPos6 LD A,C
SUB (IY+CursAddX)
LD (IY+CursorX),A
CALL FEResCursor
LD E,(IY+CursorX)
LD D,(IY+CursorY)
CALL FESetCursor
CALL PrnASCIIinfo
CALL JUMPS.ResFire
RET