; LAST UPDATE: 07.09.2025 savelij ;[]==========================================================[] MarkFileR LD A,(IY+PANEL.FILES_ALL) OR (IY+PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ 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 LD A,HIGH (CPU3) CALL GET_HANDLE_ADR LD E,(HL) ; FileHDR.Flag POP AF SETPORT WINSP.CPU3,,0 BIT FileHDR.B_MARK,E PUSH AF CALL Z,SelectFile POP AF CALL NZ,UnSelectFile CALL CursDown CALL PrnFileInfo LD B,0x07 .L2 PUSH BC SPMOUSE MOUSEF.READ_STATE POP BC BIT 1,A RET Z HALT DJNZ .L2 RET ;[]==========================================================[] SelectFile: LD IXL,0x01 JR UnSelectFile.L1 UnSelectFile: LD IXL,0x00 .L1 GETPORT WINSP.CPU3 PUSH AF BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) LD A,(RAMPAGES.LEFTPANEL) JR Z,.L2 LD A,(RAMPAGES.RIGHTPANEL) .L2 SETPORT WINSP.CPU3,,0 SETPORT WINSP.Y_PORT,0xC0 LD A,HIGH (CPU3) CALL GET_HANDLE_ADR PUSH HL LD DE,FileHDR.Attr ADD HL,DE LD C,(HL) ; FileHDR.Attr (флаги описателя FAT файла) POP HL BIT DIR.B_Dir,C ; это дира? IF MARK_DIR PUSH HL PUSH BC CALL NZ,RESIDENT.CalcDirSize ; измерение размера диры POP BC POP HL ELSE JR NZ,.MrFile1 ; директории копировать не умеем, только файлы ENDIF ; это файл LD B,(HL) ; старое состояние пометки файла LD A,IXL LD (HL),A ; новое состояние пометки файла LD A,C LD DE,WorkBuffer PUSH BC LD BC,FileHDR.SIZE LDIR IF MARK_DIR BIT DIR.B_Dir,A ; файл или дира JR Z,.L8 ; копируем размер в байтах в размер диры LD HL,JUMPS.FILES_BYTES LD DE,WorkBuffer + FileHDR.SizeBytes LD BC,DWORD LDIR ENDIF .L8 POP BC .MrFile1 POP AF SETPORT WINSP.CPU3,,0 IF MARK_DIR = 0 BIT DIR.B_Dir,C RET NZ ; выход если дира ENDIF LD A,B CP IXL RET Z ; выход если старое и новое состояние пометки совпали BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG) JR NZ,.MarkFull ; при кратком показе файлов LD L,(IY+PANEL.CURR_FILE) LD H,(IY+PANEL.CURR_FILE + 1) LD E,L LD D,H ADD HL,HL ADD HL,DE BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) LD DE,PositTABLeft JR Z,.L3 LD DE,PositTABRight .L3 ADD HL,DE LD E,(HL) INC HL LD D,(HL) INC HL LD C,(HL) LD B,0x00 EX DE,HL LD A,IXL OR A PUSH AF LD DE,(COLORP.INVERTPAPER + COLORI.INVERTINK) << 8 | (COLORP.INVERTPAPER + COLORI.INVSELFILES) JR NZ,.L4 LD DE,(COLORP.INVERTPAPER + COLORI.INVSELFILES) << 8 | (COLORP.INVERTPAPER + COLORI.INVERTINK) .L4 LD IX,8 << 8 + 48 DEC HL DEC HL CALL ReplaceColorRectan POP AF JR NZ,.MarkExit1 JR .MarkExit2 ; при полном показе файлов .MarkFull LD L,(IY+PANEL.CURR_FILE) LD H,(IY+PANEL.CURR_FILE + 1) ADD HL,HL ADD HL,HL ADD HL,HL LD BC,0x003F ADD HL,BC LD C,L BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) LD HL,6 JR Z,.L5 LD HL,326 .L5 LD A,IXL OR A PUSH AF LD DE,(COLORP.INVERTPAPER + COLORI.INVERTINK) << 8 | (COLORP.INVERTPAPER + COLORI.INVSELFILES) JR NZ,.L6 LD DE,(COLORP.INVERTPAPER + COLORI.INVSELFILES) << 8 | (COLORP.INVERTPAPER + COLORI.INVERTINK) .L6 LD IX,8 << 8 + 146 CALL ReplaceColorRectan POP AF JR Z,.MarkExit2 ; установка выбор файла .MarkExit1 LD IX,WorkBuffer LD L,(IY + PANEL.FILES_MARK) LD H,(IY + PANEL.FILES_MARK + 1) INC HL LD (IY + PANEL.FILES_MARK),L LD (IY + PANEL.FILES_MARK + 1),H ; обновление количества помеченных файлов LD L,(IX + FileHDR.SizeBytes) LD H,(IX + FileHDR.SizeBytes + 1) LD E,(IY + PANEL.BYTES_MARK) LD D,(IY + PANEL.BYTES_MARK + 1) XOR A ; [ ] fat32 ADD HL,DE LD (IY + PANEL.BYTES_MARK),L LD (IY + PANEL.BYTES_MARK + 1),H ; обновление размера помеченных файлов биты 15-0 LD L,(IX + FileHDR.SizeBytes + 2) LD H,(IX + FileHDR.SizeBytes + 3) ; [ ] fat32 LD E,(IY + PANEL.BYTES_MARK + 2) LD D,(IY + PANEL.BYTES_MARK + 3) ADC HL,DE ; [ ] fat32 ADC A,(IY + PANEL.BYTES_MARK_H) LD (IY + PANEL.BYTES_MARK_H),A ; обновление размера помеченных файлов биты 32-39 LD (IY + PANEL.BYTES_MARK + 2),L LD (IY + PANEL.BYTES_MARK + 3),H ; обновление размера помеченных файлов биты 31-15 RET ; снятие выбора файла .MarkExit2 LD IX,WorkBuffer LD L,(IY + PANEL.FILES_MARK) LD H,(IY + PANEL.FILES_MARK + 1) DEC HL LD (IY + PANEL.FILES_MARK),L LD (IY + PANEL.FILES_MARK + 1),H LD L,(IY + PANEL.BYTES_MARK) LD H,(IY + PANEL.BYTES_MARK + 1) LD E,(IX + FileHDR.SizeBytes) LD D,(IX + FileHDR.SizeBytes + 1) XOR A SBC HL,DE LD (IY + PANEL.BYTES_MARK),L LD (IY + PANEL.BYTES_MARK + 1),H LD L,(IY + PANEL.BYTES_MARK + 2) LD H,(IY + PANEL.BYTES_MARK + 3) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) SBC HL,DE ; [ ] fat32 ADC A,(IY + PANEL.BYTES_MARK_H) LD (IY + PANEL.BYTES_MARK_H),A LD (IY + PANEL.BYTES_MARK + 2),L LD (IY + PANEL.BYTES_MARK + 3),H RET ;[]==========================================================[] UnMarkGroupR: CALL ResInvert UnMarkGroupRN: LD HL,SetInvert PUSH HL SUB A JR SelectGroup MarkGroupR: CALL ResInvert MarkGroupRN: LD HL,SetInvert PUSH HL LD A,0x01 SelectGroup: LD (SelMode),A LD A,(IY+PANEL.FILES_ALL) OR (IY+PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ MAKEWINDOW WINSUBOBJ.STORE W_MAIN 208,81,224,62 W_FILL 4,2,216,10,COLORI.BLACK W_TEXT 82,3,COLORI.WHITE,"Select mask" W_BUTTON 32,42,72,14 W_TEXT 60,45,COLORP.HIGHGRAY,"Ok" W_BUTTON 120,42,72,14 W_TEXT 140,45,COLORP.HIGHGRAY,"Cancel" W_TEXT 10,25,COLORP.HIGHGRAY,"Mark mask:" W_BORDER 70,22,134,12 W_FILL 72,23,130,10,COLORI.WHITE W_END LD IX,SMaskStr LD HL,REZ3TAB.SMaskTab CALL InputLine WINDOWCLOSE RET C LD A,(MaskLen) OR A RET Z LD B,A LD HL,CrSMask CorMask IF CORR_FILENAME LD A,(HL) CALL CorrBigChar LD (HL),A ENDIF INC HL DJNZ CorMask LD HL,CrSMask LD DE,SelMask CALL MakeMask JR C,MarkGNext LD HL,NORMmask LD DE,CrSMask LD BC,MASK_SIZE LDIR LD HL,CrSMask LD DE,SelMask JP MakeMask MarkGNext 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 ;!FIXIT проверить для это оно или нет SAFE_PORTY SETPORT WINSP.Y_PORT,0xC0 LD IX,CPU3 LD HL,0xC000 LD DE,SelMask EX AF,AF' ; [ ] fat32 EXX LD L,(IY+PANEL.BYTES_MARK) LD H,(IY+PANEL.BYTES_MARK + 1) LD E,(IY+PANEL.BYTES_MARK + 2) LD D,(IY+PANEL.BYTES_MARK + 3) LD A,(IY+PANEL.BYTES_MARK_H) ; [ ] FAT32 LD C,(IY+PANEL.FILES_MARK) LD B,(IY+PANEL.FILES_MARK + 1) EXX EX AF,AF' ; [ ] fat32 PUSH IY LD IYL,0x00 SelMode EQU $-1 LD IYH,0x00 Select1 PUSH DE BIT DIR.B_Dir,(IX + FileHDR.Attr) JR NZ,Select8 LD A,IYL CP (HL) JR Z,Select8 PUSH HL INC HL LD B,8 Select2 LD A,(DE) CP '?' JR Z,Select3 CP (HL) JR NZ,Select6 Select3 INC HL INC DE DJNZ Select2 INC HL LD B,03 Select4 LD A,(DE) CP '?' JR Z,Select5 CP (HL) JR NZ,Select6 Select5 INC HL INC DE DJNZ Select4 Select6 POP HL JR NZ,Select8 LD IYH,0x01 LD A,IYL LD (HL),A OR A CALL Z,SUB_SIZE CALL NZ,ADD_SIZE Select8: LD DE,FileHDR.SIZE ADD HL,DE ADD IX,DE POP DE LD A,(IX + FileHDR.Name) OR A JR NZ,Select1 LD A,IYH EX AF,AF' POP IY EXX LD (IY+PANEL.BYTES_MARK),L LD (IY+PANEL.BYTES_MARK + 1),H LD (IY+PANEL.BYTES_MARK + 2),E LD (IY+PANEL.BYTES_MARK + 3),D LD (IY+PANEL.BYTES_MARK_H),A ; [ ] FAT32 LD (IY+PANEL.FILES_MARK),C LD (IY+PANEL.FILES_MARK + 1),B EXX POP AF SETPORT WINSP.CPU3,,0 EX AF,AF' OR A RET Z CALL PrintDIR JP PrnFileInfo SMaskStr: DEFB 0x0C,0x00,0x00,0x00 MaskLen: DEFB 0x03 DEFW 282,106 DEFW 104 DEFB 0xF0 CrSMask: DEFB "*.*" DB 10 DUP 0 SelMask: DEFB "???????????" MakeMask LD BC,0x0902 SMaskLp LD A,(HL) CP '!' RET C CP '\"' RET Z CP '*' JR Z,SMask1 CP '+' RET Z CP ',' RET Z CP '.' JR Z,SMask2 CP '/' RET Z CP ':' RET Z CP ';' RET Z CP '<' RET Z CP '=' RET Z CP '>' RET Z CP '[' RET Z CP '\\' RET Z CP ']' RET Z CP '|' RET Z IF CORR_FILENAME CALL CorrBigChar ENDIF LD (DE),A INC HL INC DE DJNZ SMaskLp AND A RET SMask1 LD A,'?' INC HL DJNZ SMask11 AND A RET SMask11 LD (DE),A INC DE DJNZ SMask11 INC B JR SMaskLp SMask2 LD A,' ' INC HL DJNZ SMask21 LD B,0x04 DEC C JR NZ,SMaskLp AND A RET SMask21 LD (DE),A INC DE DJNZ SMask21 LD B,0x04 DEC C JR NZ,SMaskLp AND A RET ;[]==========================================================[] SelectAllR: CALL ResInvert SelectAllRN: LD HL,SetInvert PUSH HL LD A,(IY + PANEL.FILES_ALL) OR (IY + PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) RET NZ 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 SETPORT WINSP.Y_PORT,0xC0 LD IX,CPU3 LD BC,FileHDR.SIZE EX AF,AF' ; [ ] fat32 SUB A LD L,A LD H,L LD E,L LD D,H EXX LD L,A LD H,L EXX EX AF,AF' ; [ ] fat32 .loop: BIT DIR.B_Dir,(IX + FileHDR.Attr) ;!HARDCODE DIRECTORY JR NZ,.SelAll1 ; маркировка только файлов PUSH BC SET FileHDR.B_MARK,(IX + FileHDR.Flag) LD C,(IX + FileHDR.SizeBytes) LD B,(IX + FileHDR.SizeBytes + 1) EX AF,AF' ; [ ] fat32 ADD HL,BC LD C,(IX + FileHDR.SizeBytes + 2) LD B,(IX + FileHDR.SizeBytes + 3) EX DE,HL ADC HL,BC EX DE,HL ADC A,0 EX AF,AF' ; [ ] fat32 EXX INC HL EXX ; LD BC,FileHDR.SIZE POP BC .SelAll1: ADD IX,BC LD A,(IX + FileHDR.Name) OR A JR NZ,.loop POP AF SETPORT WINSP.CPU3,,0 EXX LD E,(IY+PANEL.FILES_MARK) LD D,(IY+PANEL.FILES_MARK + 1) OR A SBC HL,DE RET Z ADD HL,DE LD (IY+PANEL.FILES_MARK),L LD (IY+PANEL.FILES_MARK + 1),H EXX LD (IY+PANEL.BYTES_MARK),L LD (IY+PANEL.BYTES_MARK + 1),H LD (IY+PANEL.BYTES_MARK + 2),E LD (IY+PANEL.BYTES_MARK + 3),D ; [ ] FAT32 EX AF,AF' LD (IY + PANEL.BYTES_MARK_H),A CALL PrintDIR JP PrnFileInfo ;[]==========================================================[] UnSelectAllR: CALL ResInvert UnSelectAllRN: LD HL,SetInvert PUSH HL LD A,(IY + PANEL.FILES_ALL) OR (IY + PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) RET NZ LD A,(IY + PANEL.FILES_MARK) OR (IY + PANEL.FILES_MARK + 1) RET Z PUSH IY POP HL LD BC,PANEL.FILES_MARK ADD HL,BC LD B,PANEL.FILE_MASK - PANEL.FILES_MARK .L2 LD (HL),0 INC HL DJNZ .L2 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 SETPORT WINSP.Y_PORT,0xC0 LD HL,CPU3 LD BC,FileHDR.SIZE + 1 UnSelA1: RES 0,(HL) ADD HL,BC LD A,(HL) DEC HL OR A JR NZ,UnSelA1 POP AF SETPORT WINSP.CPU3,,0 CALL PrintDIR JP PrnFileInfo ;[]==========================================================[] InvertSelectR: CALL ResInvert InvertSelectRN: LD HL,SetInvert PUSH HL LD A,(IY+PANEL.FILES_ALL) OR (IY+PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ 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 SETPORT WINSP.Y_PORT,0xC0 LD IX,0xC000 LD DE,FileHDR.SIZE LD B,0x00 EX AF,AF' ; [ ] fat32 EXX LD L,(IY + PANEL.BYTES_MARK) LD H,(IY + PANEL.BYTES_MARK + 1) LD E,(IY + PANEL.BYTES_MARK + 2) LD D,(IY + PANEL.BYTES_MARK + 3) LD A,(IY + PANEL.BYTES_MARK_H) ; [ ] FAT32 LD C,(IY + PANEL.FILES_MARK) LD B,(IY + PANEL.FILES_MARK + 1) EXX EX AF,AF' ; [ ] fat32 .loop: BIT DIR.B_Dir,(IX + FileHDR.Attr) ;!HARDCODE Dir JR NZ,.InvSel3 LD B,FileHDR.M_MARK LD A,(IX + FileHDR.Flag) XOR B LD (IX + FileHDR.Flag),A CALL Z,SUB_SIZE CALL NZ,ADD_SIZE .InvSel3: ADD IX,DE LD A,(IX + FileHDR.Name) OR A JR NZ,.loop POP AF SETPORT WINSP.CPU3,,0 EX AF,AF' ; [ ] fat32 EXX LD (IY + PANEL.BYTES_MARK),L LD (IY + PANEL.BYTES_MARK + 1),H LD (IY + PANEL.BYTES_MARK + 2),E LD (IY + PANEL.BYTES_MARK + 3),D LD (IY + PANEL.BYTES_MARK_H),A ; [ ] FAT32 LD (IY + PANEL.FILES_MARK),C LD (IY + PANEL.FILES_MARK + 1),B EXX LD A,B OR A RET Z CALL PrintDIR JP PrnFileInfo ADD_SIZE: EX AF,AF' ; [ ] fat32 EXX PUSH BC LD C,(IX + FileHDR.SizeBytes) LD B,(IX + FileHDR.SizeBytes + 1) ADD HL,BC LD C,(IX + FileHDR.SizeBytes + 2) LD B,(IX + FileHDR.SizeBytes + 3) EX DE,HL ADC HL,BC EX DE,HL ADC A,0 ; [ ] fat32 POP BC INC BC EXX EX AF,AF' ; [ ] fat32 RET SUB_SIZE: EX AF,AF' ; [ ] fat32 EXX PUSH BC LD C,(IX + FileHDR.SizeBytes) LD B,(IX + FileHDR.SizeBytes + 1) OR A SBC HL,BC LD C,(IX + FileHDR.SizeBytes + 2) LD B,(IX + FileHDR.SizeBytes + 3) EX DE,HL SBC HL,BC EX DE,HL SBC A,0 ; [ ] fat32 POP BC DEC BC EXX EX AF,AF' RET