; 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 ;Процедура отчистки нижней области экрана 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 ;[]----------------------------------------------------------[] ;Процедура печати тек.строки в буфер и на экран 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 ;[]----------------------------------------------------------[] ;Подстановка a по списку за call. ;первый байт списка содержит число ;следующих далее пар образец-заменитель. ;Вход: a. Выход: a ; BXOД: A,List ; BЫXOД: 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