; LAST UPDATE: 25.03.2025 savelij ;[]---------------------------------------------------------[] PrnASCIIpage LD HL,PrintVProc PUSH HL LD HL,(FileShift) LD (TempShift),HL LD HL,(FileShift+2) LD (TempShift+2),HL LD B,0x1C PrnASCIIlp PUSH BC CALL PutASCIIline ;Выводим строку в буф и на экран POP BC JR C,FillASCIIdn ;CY-Закончились байты для печати LD A,B ADD A,0x08 LD B,A CP 0xE4 JR NZ,PrnASCIIlp LD HL,(TempShift) LD (FVNextShift),HL LD HL,(TempShift+2) LD (FVNextShift+2),HL SUB A LD (EmptyLines),A RET ;Процедура отчистки нижней области экрана FillASCIIdn LD A,0xE4 SUB B LD (FLenASC),A JR Z,FASCIIe ;Z-нет отчистки LD A,B LD (FPosASC),A MAKEWINDOW WINSUBOBJ.WOBIND W_FILL 0,0,640,0,COLORI.PANEL W_END FLenASC EQU $-4 FPosASC EQU $-8 FASCIIe LD HL,(TempShift) LD (FVNextShift),HL LD HL,(TempShift+2) LD (FVNextShift+2),HL LD A,(FLenASC) SRL A SRL A SRL A LD (EmptyLines),A RET ;Процедура печати тек.строки в буфер и на экран PutASCIIline LD IXH,B LD A,(ASCIImode) OR A LD C,0x50 JR Z,.L1 LD C,0xF0 .L1 PUSH BC LD HL,(FileLenght) LD BC,(TempShift) SBC HL,BC EX DE,HL LD HL,(FileLenght+2) LD BC,(TempShift+2) SBC HL,BC POP BC RET C LD B,0xF0 JR NZ,PutLine LD A,D OR A JR NZ,PutLine OR E SCF RET Z LD B,E PutLine LD HL,LineBuffer GETPORT WINSP.CPU1 PUSH AF CALL InitFPages PutLnLoop CALL TestFPages LD A,(DE) INC DE CP 0x0D JR NZ,PutLine1 CALL TestFPages LD A,(DE) CP 0x0A JR NZ,PutLnExit INC DE JR PutLnExit PutLine1 CP 0x0A JR Z,PutLnExit CP 0x09 JR NZ,PutLine2 PutTab LD (HL),0x20 INC L LD A,L CP C JR Z,PutLineWrap;PutLine3 AND 0x07 JR NZ,PutTab JR PutLine3 PutLine2 CALL DecodeSymbol ; заменяется на NOP, если не нужна перекодировка LD (HL),A LD A,L CP C JR Z,PutLineWrap;PutLine3 INC L PutLine3 DJNZ PutLnLoop INC DE PutLineWrap: dec de CALL TestFPages LD A,(DE) CP 0x0D JR NZ,PutLnExit INC DE CALL TestFPages LD A,(DE) CP 0x0A JR NZ,PutLnExit INC DE PutLnExit POP AF SETPORT WINSP.CPU1,,0 CALL GetFPages LD A,(ASCIImode) OR A JR NZ,PutLineUWR LD A,0x50 SUB L JR Z,PutLine4 LD B,A LD A,0x20 .L1 LD (HL),A INC L DJNZ .L1 PutLine4 LD HL,LineBuffer LD DE,0x0000 LD B,0x50 LD C,IXH LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC OR A RET DecodeSymbol: CP 0x80 RET C PUSH HL SUB 0x80 LD HL,Table866 .table EQU $-2 ADD A,L LD L,A JR NC,.L1 INC H .L1 LD A,(HL) POP HL RET PutLineUWR LD C,IXH LD A,L LD (SaveUW),A LD A,(ASCIIaddX) ADD A,0x50 SUB L JR Z,PutLnUW1 JR C,PutLnUW1 LD B,A LD A,0x20 .L1 LD (HL),A INC L DJNZ .L1 PutLnUW1 LD E,0x00 LD B,0x50 LD H,HIGH (LineBuffer) LD A,(ASCIIaddX) LD L,A ;смещение от начала строки OR A JR Z,PutLnUW2 PUSH HL PUSH BC LD HL,SpaceLeft LD D,0x00 LD B,0x01 LD A,COLORP.PANEL + COLORI.YELLOW ;(Yellow) CALL JUMPS.PrnTxtLnNormC POP BC POP HL INC L DEC B LD A,(ASCIIaddX) LD E,0x08 PutLnUW2 LD D,A LD A,0x00 SaveUW EQU $-1 SUB D JR C,PutLnUW3 CP 0x51 JR C,PutLnUW3 PUSH HL PUSH DE PUSH BC LD HL,SpaceRight LD DE,0x0278 LD B,0x01 LD A,COLORP.PANEL + COLORI.YELLOW ;(Yellow) CALL JUMPS.PrnTxtLnNormC POP BC POP DE POP HL DEC B PutLnUW3 LD D,0x00 LD A,COLORP.PANEL + COLORI.FILES ;(Yellow) CALL JUMPS.PrnTxtLnNormC OR A RET SpaceLeft DEFB 0x1B SpaceRight DEFB 0x1A ;[]==========================================================[] ChCodePage: LD HL,ViewerBegin EX (SP),HL LD A,(CodePage) INC A CP 3 JR C,.L1 XOR A .L1 LD (CodePage), A RET ;[]==========================================================[] ChASCIImode LD HL,ViewerBegin EX (SP),HL LD A,(ASCIImode) XOR 0x01 LD (ASCIImode),A RET Z SUB A LD (ASCIIaddX),A RET ;[]----------------------------------------------------------[] ScrollLeft LD A,(ASCIImode) OR A RET Z LD A,(ASCIIaddX) OR A RET Z DEC A LD (ASCIIaddX),A CALL PrnASCIIpage RET ;[]----------------------------------------------------------[] ScrollRght LD A,(ASCIImode) OR A RET Z LD A,(ASCIIaddX) CP 0xA0 RET Z INC A LD (ASCIIaddX),A CALL PrnASCIIpage RET ;[]----------------------------------------------------------[] THome LD A,(ASCIImode) OR A RET Z LD A,(ASCIIaddX) OR A RET Z SUB A LD (ASCIIaddX),A CALL PrnASCIIpage RET ;[]----------------------------------------------------------[] TEnd LD A,(ASCIImode) OR A RET Z LD A,(ASCIIaddX) CP 0xA0 RET Z LD A,0xA0 LD (ASCIIaddX),A CALL PrnASCIIpage RET ;[]----------------------------------------------------------[] TLineUpMs CALL TLineUp RET C LD B,0x0A TUpMs1 PUSH BC SPMOUSE MOUSEF.READ_STATE POP BC BIT 0,A RET Z HALT DJNZ TUpMs1 TUpMs2 CALL TLineUp RET C SPMOUSE MOUSEF.READ_STATE BIT 0,A RET Z JR TUpMs2 TLineUp LD HL,(FileShift) LD DE,(FileShift+2) LD A,H OR L OR D OR E SCF RET Z CALL SearchUp LD (FileShift),HL LD (FileShift+2),DE LD (TempShift),HL LD (TempShift+2),DE LD HL,EmptyLines LD A,(HL) DEC (HL) OR A JR NZ,TLineU1 INC (HL) LD HL,(FVNextShift) LD DE,(FVNextShift+2) CALL SearchUp LD (FVNextShift),HL LD (FVNextShift+2),DE TLineU1 CALL ScrollSCRdown LD B,0x1C CALL PutASCIIline ;Создаем и печатаем строку CALL PrintVProc OR A RET ;[]----------------------------------------------------------[] TLineDwnMs CALL TLineDwn RET C LD B,0x0A TDnMs1 PUSH BC SPMOUSE MOUSEF.READ_STATE POP BC BIT 0,A RET Z HALT DJNZ TDnMs1 TDnMs2 CALL TLineDwn RET C SPMOUSE MOUSEF.READ_STATE BIT 0,A RET Z JR TDnMs2 TLineDwn LD HL,(FVNextShift) LD DE,(FVNextShift+2) LD BC,(FileLenght) OR A SBC HL,BC LD BC,(FileLenght+2) EX DE,HL SBC HL,BC CCF RET C LD HL,(FileShift) LD DE,(FileShift+2) CALL SearchDown LD (FileShift),HL LD (FileShift+2),DE LD HL,(FVNextShift) LD DE,(FVNextShift+2) LD (TempShift),HL LD (TempShift+2),DE CALL ScrollSCRup LD B,0xDC CALL PutASCIIline ;Создаем и печатаем строку LD HL,(TempShift) LD DE,(TempShift+2) LD (FVNextShift),HL LD (FVNextShift+2),DE CALL PrintVProc OR A RET ;[]----------------------------------------------------------[] TPageUpMs CALL TPageUp RET C LD B,0x0A TUpMs1p PUSH BC SPMOUSE MOUSEF.READ_STATE POP BC BIT 0,A RET Z HALT DJNZ TUpMs1p TUpMs2p CALL TPageUp RET C SPMOUSE MOUSEF.READ_STATE BIT 0,A RET Z JR TUpMs2p TPageUp LD HL,(FileShift) LD DE,(FileShift+2) LD A,H OR L OR D OR E SCF RET Z LD B,0x19 TPageU1 PUSH BC CALL SearchUp POP BC JR C,TPageU2 DJNZ TPageU1 TPageU2 LD (FileShift),HL LD (FileShift+2),DE CALL PrnASCIIpage OR A RET ;[]----------------------------------------------------------[] TPageDwnMs CALL TPageDwn RET C LD B,0x0A TDnMs1p PUSH BC SPMOUSE MOUSEF.READ_STATE POP BC BIT 0,A RET Z HALT DJNZ TDnMs1p TDnMs2p CALL TPageDwn RET C SPMOUSE MOUSEF.READ_STATE BIT 0,A RET Z JR TDnMs2p TPageDwn LD HL,(FVNextShift) LD DE,(FVNextShift+2) LD BC,(FileLenght) OR A SBC HL,BC LD BC,(FileLenght+2) EX DE,HL SBC HL,BC CCF RET C LD HL,(FVNextShift) LD (FileShift),HL LD HL,(FVNextShift+2) LD (FileShift+2),HL CALL PrnASCIIpage OR A RET ;[]----------------------------------------------------------[] TBegFile LD HL,JUMPS.ResFire PUSH HL LD HL,(FileShift) LD DE,(FileShift+2) LD A,H OR D OR L OR E RET Z LD HL,0x0000 LD (FileShift),HL LD (FileShift+2),HL CALL PrnASCIIpage RET ;[]----------------------------------------------------------[] TEndFile LD HL,JUMPS.ResFire PUSH HL LD HL,(FVNextShift) LD DE,(FVNextShift+2) LD BC,(FileLenght) OR A SBC HL,BC LD BC,(FileLenght+2) EX DE,HL SBC HL,BC RET NC LD HL,(FileLenght) LD DE,(FileLenght+2) LD B,0x19 TEndFl1 PUSH BC CALL SearchUp POP BC RET C DJNZ TEndFl1 LD (FileShift),HL LD (FileShift+2),DE CALL PrnASCIIpage RET ;[]==========================================================[] SearchUp LD B,0xF0 LD A,D OR E JR NZ,.SearchUpBeg LD A,H OR A JR NZ,.SearchUpBeg OR L SCF RET Z LD B,L .SearchUpBeg GETPORT WINSP.CPU1 PUSH AF PUSH HL PUSH DE LD A,H ;Выделяем номер страницы RLA RL E RLA RL E 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,.L3 LD A,B OR A JR Z,.SrchUpEx INC C DEC B DEC HL BIT 6,H JR NZ,.SrchUp1 DEC E LD A,(DE) SETPORT WINSP.CPU1,,0 SET 6,H .SrchUp1 LD A,(HL) .L3 CP 0x0D JR Z,.SearchUpLp DEC C INC B INC HL BIT 7,H JR Z,.SearchUpLp1 INC E LD A,(DE) SETPORT WINSP.CPU1,,0 RES 7,H SET 6,H JR .SearchUpLp1 .SearchUpLp LD A,B OR A JR Z,.SrchUpEx .SearchUpLp1 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,.SrchUpEx CP 0x0D JR Z,.SrchUpEx CP 0x09 JR NZ,.L1 ld a,7 add a,c ld c,a ld a,7 add a,IXL ld IXL,a ld a,b sub 7 jr z,.SrchUpEx jr c,.SrchUpEx .L1 INC IXL INC C DJNZ .SearchUpLp1 .SrchUpEx POP DE POP HL LD B,0x00 OR A SBC HL,BC LD C,B EX DE,HL SBC HL,BC EX DE,HL POP AF SETPORT WINSP.CPU1,,0 LD A,(ASCIImode) OR A RET NZ LD A,IXL CP 0x51 CCF RET NC LD C,0x50 .SrchUpEx0 ADD HL,BC JR NC,.L2 INC DE .L2 SUB 0x50 CP 0x51 JR NC,.SrchUpEx0 OR A RET ;[]----------------------------------------------------------[] SearchDown LD (SrchHL),HL LD (SrchDE),DE LD A,(ASCIImode) OR A LD B,0x50 JR Z,.L1 LD B,0xF0 .L1 PUSH BC LD C,L LD B,H LD HL,(FileLenght) OR A SBC HL,BC LD C,E LD B,D EX DE,HL LD HL,(FileLenght+2) SBC HL,BC POP BC RET C JR NZ,.SearchDnBeg LD A,D OR A JR NZ,.SearchDnBeg OR E SCF RET Z LD B,E .SearchDnBeg LD HL,0x0000 SrchHL EQU $-2 LD DE,0x0000 SrchDE EQU $-2 GETPORT WINSP.CPU1 PUSH AF PUSH HL PUSH DE LD A,H ;Выделяем номер страницы RLA RL E RLA RL E LD D,HIGH (PagesList) LD A,(DE) ;Тек.страница SETPORT WINSP.CPU1,,0 RES 7,H SET 6,H LD C,0x00 DEC HL SearchDnLp 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 SearchDnLp 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 DE POP HL LD B,0x00 ADD HL,BC LD C,B EX DE,HL ADC HL,BC EX DE,HL POP AF SETPORT WINSP.CPU1,,0 OR A RET Table866: db 0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8 db 0x3F,0x25,0x3F,0x3C,0x3F,0x3F,0x3F,0x3F db 0x3F,0x27,0x27,0x22,0x22,0x07,0x2D,0x2D db 0x3F,0x54,0x3F,0x3E,0x3F,0x3F,0x3F,0x3F db 0xFF,0xF6,0xF7,0x3F,0xFD,0x3F,0xB3,0x15 db 0xF0,0x63,0xF2,0x3C,0xBF,0x2D,0x52,0xF4 db 0xF8,0x2B,0x49,0x69,0x3F,0xE7,0x14,0xFA db 0xF1,0xFC,0xF3,0x3E,0x3F,0x3F,0x3F,0xF5 db 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87 db 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F db 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97 db 0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F db 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7 db 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF db 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7 db 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF ; koi8-r TableKoi: db 0xC4,0xB3,0xDA,0xBF,0xC0,0xD9,0xC3,0xB4 db 0xC2,0xC1,0xC5,0xDF,0xDC,0xDB,0xDD,0xDE db 0xB0,0xB1,0xB2,0xF4,0xFE,0xF9,0xFB,0xF7 db 0xF3,0xF2,0xFF,0xF5,0xF8,0xFD,0xFA,0xF6 db 0xCD,0xBA,0xD5,0xF1,0xD6,0xC9,0xB8,0xB7 db 0xBB,0xD4,0xD3,0xC8,0xBE,0xBD,0xBC,0xC6 db 0xC7,0xCC,0xB5,0xF0,0xB6,0xB9,0xD1,0xD2 db 0xCB,0xCF,0xD0,0xCA,0xD8,0xD7,0xCE,0xFC db 0xEE,0xA0,0xA1,0xE6,0xA4,0xA5,0xE4,0xA3 db 0xE5,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE db 0xAF,0xEF,0xE0,0xE1,0xE2,0xE3,0xA6,0xA2 db 0xEC,0xEB,0xA7,0xE8,0xED,0xE9,0xE7,0xEA db 0x9E,0x80,0x81,0x96,0x84,0x85,0x94,0x83 db 0x95,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E db 0x8F,0x9F,0x90,0x91,0x92,0x93,0x86,0x82 db 0x9C,0x9B,0x87,0x98,0x9D,0x99,0x97,0x9A