; LAST UPDATE: 24.06.2025 savelij ;[]----------------------------------------------------------[] ReadDIR BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) IF TREE_REZID JP NZ,RESIDENT.ReadTree ELSE JP NZ,ReadTreeR ENDIF GETPORT WINSP.CPU3 PUSH AF BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) LD A,(RAMPAGES.LEFTPANEL) JR Z,.L1 LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU3,,0 PUSH IY POP HL LD BC,PANEL.EFL ADD HL,BC LD B,PANEL.FILEMASK - PANEL.EFL .L5 LD (HL),0 INC HL DJNZ .L5 BIT SORTFLAG.B_FILTER,(IY + PANEL.SORTFLAG) JR NZ,.L2 LD HL,NORMmask .L2 LD DE,FILEmask LD C,MASK_SIZE LDIR LD IX,0x0000 LD HL,CPU3 LD (AdrNxtFile),HL LD B,0x08 SUB A .L3 LD (HL),A INC HL DJNZ .L3 CALL FindFILES LD E,IXL LD D,IXH LD HL,(AdrNxtFile) LD B,0x08 SUB A .L4 LD (HL),A INC HL DJNZ .L4 POP AF SETPORT WINSP.CPU3,,0 LD (IY + PANEL.EFL),E ;EQUIP FIL LD (IY + PANEL.EFH),D LD A,(IY + PANEL.SORTFLAG) AND SORTFLAG.MASK JP NZ,SortDIR RET AdrNxtFile DEFW 0x0000 FileAtribut DB DIR.M_Archive + \ DIR.M_Dir + \ DIR.M_System + \ DIR.M_Hidden + \ DIR.M_ReadOnly NORMmask DEFB "*.*" DB MASK_SIZE - STRLEN("*.*") DUP 0 FILEmask DB MASK_SIZE DUP 0 FindFILES BIT SORTFLAG.B_FILTER,(IY + PANEL.SORTFLAG) JR NZ,FindFILESm LD HL,FILEmask LD DE,WorkBuffer LD A,(FileAtribut) PUSH IY PUSH IX PUSH DE SPDSS DSSF.F_FIRST,0 POP HL POP IX POP IY RET C FndFILE CALL InsFileInfo RET C LD DE,WorkBuffer PUSH IY PUSH IX PUSH DE SPDSS DSSF.F_NEXT POP HL POP IX POP IY JR NC,FndFILE RET FindFILESm LD HL,NORMmask LD DE,WorkBuffer LD A,(FileAtribut) AND DIR.M_Archive + \ DIR.M_Dir + \ DIR.M_System + \ DIR.M_Hidden + \ DIR.M_ReadOnly PUSH IY PUSH IX PUSH DE SPDSS DSSF.F_FIRST,0 POP HL POP IX POP IY RET C FFILEm1 LD A,(WorkBuffer + FFIRST.Attr);+0x20) AND DIR.M_Dir;0x10 CALL NZ,InsFileInfo RET C LD DE,WorkBuffer PUSH IY PUSH IX PUSH DE SPDSS DSSF.F_NEXT POP HL POP IX POP IY JR NC,FFILEm1 LD HL,FILEmask LD DE,WorkBuffer LD A,(FileAtribut) AND DIR.M_Archive + \ DIR.M_System + \ DIR.M_Hidden + \ DIR.M_ReadOnly PUSH IY PUSH IX PUSH DE SPDSS DSSF.F_FIRST,0 POP HL POP IX POP IY RET C FFILEm2 CALL InsFileInfo RET C LD DE,WorkBuffer PUSH IY PUSH IX PUSH DE SPDSS DSSF.F_NEXT POP HL POP IX POP IY JR NC,FFILEm2 RET InsFileInfo EX DE,HL LD HL,(AdrNxtFile) LD BC,FileHDR.SIZE ADD HL,BC SBC HL,BC EX DE,HL RET C SUB A LD (DE),A INC DE PUSH HL LD BC,FFIRST.Attr;0x20 ADD HL,BC LD B,(HL) ; FFIRST.Attr INC HL LD A,B EX AF,AF' LD A,(HL) ; FFIRST.Name INC HL LD C,(HL) ; FFIRST.Name + 1 DEC HL ; проверка на поддиректорию CP '.' JR NZ,InsF1 LD A,' ' SUB C JR NZ,InsF1 ; пропуск если имя "." InsFext POP HL OR A RET InsF1 BIT DIR.B_Dir,B ; директория или файл? JR NZ,InsF2 ; это файл OR A BIT SORTFLAG.B_EXEC,(IY + PANEL.SORTFLAG) CALL NZ,TestExe JR C,InsFext IF CORR_FILENAME LD B,DIR.Name_Size .L1 LD A,(HL) CALL CorrBigChar LD (DE),A INC HL INC DE DJNZ .L1 LD A,0x01 LD (DE),A INC DE LD B,DIR.Ext_Size .L2 LD A,(HL) CALL CorrBigChar LD (DE),A INC HL INC DE DJNZ .L2 JR InsF3 ENDIF ; CORR_FILENAME ; это дира InsF2 LD BC,DIR.Name_Size LDIR LD A,0x01 LD (DE),A INC DE LD C,DIR.Ext_Size LDIR InsF3 SUB A LD (DE),A INC DE EX AF,AF' LD (DE),A ; DIR.Attr INC DE POP HL PUSH HL LD BC,DIR.FileSize ADD HL,BC LD C,DIR.FileSize_Size LDIR POP HL PUSH HL LD C,DIR.WrtDate ADD HL,BC LD A,(HL) AND 0x1F ; Число LD (DE),A INC DE LD C,(HL) INC HL LD B,(HL) LD H,B LD L,C ADD HL,HL ADD HL,HL ADD HL,HL LD A,H AND 0x0F ; Месяц LD (DE),A INC DE LD A,B SRL A ADD A,80 .L1 SUB 100 JR NC,.L1 ADD A,100 ; Год LD (DE),A INC DE POP HL LD BC,DIR.WrtTime ADD HL,BC LD C,(HL) INC HL LD B,(HL) LD A,B AND 0xF8 RRA RRA RRA LD (DE),A ; Часы INC DE LD H,B LD L,C ADD HL,HL ADD HL,HL ADD HL,HL LD A,H AND 0x3F LD (DE),A ; Минуты INC DE LD (AdrNxtFile),DE INC IX RET TestExe PUSH HL LD A,L ADD A,8 LD L,A JR NC,.L1 INC H .L1 LD A,(HL) INC HL CP 'E' JR NZ,TestExe1 LD A,(HL) INC HL CP 'X' JR NZ,TestExe1 LD A,(HL) CP 'E' JR NZ,TestExe1 POP HL OR A RET TestExe1 POP HL PUSH HL LD A,L ADD A,8 LD L,A JR NC,.L1 INC H .L1 LD A,(HL) INC HL CP 'T' JR NZ,TestExeC LD A,(HL) INC HL CP 'R' JR NZ,TestExeC LD A,(HL) CP 'D' JR NZ,TestExeC POP HL OR A RET TestExeC POP HL SCF RET IF CORR_FILENAME ; Процедура коррекции буквы к маленькой букве CorrBigChar: CP 'A' RET C CP 'Z' + 1 JR NC,.CheckRUS .Dec: ADD A,0x20 RET .CheckRUS: CP 'А' RET C CP 'П'+1 JR C,.Dec .BGUPPER: CP 'Р' RET C CP 'Я' + 1 JR NC,.HGUPPER ADD A,0x50 RET .HGUPPER: CP 'Ё' ; русская буква ё, код #F1 RET NZ INC A RET ; Процедура коррекции буквы к большой букве CorrSmallChar CP 'a' RET C CP 'z' + 1 JR NC,.CorrCh2 RES 5,A RET .CorrCh2 CP 0xA0 RET C CP 0xB0 JR NC,.CorrCh3 SUB 0x20 RET .CorrCh3 CP 0xE0 RET C SUB 0x50 RET ENDIF ; CORR_FILENAME ;[]----------------------------------------------------------[] SortDIR GETPORT WINSP.CPU1 LD C,A GETPORT WINSP.CPU3 LD B,A PUSH BC BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD A,(RAMPAGES.LEFTPANEL) JR Z,.L1 LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 LD A,(RAMPAGES.BuffPg3) SETPORT WINSP.CPU3,,0 LD HL,CPU3 LD (EndSort),HL SUB A LD (HL),A INC HL LD (HL),A LD (BegSort),HL LD A,(IY + PANEL.SORTFLAG) RRA LD HL,SortABC ; сортировка по Name CTRL+F3 JR C,.SortBeg RRA LD HL,SortExt ; сортировка по Extension CTRL+F4 JR C,.SortBeg RRA LD HL,SortData ; сортировка по Date CTRL+F5 JR C,.SortBeg LD HL,SortSize ; сортировка по Size CTRL+F6 .SortBeg LD (.Scall1),HL LD (.Scall2),HL LD (.Scall3),HL LD IX,CPU1 + 1 LD HL,CPU1 + 1 ; проверка что в поддиректории BIT DIR.B_Dir,(IX + FileHDR.Attr - 1) JR Z,.SortStart ; если поддиректория то проверка на имя ".." LD A,(HL) CP '.' JR NZ,.SortStart INC HL LD A,(HL) DEC HL CP '.' JR NZ,.SortStart ; заносим диру ".." PUSH HL CALL 0 .Scall3 EQU $-2 LD BC,FileHDR.SIZE LD HL,CPU3 ADD HL,BC LD (EndSort),HL LD (HL),0 INC HL LD (HL),0 LD (BegSort),HL POP HL ADD IX,BC ADD HL,BC ; начало сортировки всего остального .SortStart PUSH IX PUSH HL .SortDIRlp1 LD A,(HL) OR A JR Z,.SortDIRnxt BIT DIR.B_Dir,(IX + FileHDR.Attr - 1) PUSH HL CALL NZ,0x0000 ; проверка для DIR .Scall1 EQU $-2 POP HL LD BC,FileHDR.SIZE ADD IX,BC ADD HL,BC JR .SortDIRlp1 .SortDIRnxt LD HL,(EndSort) SUB A LD (HL),A INC HL LD (HL),A LD (BegSort),HL POP HL POP IX .SortDIRlp2 LD A,(HL) OR A JR Z,.SortDIRext BIT DIR.B_Dir,(IX + FileHDR.Attr - 1) PUSH HL CALL Z,0x0000 ; проверка для файла .Scall2 EQU $-2 POP HL LD BC,FileHDR.SIZE ADD IX,BC ADD HL,BC JR .SortDIRlp2 .SortDIRext LD HL,(EndSort) LD B,0x08 SUB A .L3 LD (HL),A INC HL DJNZ .L3 GETPORT WINSP.CPU1 LD (RAMPAGES.BuffPg3),A GETPORT WINSP.CPU3 BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD HL,RAMPAGES.LEFTPANEL JR Z,.L2 LD HL,RAMPAGES.RIGHTPANEL .L2 LD (HL),A POP BC LD A,B SETPORT WINSP.CPU3,,0 LD A,C SETPORT WINSP.CPU1,,0 RET BegSort DEFW 0x0000 EndSort DEFW 0x0000 ; сортировка по Name CTRL+F3 SortABC EX DE,HL LD HL,(BegSort) .Sabc1 LD A,(HL) OR A JP Z,SortDIRins PUSH DE PUSH HL LD B,12 .Sabc2 LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.Sabc3 INC DE INC HL DJNZ .Sabc2 .Sabc3 POP HL POP DE JP C,SortDIRins LD BC,FileHDR.SIZE ADD HL,BC JR .Sabc1 ; сортировка по Extension CTRL+F4 SortExt EX DE,HL LD HL,(BegSort) .Sext1 LD A,(HL) OR A JP Z,SortDIRins PUSH DE PUSH HL LD BC,0x0009 ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL LD B,03 .Sext2 LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.Sext4 INC DE INC HL DJNZ .Sext2 POP HL POP DE PUSH DE PUSH HL LD B,8 .Sext3 LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.Sext4 INC DE INC HL DJNZ .Sext3 .Sext4 POP HL POP DE JP C,SortDIRins LD BC,FileHDR.SIZE ADD HL,BC JR .Sext1 ; сортировка по Date CTRL+F5 SortData EX DE,HL LD HL,(BegSort) .Sdata1 LD A,(HL) OR A JP Z,SortDIRins PUSH DE PUSH HL LD BC,0x0014 ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SdataE DEC DE DEC HL LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SdataE DEC DE DEC HL LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SdataE INC HL INC HL INC HL INC DE INC DE INC DE LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SdataE INC DE INC HL LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SdataE POP HL POP DE PUSH DE PUSH HL LD B,12 .Sdata2 LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SdataE INC DE INC HL DJNZ .Sdata2 .SdataE POP HL POP DE JR C,SortDIRins LD BC,FileHDR.SIZE ADD HL,BC JR .Sdata1 ; сортировка по Size CTRL+F6 SortSize EX DE,HL LD HL,(BegSort) .Ssize1 LD A,(HL) OR A JR Z,SortDIRins PUSH DE PUSH HL LD BC,0x0011 ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SsizeE DEC DE DEC HL LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SsizeE DEC DE DEC HL LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SsizeE DEC DE DEC HL LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SsizeE POP HL POP DE PUSH DE PUSH HL LD B,12 .Ssize2 LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JR NZ,.SsizeE INC DE INC HL DJNZ .Ssize2 .SsizeE POP HL POP DE JR C,SortDIRins LD BC,FileHDR.SIZE ADD HL,BC JR .Ssize1 SortDIRins DEC HL DEC DE PUSH DE PUSH HL EX DE,HL LD HL,(EndSort) PUSH HL OR A SBC HL,DE LD B,H LD C,L POP DE LD HL,FileHDR.SIZE ADD HL,DE LD (EndSort),HL SUB A LD (HL),A INC HL LD (HL),A DEC HL EX DE,HL LD A,B OR C CALL NZ,MoveBytesUp POP DE POP HL LD BC,FileHDR.SIZE LDIR RET