; LAST UPDATE: 11.01.2026 savelij ;[]==========================================================[] CopyFilesR LD A,(IY + PANEL.FILES_ALL) OR (IY + PANEL.FILES_ALL + 1) RET Z ; файлов нет BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) RET NZ ; режим отображения панели - дерево SETPORT WINSP.Y_PORT,0xC0 LD A,(IY + PANEL.FILES_MARK) OR (IY + PANEL.FILES_MARK + 1) JP NZ,CopyMark ; есть помеченные файлы ; копирование файла/диры под курсором, без пометки 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 IX,WorkBuffer LD A,HIGH (CPU3) CALL GET_HANDLE_ADR LD (COPY.PathCurrFile),HL LD DE,WorkBuffer LD BC,FileHDR.SIZE LDIR POP AF SETPORT WINSP.CPU3,,0 BIT DIR.B_Dir,(IX + FileHDR.Attr) IF MARK_DIR JP NZ,.InitCopyDir ELSE RET NZ ENDIF LD HL,0 LD (COPY.CopyFiles),HL LD L,(IX + FileHDR.SizeBytes) LD H,(IX + FileHDR.SizeBytes + 1) LD (COPY.CopyBytes),HL LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) LD (COPY.CopyBytes + 2),DE CALL ConvBytes2Pages JP CopyNxt IF MARK_DIR ; копирование диры со всем содержимым под курсором .InitCopyDir LD HL,(COPY.PathCurrFile) PUSH HL CALL CalcDirSizeR ; измерение размера директории с файлами POP HL LD (COPY.PathCurrFile),HL LD HL,JUMPS.FILES_BYTES LD DE,COPY.CopyBytes LD BC,DWORD + 1 LDIR ; забрали размер директории LD (COPY.CopyFiles),BC ; количество уже скопированных файлов CALL StorePaths ; сохранение текущий путей панелей LD HL,(COPY.CopyBytes) LD DE,(COPY.CopyBytes + 2) CALL ConvBytes2Pages ; пересчет в количество страниц для копирования JP CopyNxt ENDIF ; копирование помеченных файлов CopyMark LD L,(IY + PANEL.FILES_MARK) LD H,(IY + PANEL.FILES_MARK + 1) LD (COPY.CopyFiles),HL LD L,(IY + PANEL.BYTES_MARK) LD H,(IY + PANEL.BYTES_MARK + 1) LD (COPY.CopyBytes),HL LD L,(IY + PANEL.BYTES_MARK + 2) LD H,(IY + PANEL.BYTES_MARK + 3) LD (COPY.CopyBytes + 2),HL ; [ ] fat32 LD A,(IY + PANEL.BYTES_MARK_H) LD (COPY.CopyBytes + 4),A 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 HL,CPU3 - FileHDR.SIZE LD BC,FileHDR.SIZE .L2 ADD HL,BC BIT FileHDR.B_MARK,(HL) JR Z,.L2 LD (COPY.PathCurrFile),HL PUSH HL POP IX SUB A LD L,A LD H,A LD E,L LD D,H CopyLp0 BIT FileHDR.B_MARK,(IX + FileHDR.Flag) JR Z,CopyNx2 PUSH BC PUSH DE PUSH HL LD L,(IX + FileHDR.SizeBytes) LD H,(IX + FileHDR.SizeBytes + 1) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) CALL ConvBytes2Pages POP BC ADD HL,BC POP BC EX DE,HL ADC HL,BC EX DE,HL POP BC CopyNx2 ADD IX,BC LD A,(IX + FileHDR.Name) OR A JR NZ,CopyLp0 POP AF SETPORT WINSP.CPU3,,0 ; DEHL - количество страниц копирования CopyNxt LD IX,ProcessAll ADD HL,HL EX DE,HL ADC HL,HL EX DE,HL LD (IX + PROGRESSBAR.MAX_PAGES),L LD (IX + PROGRESSBAR.MAX_PAGES + 1),H LD (IX + PROGRESSBAR.MAX_PAGES + 2),E LD (IX + PROGRESSBAR.MAX_PAGES + 3),D CALL InitProgressBar CALL ResInvert LD HL,SetInvert PUSH HL ; запрос пути копирования MAKEWINDOW WINSUBOBJ.STORE W_MAIN 96,81,448,62 W_FILL 4,2,440,10,COLORI.BLACK W_TEXT 210,3,COLORI.WHITE,"Copy" W_BUTTON 144,42,72,14 W_TEXT 172,45,COLORP.HIGHGRAY,"Ok" W_BUTTON 232,42,72,14 W_TEXT 252,45,COLORP.HIGHGRAY,"Cancel" W_TEXT 22,25,COLORP.HIGHGRAY,"Copy to:" W_BORDER 70,22,332,12 W_FILL 72,23,328,10,COLORI.WHITE W_END BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD HL,LeftPanel JR NZ,.L1 LD HL,RightPanel .L1 LD DE,PANEL.CURR_PATH ADD HL,DE LD (.NEWPATH),HL ; куда возвращать отредактированный путь LD DE,CurPath SUB A LD C,A .L2 LDI CP (HL) JR NZ,.L2 LD (DE),A SUB C LD (PathLen),A LD IX,PathStr LD HL,REZ2TAB.PathTab CALL InputLine WINDOWCLOSE RET C LD A,(PathLen) OR A RET Z PUSH IY SPDSS DSSF.INFOMEM POP IY LD (COPY.FreeBanks),BC LD A,B OR C LD A,ERR_DSS.NOT_ENOUGH_MEMORY JP Z,DOSError ;!!!!!!!!!!!! Нет памяти ; индикация процесса копирования MAKEWINDOW WINSUBOBJ.STORE W_MAIN 160,81,320,78 W_FILL 4,2,312,10,COLORI.BLACK W_TEXT 148,3,COLORI.WHITE,"Copy" W_TEXT 8,16,COLORP.HIGHGRAY,"From:" W_TEXT 22,26,COLORP.HIGHGRAY,"to:" W_BORDER 16,38,288,12 W_FILL 18,39,284,10,COLORI.WHITE W_BORDER 16,56,288,12 W_FILL 18,57,284,10,COLORI.WHITE W_END XOR A LD (COPY.OverWriteFlg),A LD HL,CurPath LD DE,0 ; адрес отредактированного пути приемника .NEWPATH EQU $-2 .NP1 LDI CP (HL) JR NZ,.NP1 LD (DE),A CALL DIRLIST.InitCopyDirs CALL PointerMouseClock PUSH IY GETPORT WINSP.CPU3 PUSH AF LD (CopyDir.CURR_PANEL),IY ; при копировании файла портится IF MARK_DIR ; текущую директорию грузим в свободную страницу LD A,(RAMPAGES.BuffPg3) SETPORT WINSP.CPU3,,0 SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) CALL ReadDIR ELSE BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD A,(RAMPAGES.LEFTPANEL) JR Z,.L3 LD A,(RAMPAGES.RIGHTPANEL) .L3 SETPORT WINSP.CPU3,,0 ENDIF ; копирование файлов/директорий CopyNextFile LD IX,(COPY.PathCurrFile) IF MARK_DIR BIT DIR.B_Dir,(IX + FileHDR.Attr) JR Z,.CopyFile ; заносим имя диры в список для дальнейшего копирования CALL DIRLIST.ADD_DIRNAME JP .NextHandle ENDIF ; копирование файла/директории .CopyFile PUSH IX CALL PrintSrcDst POP IX LD L,(IX + FileHDR.SizeBytes) LD H,(IX + FileHDR.SizeBytes + 1) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) LD (COPY.CurrReadBytes),HL LD (COPY.CurrReadBytes + 2),DE LD (COPY.CurrWriteBytes),HL LD (COPY.CurrWriteBytes + 2),DE CALL ConvBytes2Pages LD (.PagesLow),HL LD (.PagesHigh),DE LD IX,ProcessOne ADD HL,HL EX DE,HL ADC HL,HL EX DE,HL LD (IX + PROGRESSBAR.MAX_PAGES),L LD (IX + PROGRESSBAR.MAX_PAGES + 1),H LD (IX + PROGRESSBAR.MAX_PAGES + 2),E LD (IX + PROGRESSBAR.MAX_PAGES + 3),D CALL InitProgressBar CALL DrawProgressBar LD HL,(COPY.FreeBanks) LD DE,0x0000 .PagesHigh EQU $-2 LD A,D OR E JR NZ,.CopyLp1 LD DE,0x0000 .PagesLow EQU $-2 OR A SBC HL,DE JR NC,.L1 ADD HL,DE .CopyLp1 EX DE,HL .L1 LD B,E SPDSS DSSF.GETMEM LD (COPY.MemID),A LD HL,PagesList SPBIOS BIOSF.GETMEMBLKPAGES LD HL,(COPY.PathSrc) ; открываем файл источник SPDSS DSSF.CHDIR JP C,CopyError1 LD HL,(COPY.PathCurrFile) INC HL LD DE,WorkBuffer PUSH DE CALL MakeDOSname POP HL SPDSS DSSF.OPEN,,FILEMODE.R ; открытие на чтение JP C,CopyError1 LD (COPY.FHandleSrc),A LD HL,(COPY.PathDst) ; открываем файл приемник SPDSS DSSF.CHDIR JP C,CopyError2 LD IX,(COPY.PathCurrFile) LD HL,(COPY.PathCurrFile) INC HL LD DE,WorkBuffer PUSH DE CALL MakeDOSname POP HL LD A,(COPY.OverWriteFlg) OR A LD C,DSSF.CREAT_N JR Z,.L2 LD C,DSSF.CREATE .L2 LD A,(IX + FileHDR.Attr) SPDSS ; создание файла JR NC,.CopyLp2 CP ERR_DSS.FILE_EXISTS JP NZ,CopyError2 CALL OverWrite ; файл существут, запрос на перезапись .CopyLp2 LD (COPY.FHandleDst),A LD HL,(COPY.CurrReadBytes) LD A,H OR L LD HL,(COPY.CurrReadBytes + 2) OR H OR L JP Z,.CloseFiles .ReadFile GETPORT WINSP.CPU3 PUSH AF LD HL,PagesList LD A,(HL) .ReadLp1 INC HL PUSH HL SETPORT WINSP.CPU3,,0 SPDSS DSSF.SCANKEY LD HL,SC.ESC << 8 | 0x1B OR A SBC HL,DE JP Z,CopyBreak LD HL,(COPY.CurrReadBytes) LD DE,(COPY.CurrReadBytes + 2) LD BC,0x4000 OR A SBC HL,BC LD B,0x00 EX DE,HL SBC HL,BC EX DE,HL JR C,.ReadEnd LD (COPY.CurrReadBytes),HL LD (COPY.CurrReadBytes + 2),DE LD HL,0xC000 LD DE,0x4000 LD A,(COPY.FHandleSrc) SPDSS DSSF.READ CALL NextProcess POP HL LD A,(HL) CP 0xFF JR NZ,.ReadLp1 POP AF SETPORT WINSP.CPU3,,0 JR .WriteFile ; !FIXIT сделать так: .ReadEnd: LD HL,0xC000 LD DE,(COPY.CurrReadBytes) LD A,D OR E JR Z,.L3 LD A,(COPY.FHandleSrc) SPDSS DSSF.READ CALL NextProcess .L3 POP HL POP AF SETPORT WINSP.CPU3,,0 .WriteFile GETPORT WINSP.CPU3 PUSH AF LD HL,PagesList LD A,(HL) .WriteL1 INC HL PUSH HL SETPORT WINSP.CPU3,,0 SPDSS DSSF.SCANKEY LD HL,SC.ESC << 8 | 0x1B OR A SBC HL,DE JP Z,CopyBreak LD HL,(COPY.CurrWriteBytes) LD DE,(COPY.CurrWriteBytes + 2) LD BC,0x4000 OR A SBC HL,BC LD B,0x00 EX DE,HL SBC HL,BC EX DE,HL JR C,.WriteEnd LD (COPY.CurrWriteBytes),HL LD (COPY.CurrWriteBytes + 2),DE LD HL,0xC000 LD DE,0x4000 LD A,(COPY.FHandleDst) SPDSS DSSF.WRITE JP C,CopyError3 CALL NextProcess POP HL LD A,(HL) CP 0xFF JR NZ,.WriteL1 POP AF SETPORT WINSP.CPU3,,0 LD HL,(COPY.CurrReadBytes) LD A,H OR L LD HL,(COPY.CurrReadBytes + 2) OR H OR L JR Z,.CloseFiles JP .ReadFile ; !FIXIT сделать так: .WriteEnd: LD HL,0xC000 LD DE,(COPY.CurrWriteBytes) LD A,D OR E JR Z,.L4 LD A,(COPY.FHandleDst) SPDSS DSSF.WRITE JP C,CopyError3 CALL NextProcess .L4 POP HL POP AF SETPORT WINSP.CPU3,,0 .CloseFiles LD A,(COPY.FHandleSrc) SPDSS DSSF.GET_D_T LD A,(COPY.FHandleDst) SPDSS DSSF.PUT_D_T LD A,(COPY.FHandleDst) SPDSS DSSF.CLOSE .CloseFile1 LD A,(COPY.FHandleSrc) SPDSS DSSF.CLOSE LD A,(COPY.MemID) SPDSS DSSF.FREEMEM .NextHandle LD IX,(COPY.PathCurrFile) RES FileHDR.B_MARK,(IX + FileHDR.Flag) LD HL,(COPY.CopyBytes) LD E,(IX + FileHDR.SizeBytes) LD D,(IX + FileHDR.SizeBytes + 1) OR A SBC HL,DE LD (COPY.CopyBytes),HL LD HL,(COPY.CopyBytes + 2) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) SBC HL,DE LD (COPY.CopyBytes + 2),HL LD HL,(COPY.CopyFiles) LD A,H OR L IF MARK_DIR JR Z,CopyDir ; файлы кончились? ELSE JP Z,CopyEnd ENDIF DEC HL LD (COPY.CopyFiles),HL LD A,H OR L IF MARK_DIR JR Z,CopyDir ; файлы кончились? ELSE JP Z,CopyEnd ENDIF LD HL,(COPY.PathCurrFile) LD DE,FileHDR.SIZE .L5 ADD HL,DE ; следующий описатель BIT FileHDR.B_MARK,(HL) JR Z,.L5 LD (COPY.PathCurrFile),HL JP CopyNextFile ; копирование директории CopyDir LD IY,0 .CURR_PANEL EQU $-2 CALL DIRLIST.GET_DIRNAME ; получение имени диры, если есть JP C,CopyEnd ; C=1 текущая дира кончилась или их нет CALL DIRLIST.ADD_DIRLEVEL ; добавление списка диры PUSH IY LD HL,(COPY.PathDst) SPDSS DSSF.MKDIR ; создание диры на приемнике ; CALL C,DOSError LD HL,(COPY.PathSrc) SPDSS DSSF.CHDIR ; смена текущего пути ; CALL C,DOSError POP IY LD A,(RAMPAGES.BuffPg3) SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) CALL ReadDIR CALL DIRLIST.MARK_ALL ; маркировка всех файлов/дир LD HL,0xC000 + FileHDR.SIZE LD (COPY.PathCurrFile),HL JP CopyNextFile BUF_MARKDIR .DIR_NAME DZ " " ; имя текущей директории DIRLIST ; пометка всех файлов/дир .MARK_ALL LD IX,0xC000 - FileHDR.SIZE LD HL,0 LD (COPY.CopyFiles),HL LD BC,FileHDR.SIZE .MLNEXT ADD IX,BC LD A,(IX + FileHDR.Name) AND A RET Z CP '.' JR Z,.MLNEXT SET FileHDR.B_MARK,(IX + FileHDR.Flag) EXX LD HL,COPY.CopyBytes LD E,(IX + FileHDR.SizeBytes) LD D,(IX + FileHDR.SizeBytes + 1) LD C,(IX + FileHDR.SizeBytes + 2) LD B,(IX + FileHDR.SizeBytes + 3) CALL HLPBCDE LD HL,(COPY.CopyFiles) INC HL LD (COPY.CopyFiles),HL EXX JR .MLNEXT ; добавление имени диры в список, создание диры на приемнике .ADD_DIRNAME PUSH IX POP HL INC HL LD DE,BUF_MARKDIR.DIR_NAME LD BC,8 LDIR ; забрали имя диры до переключения паг LD A,(RAMPAGES.FLX) LD C,WINSP.CPU3 IN B,(C) PUSH BC OUT (C),A LD HL,0xC000 .ANNEXT CALL GET_DWORD LD A,B OR C JR Z,.ANFOUND LD H,B LD L,C JR .ANNEXT .ANFOUND PUSH HL LD HL,BUF_MARKDIR.DIR_NAME LD BC,8 LDIR ; занесли имя диры в список POP HL DEC HL DEC HL LD (HL),D DEC HL LD (HL),E POP BC OUT (C),B RET .ADDNAME2PATH8 CALL .CHECK_BSLASH LD (HL),'\\' INC HL EX DE,HL LD BC,8 LDIR XOR A LD (DE),A RET ; добавление имени в строку пути ; HL - куда добавлять (хвост текущего пути) ; DE - откуда имя брать .ADDNAME2PATH CALL .CHECK_BSLASH LD (HL),'\\' INC HL EX DE,HL ; копирование имени из буфера .COPYNAME2PATH XOR A .CNP2 CP (HL) JR Z,.CNP1 LDI JR .CNP2 .CNP1 LD (DE),A RET ; проверка на BACKSLASH .CHECK_BSLASH DEC HL LD A,(HL) CP '\\' RET Z INC HL RET ; отсечение пробелов в имени .CUTOFFSPACES LD A,' ' .COS2 DEC HL CP (HL) JR Z,.COS2 INC HL LD (HL),0 RET ; добавление уровня для дир .ADD_DIRLEVEL LD A,(RAMPAGES.FLX) LD C,WINSP.CPU3 IN B,(C) PUSH BC OUT (C),A LD HL,0xC000 .ALNEXT CALL GET_DWORD LD A,B OR C JR Z,.ALFOUND LD H,B LD L,C JR .ALNEXT .ALFOUND LD (HL),D DEC HL LD (HL),E LD H,D LD L,E INC DE INC DE INC DE INC DE LD (HL),E INC HL LD (HL),D INC HL LD (HL),0 INC HL LD (HL),0 POP BC OUT (C),B RET ; получение имени диры с удалением из списка .GET_DIRNAME LD A,(RAMPAGES.FLX) LD C,WINSP.CPU3 IN B,(C) PUSH BC OUT (C),A .GNRESTART LD HL,0xC000 .GNNEXT CALL GET_DWORD LD A,B OR C JR Z,.GNFOUND DEC HL LD (.GNEL1),HL LD H,B LD L,C JR .GNNEXT .GNFOUND INC HL EX DE,HL AND A SBC HL,DE SRL H RR L SRL H RR L SRL H RR L LD B,H LD C,L EX DE,HL LD DE,8 AND A SBC HL,DE INC BC .GNNEXT_FIND DEC BC LD A,B OR C JR Z,.GNEND_LEVEL ADD HL,DE LD A,(HL) AND A JR Z,.GNNEXT_FIND PUSH HL EX DE,HL PUSH DE LD HL,(COPY.PathSrcEnd) CALL .ADDNAME2PATH8 EX DE,HL CALL .CUTOFFSPACES LD (COPY.PathSrcEnd),HL POP DE LD HL,(COPY.PathDstEnd) CALL .ADDNAME2PATH8 EX DE,HL CALL .CUTOFFSPACES LD (COPY.PathDstEnd),HL POP HL LD (HL),0 POP BC OUT (C),B AND A RET .GNEND_LEVEL LD HL,0 .GNEL1 EQU $-2 LD A,H OR L JR Z,.GNEL2 XOR A LD (HL),A INC HL LD (HL),A LD DE,0xC000 + DWORD - 1 EX DE,HL SBC HL,DE EX DE,HL JR Z,.GNEL2 LD HL,(COPY.PathSrcEnd) CALL .GNEL4 LD (COPY.PathSrcEnd),HL LD HL,(COPY.PathDstEnd) CALL .GNEL4 LD (COPY.PathDstEnd),HL JP .GNRESTART .GNEL4 DEC HL LD A,'\\' .GNEL3 DEC HL CP (HL) JR NZ,.GNEL3 INC HL LD (HL),0 RET .GNEL2 POP BC OUT (C),B SCF RET ; инициализация копирования директории с содержимым .InitCopyDirs BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD HL,LeftPanel + PANEL.CURR_PATH ; для пути откуда копировать LD DE,RightPanel + PANEL.CURR_PATH ; для пути куда копировать JR Z,.L1 EX DE,HL ; включаем пагу с директорией текущей панели .L1 LD (COPY.PathSrc),HL EX DE,HL LD (COPY.PathDst),HL .L2 INC HL CP (HL) JR NZ,.L2 LD (COPY.PathDstEnd),HL EX DE,HL XOR A .L3 INC HL CP (HL) JR NZ,.L3 LD (COPY.PathSrcEnd),HL ; инит в странице списков директорий GETPORT WINSP.CPU3 EX AF,AF' LD A,(RAMPAGES.FLX) SETPORT WINSP.CPU3,,0 LD HL,0xC000 LD (HL),LOW (0xC000 + DWORD) INC HL LD (HL),HIGH (0xC000 + DWORD) INC HL LD D,H LD E,L INC DE LD BC,FileHDR.Name_Size * 2 LD (HL),B LDIR EX AF,AF' SETPORT WINSP.CPU3,,0 RET ; сохранение путей панелей StorePaths LD HL,LeftPanel + PANEL.CURR_PATH LD DE,REZ2_BUFFERS.OLDLEFTPANEL LD BC,PANEL.CURR_PATH_Size LDIR LD HL,RightPanel + PANEL.CURR_PATH LD DE,REZ2_BUFFERS.OLDRIGHTPANEL LD BC,PANEL.CURR_PATH_Size LDIR RET ; восстановление путей панелей RestorePaths LD HL,REZ2_BUFFERS.OLDLEFTPANEL LD DE,LeftPanel + PANEL.CURR_PATH LD BC,PANEL.CURR_PATH_Size LDIR LD HL,REZ2_BUFFERS.OLDRIGHTPANEL LD DE,RightPanel + PANEL.CURR_PATH LD BC,PANEL.CURR_PATH_Size LDIR RET ; подсчет в байтах размера отмеченной директории CalcDirSizeR: PUSH IX PUSH IY GETPORT WINSP.CPU3 PUSH AF ; текущий номер страницы LD (.CURR_PANEL),IY LD A,(RAMPAGES.BuffPg3) SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) CALL ReadDIR LD A,(RAMPAGES.BuffPg3) SETPORT WINSP.CPU3,,0 LD A,HIGH (CPU3) CALL GET_HANDLE_ADR LD (COPY.PathCurrFile),HL XOR A LD H,A LD L,A LD (JUMPS.FILES_BYTES),HL LD (JUMPS.FILES_BYTES + 2),HL ; обнуление размера диры LD (JUMPS.FILES_COUNT),HL ; обнуление количества файлов LD (COPY.CopyFiles),HL CALL StorePaths CALL DIRLIST.InitCopyDirs .NextDirFile LD IX,(COPY.PathCurrFile) BIT DIR.B_Dir,(IX + FileHDR.Attr) JR Z,.NextFile ; заносим имя диры в список для дальнейшего использования CALL DIRLIST.ADD_DIRNAME JP .NextHandle ; для файла добавляем его размер и количество +1 .NextFile LD HL,(JUMPS.FILES_COUNT) INC HL LD (JUMPS.FILES_COUNT),HL ; инкремент количества файлов PUSH IX POP DE LD HL,FileHDR.SizeBytes ADD HL,DE CALL GET_DWORD LD HL,JUMPS.FILES_BYTES CALL HLPBCDE ; добавили к текущему размеру ; проверка на окончание описателей .NextHandle LD HL,(COPY.CopyFiles) LD A,H OR L JR Z,.ENDDIR DEC HL LD A,H OR L JR Z,.ENDDIR LD (COPY.CopyFiles),HL LD HL,(COPY.PathCurrFile) LD DE,FileHDR.SIZE .L5 ADD HL,DE ; следующий описатель BIT FileHDR.B_MARK,(HL) JR Z,.L5 LD (COPY.PathCurrFile),HL JP .NextDirFile .ENDDIR LD IY,0 .CURR_PANEL EQU $-2 CALL DIRLIST.GET_DIRNAME ; получение имени диры, если есть JP C,.CalcEnd ; C=1 текущая диры кончилась или их нет CALL DIRLIST.ADD_DIRLEVEL ; добавление списка диры PUSH IY LD HL,(COPY.PathSrc) SPDSS DSSF.CHDIR ; смена текущего пути ; CALL C,DOSError POP IY LD A,(RAMPAGES.BuffPg3) SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) CALL ReadDIR CALL DIRLIST.MARK_ALL ; маркировка всех файлов/дир LD HL,0xC000 + FileHDR.SIZE LD (COPY.PathCurrFile),HL JP .NextDirFile .CalcEnd CALL RestorePaths POP AF SETPORT WINSP.CPU3,,0 POP IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD HL,LeftPanel + PANEL.CURR_PATH JR Z,.CD1 LD HL,RightPanel + PANEL.CURR_PATH .CD1 ; LD HL,(COPY.PathSrc) PUSH IY SPDSS DSSF.CHDIR POP IY POP IX RET ; завершение копирования CopyEnd IF MARK_DIR CALL RestorePaths ENDIF POP AF SETPORT WINSP.CPU3,,0 POP IY WINDOWCLOSE LD HL,(COPY.CopyFiles) LD (IY + PANEL.FILES_MARK),L LD (IY + PANEL.FILES_MARK + 1),H LD HL,(COPY.CopyBytes) LD (IY + PANEL.BYTES_MARK),L LD (IY + PANEL.BYTES_MARK + 1),H LD HL,(COPY.CopyBytes + 2) LD (IY + PANEL.BYTES_MARK + 2),L LD (IY + PANEL.BYTES_MARK + 3),H ; [ ] fat32 LD A,(COPY.CopyBytes + 4) LD (IY + PANEL.BYTES_MARK_H),A PUSH IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel JR Z,.L1 LD IY,LeftPanel ; обновление панели приемника .L1 PUSH IY POP HL LD DE,PANEL.CURR_PATH ADD HL,DE PUSH IY SPDSS DSSF.CHDIR POP IY PUSH AF CALL C,DOSError POP AF CALL NC,RefreshDIR POP IY ; обновление панели источника PUSH IY POP HL LD DE,PANEL.CURR_PATH ADD HL,DE PUSH IY SPDSS DSSF.CHDIR POP IY PUSH AF CALL C,DOSError POP AF PUSH AF CALL NC,RefreshDIR POP AF JP C,BegDIRECTORY CALL PrintDIR CALL PrnFileInfo JP PointerMousePointer ; !FIXIT оптимизировать CopyError3: ; Если нет места на диске для копирования POP HL ; снимаем лишнее POP DE ; тут лежит AF PUSH AF LD A,D SETPORT WINSP.CPU3,,0 LD A,(COPY.FHandleDst) SPDSS DSSF.CLOSE CALL CopyErrorFileDelete POP AF CopyError2 PUSH AF LD A,(COPY.FHandleSrc) SPDSS DSSF.CLOSE POP AF CopyError1 PUSH AF LD A,(COPY.MemID) SPDSS DSSF.FREEMEM POP AF CALL DOSError JP CopyEnd CopyBreak POP HL POP AF SETPORT WINSP.CPU3,,0 LD A,(COPY.FHandleDst) SPDSS DSSF.CLOSE LD A,(COPY.FHandleSrc) SPDSS DSSF.CLOSE LD A,(COPY.MemID) SPDSS DSSF.FREEMEM CALL CopyErrorFileDelete JP CopyEnd CopyErrorFileDelete: LD IX,(COPY.PathCurrFile) LD HL,(COPY.PathCurrFile) INC HL LD DE,WorkBuffer PUSH DE CALL MakeDOSname POP HL LD A,(IX + FileHDR.Attr) PUSH IY SPDSS DSSF.DELETE POP IY RET ;-------------------------------------------------------------- OverWrite CALL PointerMousePointer MAKEWINDOW WINSUBOBJ.STORE W_MAIN 180,88,280,56 W_FILL 4,2,272,10,COLORI.GREEN W_TEXT 116,3,COLORI.WHITE + COLORP.GREEN,"Message" W_TEXT 80,16,COLORP.HIGHGRAY,"The following file EXISTS:" W_BUTTON 16,38,56,14 W_TEXT 22,41,COLORP.HIGHGRAY,"OverWrite" W_BUTTON 80,38,56,14 W_TEXT 102,41,COLORP.HIGHGRAY,"All" W_BUTTON 144,38,56,14 W_TEXT 162,41,COLORP.HIGHGRAY,"Skip" W_BUTTON 208,38,56,14 W_TEXT 220,41,COLORP.HIGHGRAY,"Cancel" W_END LD HL,(COPY.PathDst) LD DE,WorkBuffer SUB A .L1 LDI CP (HL) JR NZ,.L1 DEC HL LD A,'\\' CP (HL) JR Z,.L2 LD (DE),A INC DE .L2 LD HL,(COPY.PathCurrFile) INC HL CALL MakeDOSname LD IX,0x00F8 LD HL,WorkBuffer LD DE,320 LD BC,114 LD A,COLORP.HIGHGRAY + COLORI.BLACK CALL PrintPathCentr OvWrtLp LD IX,REZ2TAB.OverWrtTab CALL CheckCoordsMouse SPDSS DSSF.SCANKEY JR Z,OvWrtLp LD A,B OR A JR NZ,OvWrtLp LD A,E CP 0x1B LD HL,OverExit JR Z,OvrJump CP 0x0D LD HL,OverWrtFile JR Z,OvrJump RES 5,A CP 'O' LD HL,OverWrtFile JR Z,OvrJump CP 'A' LD HL,OverWrtAll JR Z,OvrJump CP 'S' LD HL,OverSkip JR Z,OvrJump CP 'C' JR NZ,OvWrtLp LD HL,OverExit OvrJump WINDOWCLOSE JP (HL) OverWrtAll LD A,0x01 LD (COPY.OverWriteFlg),A OverWrtFile CALL PointerMouseClock LD IX,(COPY.PathCurrFile) LD HL,(COPY.PathCurrFile) INC HL LD DE,WorkBuffer PUSH DE CALL MakeDOSname POP HL LD A,(IX + FileHDR.Attr) SPDSS DSSF.CREATE RET OverSkip CALL PointerMouseClock LD IX,(COPY.PathCurrFile) LD L,(IX + FileHDR.SizeBytes) LD H,(IX + FileHDR.SizeBytes + 1) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) CALL ConvBytes2Pages ADD HL,HL EX DE,HL ADC HL,HL EX DE,HL LD IX,ProcessAll LD C,(IX + PROGRESSBAR.CURR_PAGE) LD B,(IX + PROGRESSBAR.CURR_PAGE + 1) ADD HL,BC LD (IX + PROGRESSBAR.CURR_PAGE),L LD (IX + PROGRESSBAR.CURR_PAGE + 1),H LD C,(IX + PROGRESSBAR.CURR_PAGE + 2) LD B,(IX + PROGRESSBAR.CURR_PAGE + 3) EX DE,HL ADC HL,BC LD (IX + PROGRESSBAR.CURR_PAGE + 2),L LD (IX + PROGRESSBAR.CURR_PAGE + 3),H CALL DrawProgressBar LD HL,CopyNextFile.CloseFile1 EX (SP),HL RET OverExit INC SP INC SP LD IX,(COPY.PathCurrFile) BIT FileHDR.B_MARK,(IX + FileHDR.Flag) JP Z,CopyNextFile.CloseFile1 LD A,(COPY.FHandleSrc) SPDSS DSSF.CLOSE LD A,(COPY.MemID) SPDSS DSSF.FREEMEM POP IY JP CopyEnd ; Конверсия размера в байтах в количество страниц ; На входе: ; DEHL - количество байт ; На выходе: ; HL - количество страниц 4294967295=FFFFFFFF ; 1028975 FB36F ; 231 E7 1 ; 59232 E760 4 ; 21 15 1 ; 14119 3727 1 ; 916055 DFA57 38 ; 12652 316C 1 ; 14119 3727 1 ; 12546 3102 1 ; DEHL -> (((DEHL / 100) * 4) / 0x100) + ((L != 0) ? DE++ : DE) ConvBytes2Pages: LD A,H LD H,L LD L,0 ADD A,A RL E RL D RL L ADD A,A RL E RL D RL L OR H LD H,0 EX DE,HL JR Z,.L1 INC HL .L1 LD A,H OR L RET NZ INC DE RET ; печать путей/файлов при копировании PrintSrcDst LD HL,(COPY.PathSrc) LD DE,WorkBuffer SUB A .L1 LDI CP (HL) JR NZ,.L1 DEC HL LD A,'\\' CP (HL) JR Z,.L2 LD (DE),A INC DE .L2 LD HL,(COPY.PathCurrFile) INC HL CALL MakeDOSname LD HL,(COPY.PathDst) LD DE,WorkBuffer+0x100 SUB A .L3 LDI CP (HL) JR NZ,.L3 DEC HL LD A,'\\' CP (HL) JR Z,.L4 LD (DE),A INC DE .L4 LD HL,(COPY.PathCurrFile) INC HL CALL MakeDOSname MAKEWINDOW WINSUBOBJ.WOBIND W_FILL 204,97,256,18,COLORI.HIGHGRAY W_END LD IX,256 LD HL,WorkBuffer LD DE,204 LD BC,97 LD A,COLORP.HIGHGRAY + COLORI.BLACK CALL PrintPathLeft LD IX,256 LD HL,WorkBuffer + 0x100 LD DE,204 LD BC,107 LD A,COLORP.HIGHGRAY + COLORI.BLACK JP PrintPathLeft NextProcess LD IX,ProcessAll LD L,(IX + PROGRESSBAR.CURR_PAGE) LD H,(IX + PROGRESSBAR.CURR_PAGE + 1) INC HL LD (IX + PROGRESSBAR.CURR_PAGE),L LD (IX + PROGRESSBAR.CURR_PAGE + 1),H LD A,H OR L JR NZ,.L1 LD L,(IX + PROGRESSBAR.CURR_PAGE + 2) LD H,(IX + PROGRESSBAR.CURR_PAGE + 3) INC HL LD (IX + PROGRESSBAR.CURR_PAGE + 2),L LD (IX + PROGRESSBAR.CURR_PAGE + 3),H .L1 CALL DrawProgressBar LD IX,ProcessOne LD L,(IX + PROGRESSBAR.CURR_PAGE) LD H,(IX + PROGRESSBAR.CURR_PAGE + 1) INC HL LD (IX + PROGRESSBAR.CURR_PAGE),L LD (IX + PROGRESSBAR.CURR_PAGE + 1),H LD A,H OR L JR NZ,.L2 LD L,(IX + PROGRESSBAR.CURR_PAGE + 2) LD H,(IX + PROGRESSBAR.CURR_PAGE + 3) INC HL LD (IX + PROGRESSBAR.CURR_PAGE + 2),L LD (IX + PROGRESSBAR.CURR_PAGE + 3),H .L2 JP DrawProgressBar ProcessAll DW 178 ; X позиция DW 138 ; Y позиция DW 284 ; Длина X DW 0 ; Коэффициент для процесса DW 0 ; Коррекция коэфициента DW 0 ; Максимум DW 0 DW 0 ; Текущее DW 0 DB COLORP.BLUE + COLORI.WHITE ProcessOne DW 178 ; X позиция DW 120 ; Y позиция DW 284 ; Длина X DW 0 ; Коэффициент для процесса DW 0 ; Коррекция коэфициента DW 0 ; Максимум DW 0 DW 0 ; Текущее DW 0 DB COLORP.BLUE + COLORI.WHITE ; описатель строки PathStr DB 255 ; +00 Максимальная длина строки DB 0 ; +01 Флаг готовности DB 0 ; +02 текущая X позиция курсора DB 0 ; +03 текущая AddX PathLen DB 0 ; +04 количество введенных символов DW 170 ; +05 X позиция строки на экране DW 106 ; +07 Y позиция строки на экране DW 324 ; +09 X длина строки на экране DB COLORP.WHITE + COLORI.BLACK ; +0B Цвет строки CurPath DB 256 DUP 0 ; +0C ...сама строка ;[]==========================================================[] ReNameR LD A,(IY + PANEL.FILES_ALL) OR (IY + PANEL.FILES_ALL + 1) RET Z SETPORT WINSP.Y_PORT,0xC0 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 L,(IY + PANEL.FIRST_FILE) LD H,(IY + PANEL.FIRST_FILE + 1) LD E,(IY + PANEL.CURR_FILE) LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR Z,ReNameNr ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL SET 6,H SET 7,H INC HL INC HL LD DE,CurName LD BC,0x000D LDIR LD A,DIR.M_Dir LD (CurAttrib),A JR ReNameN ReNameNr ADD HL,HL ; *2 ADD HL,HL ; *4 ADD HL,HL ; *8 LD E,L LD D,H ADD HL,HL ; *10 ADD HL,DE ; *18 SET 6,H SET 7,H ; | 0xC000 PUSH HL INC HL LD DE,CurName CALL MakeDOSname POP HL LD BC,FileHDR.Attr ADD HL,BC LD A,(HL) LD (CurAttrib),A ReNameN POP AF SETPORT WINSP.CPU3,,0 LD HL,CurName LD A,(HL) CP '.' RET Z CP '\\' RET Z LD DE,Name LD C,0 LD A,' ' .L1 LDI CP (HL) JR C,.L1 LD A,C NEG LD (NameLen),A CALL ResInvert LD HL,SetInvert PUSH HL LD HL,CurName LD DE,RNfile LD C,0x0C SUB A .L2 LDI CP (HL) JR NZ,.L2 OR C JR Z,RNnxt LD B,C LD A,' ' .L3 LD (DE),A INC DE DJNZ .L3 RNnxt MAKEWINDOW WINSUBOBJ.STORE W_MAIN 208,81,224,62 W_FILL 4,2,216,10,COLORI.BLACK W_TEXT 94,3,COLORI.WHITE,"Rename" 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 14,17,COLORP.HIGHGRAY,"Rename: " RNfile EQU $ - STRLEN(" ") - 2 W_TEXT 40,29,COLORP.HIGHGRAY,"To:" W_BORDER 60,26,134,12 W_FILL 62,27,130,10,COLORI.WHITE W_END LD IX,NameStr LD HL,REZ2TAB.ReNameTab CALL InputLine WINDOWCLOSE RET C LD A,(NameLen) OR A RET Z ; [ ] -баг при переименовании файла в буфере Name в конце имени ; файла не всегда стоял закрывающий 0 когда надо. ILDel1 LD HL,Name LD E,A LD D,0 ADC HL,DE LD (HL),0 CALL PointerMouseClock LD HL,PointerMousePointer EX (SP),HL PUSH HL BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR Z,ReName0 PUSH IY POP HL LD DE,PANEL.CURR_PATH ADD HL,DE LD DE,WorkBuffer PUSH DE SUB A .L1 LDI CP (HL) JR NZ,.L1 EX DE,HL LD A,'\\' .L2 DEC HL CP (HL) JR NZ,.L2 INC HL LD (HL),0x00 POP HL PUSH IY SPDSS DSSF.CHDIR POP IY PUSH AF CALL C,DOSError POP AF RET C ReName0 LD HL,CurName LD DE,Name PUSH IY SPDSS DSSF.RENAME POP IY PUSH AF CALL C,DOSError POP AF RET C LD A,(CurAttrib) BIT DIR.B_Dir,A JP NZ,ReNameDIR LD HL,Name LD DE,PrevFile LD A,(NameLen) LD B,A .L1 LD A,(HL) IF CORR_FILENAME CALL CorrBigChar ENDIF LD (DE),A INC HL INC DE DJNZ .L1 SUB A LD (DE),A BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,ReName1 CALL ReadDIR CALL FindPrevFile CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) AND VIEWFLAG.MASK PUSH AF CALL Z,DrawHScrollBar POP AF CALL NZ,DrawVScrollBar ReName1 LD HL,LeftPanel + PANEL.CURR_PATH LD DE,RightPanel + PANEL.CURR_PATH ReName2 LD A,(DE) CP (HL) RET NZ INC HL INC DE LD A,(HL) OR A JR NZ,ReName2 LD A,(DE) OR A RET NZ PUSH IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel JR Z,.L1 LD IY,LeftPanel .L1 BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,ReNameE CALL ReadDIR CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) AND VIEWFLAG.MASK PUSH AF CALL Z,DrawHScrollBar POP AF CALL NZ,DrawVScrollBar ReNameE POP IY RET ReNameDIR LD HL,Name LD DE,PrevDIR LD A,(NameLen) LD B,A .L1 LD A,(HL) IF CORR_FILENAME CALL CorrSmallChar ENDIF LD (HL),A LD (DE),A INC HL INC DE DJNZ .L1 SUB A LD (DE),A LD A,(TreeFlag) OR A JP Z,ReNameExit BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) EX AF,AF' PUSH IY GETPORT WINSP.CPU3 PUSH AF LD IY,LeftPanel BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,.L2 LD IY,RightPanel .L2 BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD A,(RAMPAGES.LEFTPANEL) JR Z,.L3 LD A,(RAMPAGES.RIGHTPANEL) .L3 SETPORT WINSP.CPU3,,0 EX AF,AF' JR Z,ReNameTree LD L,(IY + PANEL.FIRST_FILE) LD H,(IY + PANEL.FIRST_FILE + 1) LD E,(IY + PANEL.CURR_FILE) LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ; *2 ADD HL,HL ; *4 ADD HL,HL ; *8 ADD HL,HL ; *10 SET 6,H SET 7,H EX DE,HL JR ReNameEx ReNameTree BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD HL,LeftPanel JR NZ,.L1 LD HL,RightPanel .L1 LD DE,PANEL.CURR_PATH ADD HL,DE INC HL INC HL CALL FindTreeDIRR JP C,ReNameT LD HL,0xC000 + 1 - 0x10 LD BC,0x0010 .L2 ADD HL,BC BIT 0,(HL) JR Z,.L2 ADD HL,BC DEC HL FRName1 PUSH HL LD DE,CurName INC HL INC HL FRName2 LD A,(DE) OR A JR Z,FRName4 CP (HL) JR NZ,FRName3 INC HL INC DE JR FRName2 FRName3 POP HL BIT 7,(HL) JR NZ,ReNameT ADD HL,BC JR FRName1 FRName4 LD A,(HL) OR A JR NZ,FRName3 POP DE ReNameEx LD HL,Name INC DE INC DE LD C,0x0D SUB A .L1 LDI CP (HL) JR NZ,.L1 LD B,C .L2 LD (DE),A INC DE DJNZ .L2 LD HL,WorkBuffer PUSH IY SPDSS DSSF.CURDIR POP IY LD HL,BegDIR PUSH IY SPDSS DSSF.CHDIR POP IY JR C,ReNameC LD HL,TreeName LD DE,WorkBuffer + 0x100 LD A,(FileAtribut) PUSH IY SPDSS DSSF.F_FIRST,0 POP IY JR C,ReNameC LD HL,TreeName PUSH IY SPDSS DSSF.CREATE,,0 POP IY JR C,ReNameC LD L,(IY + PANEL.FILES_ALL) LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL EX DE,HL LD HL,0xC000 PUSH AF SPDSS DSSF.WRITE POP AF SPDSS DSSF.CLOSE ReNameC LD HL,WorkBuffer SPDSS DSSF.CHDIR ReNameT POP AF SETPORT WINSP.CPU3,,0 POP IY BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,ReNameExt1 CALL ReadDIR CALL FindPrevDIR CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) AND VIEWFLAG.MASK PUSH AF CALL Z,DrawHScrollBar POP AF CALL NZ,DrawVScrollBar PUSH IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel JR Z,.L1 LD IY,LeftPanel .L1 CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL DrawVScrollBar POP IY RET ReNameExt1 INC SP INC SP CALL PrintDIR CALL PrnFileInfo CALL SetInvert PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL DrawVScrollBar CALL TestTreeR.TestTreeBeg PUSH IY CALL MakeTreePathR EX DE,HL BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel JR Z,.L1 LD IY,LeftPanel .L1 PUSH IY POP HL LD BC,PANEL.CURR_PATH ADD HL,BC INC HL INC HL EX DE,HL SUB A .L2 LDI CP (HL) JR NZ,.L2 LD (DE),A CALL PrintPath POP IY RET ReNameExit CALL ReadDIR CALL FindPrevDIR CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) AND VIEWFLAG.MASK PUSH AF CALL Z,DrawHScrollBar POP AF CALL NZ,DrawVScrollBar LD HL,LeftPanel + PANEL.CURR_PATH LD DE,RightPanel + PANEL.CURR_PATH RNameE1 LD A,(DE) CP (HL) RET NZ INC HL INC DE LD A,(HL) OR A JR NZ,RNameE1 LD A,(DE) OR A RET NZ PUSH IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel JR Z,.L1 LD IY,LeftPanel .L1 BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,RNameE2 CALL ReadDIR CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) AND VIEWFLAG.MASK PUSH AF CALL Z,DrawHScrollBar POP AF CALL NZ,DrawVScrollBar RNameE2 POP IY RET CurAttrib DB 0x00 CurName DB 0x0D DUP 0x00 NameStr DB 0x0C,0x00,0x00,0x00 NameLen DB 0x00 DW 272,110,104 DB COLORP.WHITE + COLORI.BLACK Name DB 0x0D DUP 0x00 ;[]==========================================================[] MakeDIRR CALL ResInvert LD HL,SetInvert PUSH HL SETPORT WINSP.Y_PORT,0xC0 MAKEWINDOW WINSUBOBJ.STORE W_MAIN 200,81,240,62 W_FILL 4,2,232,10,COLORI.BLACK W_TEXT 84,3,COLORI.WHITE,"Make directory" W_BUTTON 40,42,72,14 W_TEXT 68,45,COLORP.HIGHGRAY,"Ok" W_BUTTON 128,42,72,14 W_TEXT 148,45,COLORP.HIGHGRAY,"Cancel" W_TEXT 12,25,COLORP.HIGHGRAY,"New directory:" W_BORDER 86,22,134,12 W_FILL 88,23,130,10,COLORI.WHITE W_END LD IX,MakeDIRStr LD HL,REZ2TAB.MakeDIRTab CALL InputLine WINDOWCLOSE RET C LD A,(MDIRLen) OR A RET Z LD HL,NewDIR LD B,A MkDIRlp LD A,(HL) INC HL CP ':' RET Z CP '\\' RET Z DJNZ MkDIRlp CALL PointerMouseClock LD HL,PointerMousePointer PUSH HL BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) JR Z,MkDIR0 PUSH IY POP HL LD DE,PANEL.CURR_PATH ADD HL,DE PUSH IY SPDSS DSSF.CHDIR POP IY PUSH AF CALL C,DOSError POP AF RET C MkDIR0 LD HL,NewDIR PUSH IY SPDSS DSSF.MKDIR POP IY PUSH AF CALL C,DOSError POP AF RET C LD HL,NewDIR LD DE,PrevDIR LD A,(MDIRLen) LD B,A .L1 LD A,(HL) IF CORR_FILENAME CALL CorrSmallChar ENDIF LD (HL),A LD (DE),A INC HL INC DE DJNZ .L1 SUB A LD (DE),A LD A,(TreeFlag) OR A JP Z,MkDIRnxt1 BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) EX AF,AF' PUSH IY LD IY,LeftPanel BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,.L2 LD IY,RightPanel .L2 LD A,(IY + PANEL.FILES_ALL + 1) BIT 2,A JP NZ,MkDIRn0 GETPORT WINSP.CPU3 PUSH AF BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD A,(RAMPAGES.LEFTPANEL) JR Z,.L3 LD A,(RAMPAGES.RIGHTPANEL) .L3 SETPORT WINSP.CPU3,,0 EX AF,AF' JR NZ,FnTree1 BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD HL,LeftPanel JR NZ,.L4 LD HL,RightPanel .L4 LD DE,PANEL.CURR_PATH ADD HL,DE INC HL INC HL CALL FindTreeDIRR JP C,MkDIRn LD HL,0xC001 - 0x10 LD BC,0x0010 .L5 ADD HL,BC BIT 0,(HL) JR Z,.L5 DEC HL JR FnTree2 FnTree1 LD L,(IY + PANEL.FIRST_FILE) LD H,(IY + PANEL.FIRST_FILE + 1) LD E,(IY + PANEL.CURR_FILE) LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL SET 6,H SET 7,H FnTree2 LD E,(HL) LD BC,0x000F ADD HL,BC LD D,(HL) LD (HL),B INC HL INC E LD A,D INC A JR Z,MkDIRend LD A,E AND 0x7F LD IXL,A LD A,(HL) AND 0x7F CP IXL JR NZ,MkDIRend MkDIR10 LD A,(HL) AND 0x7F CP IXL JR Z,MkDIR11 ADD HL,BC INC HL JR MkDIR10 MkDIR11 LD A,(HL) RES 7,(HL) ADD HL,BC LD D,(HL) LD (HL),B INC HL BIT 7,A JR Z,MkDIR10 MkDIR12 LD A,(HL) AND 0x7F CP IXL JR C,MkDIRend ADD HL,BC LD D,(HL) LD (HL),B INC HL LD A,D INC A JR NZ,MkDIR12 MkDIRend PUSH HL PUSH DE LD C,L LD B,H LD L,(IY + PANEL.FILES_ALL) LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL SET 6,H SET 7,H PUSH HL OR A SBC HL,BC LD C,L LD B,H POP HL LD A,L LD D,H ADD A,0x10 LD E,A JR NC,.L1 INC D .L1 LD A,B OR C JR Z,.L2 DEC HL DEC DE LDDR .L2 POP BC POP DE LD A,B EX AF,AF' LD A,C SET 7,A LD (DE),A INC DE SUB A LD (DE),A INC DE LD HL,NewDIR LD C,0x0D .L3 LDI CP (HL) JR NZ,.L3 LD B,C .L4 LD (DE),A INC DE DJNZ .L4 EX AF,AF' LD (DE),A LD L,(IY + PANEL.FILES_ALL) LD H,(IY + PANEL.FILES_ALL + 1) INC HL LD (IY + PANEL.FILES_ALL),L LD (IY + PANEL.FILES_ALL + 1),H LD HL,WorkBuffer PUSH IY SPDSS DSSF.CURDIR POP IY LD HL,BegDIR PUSH IY SPDSS DSSF.CHDIR POP IY JR C,MkDIR2 LD HL,TreeName LD DE,WorkBuffer+0x100 LD A,(FileAtribut) PUSH IY SPDSS DSSF.F_FIRST,0 POP IY JR C,MkDIR2 LD HL,TreeName PUSH IY SPDSS DSSF.CREATE,,0 POP IY JR C,MkDIR2 LD L,(IY + PANEL.FILES_ALL) LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL EX DE,HL LD HL,0xC000 PUSH AF SPDSS DSSF.WRITE POP AF SPDSS DSSF.CLOSE MkDIR2 LD HL,WorkBuffer SPDSS DSSF.CHDIR MkDIRn POP AF SETPORT WINSP.CPU3,,0 MkDIRn0 POP IY BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,MkDIRn1 MkDIRnxt1 CALL ReadDIR CALL FindPrevDIR MkDIRn1 CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) AND VIEWFLAG.MASK PUSH AF CALL Z,DrawHScrollBar POP AF CALL NZ,DrawVScrollBar PUSH IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel JR Z,.L1 LD IY,LeftPanel .L1 BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,MkDIRn2 LD HL,LeftPanel + PANEL.CURR_PATH LD DE,RightPanel + PANEL.CURR_PATH MkDIRrf LD A,(DE) CP (HL) JR NZ,MkDIRex INC HL INC DE LD A,(HL) OR A JR NZ,MkDIRrf LD A,(DE) OR A JR NZ,MkDIRex CALL ReadDIR MkDIRn2 CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) AND VIEWFLAG.MASK PUSH AF CALL Z,DrawHScrollBar POP AF CALL NZ,DrawVScrollBar MkDIRex POP IY RET MakeDIRStr DB 0x0C,0x00,0x00,0x00 MDIRLen DB 0x00 DW 290,106,104 DB COLORP.WHITE + COLORI.BLACK NewDIR DB 0x0D DUP 0x00 ;[]==========================================================[] DeleteFilesR LD A,(IY + PANEL.FILES_ALL) OR (IY + PANEL.FILES_ALL + 1) RET Z SETPORT WINSP.Y_PORT,0xC0 LD A,(IY + PANEL.FILES_MARK) OR (IY + PANEL.FILES_MARK + 1) JR NZ,DeleteMark ; удаление под курсором файла/директории 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 L,(IY + PANEL.FIRST_FILE) LD H,(IY + PANEL.FIRST_FILE + 1) LD E,(IY + PANEL.CURR_FILE) LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR Z,DelFile ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL SET 6,H SET 7,H LD (AdrDelFile),HL INC HL JR DelFil1 DelFile ADD HL,HL ADD HL,HL ADD HL,HL LD E,L LD D,H ADD HL,HL ADD HL,DE SET 6,H SET 7,H LD (AdrDelFile),HL DelFil1 INC HL LD E,(HL) POP AF SETPORT WINSP.CPU3,,0 LD A,E CP '.' ; в имени файла в описателе? странная проверка RET Z CP '\\' ; в имени файла в описателе? еще странней RET Z JR DelNext ; удаление маркированных файлов/директорий DeleteMark 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 HL,0xC000 - FileHDR.SIZE LD BC,FileHDR.SIZE .L2 ADD HL,BC BIT FileHDR.B_MARK,(HL) JR Z,.L2 LD (AdrDelFile),HL POP AF SETPORT WINSP.CPU3,,0 DelNext CALL ResInvert LD HL,SetInvert PUSH HL 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 SUB A LD (DeleteFlag),A DeleteMain MAKEWINDOW WINSUBOBJ.STORE W_MAIN 180,80,280,56 W_FILL 4,2,272,10,COLORI.BLACK W_TEXT 116,3,COLORI.WHITE,"Delete file" W_TEXT 56,16,COLORP.HIGHGRAY,"The following file will be DELETED:" W_BUTTON 16,38,56,14 W_TEXT 28,41,COLORP.HIGHGRAY,"Delete" W_BUTTON 80,38,56,14 W_TEXT 102,41,COLORP.HIGHGRAY,"All" W_BUTTON 144,38,56,14 W_TEXT 162,41,COLORP.HIGHGRAY,"Skip" W_BUTTON 208,38,56,14 W_TEXT 220,41,COLORP.HIGHGRAY,"Cancel" W_END PUSH IY POP HL LD DE,PANEL.CURR_PATH ADD HL,DE LD DE,WorkBuffer SUB A .L1 LDI CP (HL) JR NZ,.L1 LD (DE),A BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,.DelLp0 DEC HL LD A,'\\' CP (HL) JR Z,.L2 LD (DE),A INC DE .L2 CALL MakeDELname .DelLp0 LD IX,248 LD HL,WorkBuffer LD DE,320 LD BC,106 LD A,COLORP.HIGHGRAY + COLORI.BLACK CALL PrintPathCentr DelLoop LD IX,REZ2TAB.DeleteTab CALL CheckCoordsMouse SPDSS DSSF.SCANKEY JR Z,DelLoop LD A,B OR A JR NZ,DelLoop LD A,E CP 0x1B LD HL,DeleteExit JR Z,DelJump CP 0x0D LD HL,DeleteOne JR Z,DelJump RES 5,A CP 'D' LD HL,DeleteOne JR Z,DelJump CP 'A' LD HL,DeleteAll JR Z,DelJump CP 'S' LD HL,DeleteSkip JR Z,DelJump CP 'C' JR NZ,DelLoop LD HL,DeleteExit DelJump WINDOWCLOSE JP (HL) AdrDelFile DEFW 0x0000 DeleteFlag DEFB 0x00 MakeDELname LD HL,(AdrDelFile) INC HL BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JP Z,MakeDOSname INC HL SUB A .L1 LDI CP (HL) JR NZ,.L1 LD (DE),A RET ;-------------------------------------------------------------- ; пропуск удаления DeleteSkip LD C,(IY + PANEL.FILES_MARK) LD B,(IY + PANEL.FILES_MARK + 1) LD A,B OR C JP Z,DeleteExit LD IX,(AdrDelFile) RES 0,(IX + 0x00) LD L,(IY + PANEL.BYTES_MARK) LD H,(IY + PANEL.BYTES_MARK + 1) LD E,(IX + FileHDR.SizeBytes) LD D,(IX + FileHDR.SizeBytes + 1) OR 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) ; [ ] FAT32 LD A,(IY + PANEL.BYTES_MARK_H) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) SBC HL,DE ; [ ] fat32 SBC A,0 LD (IY + PANEL.BYTES_MARK_H),A LD (IY + PANEL.BYTES_MARK + 2),L LD (IY + PANEL.BYTES_MARK + 3),H DEC BC LD (IY + PANEL.FILES_MARK),C LD (IY + PANEL.FILES_MARK + 1),B LD A,B OR C JP Z,DeleteExit LD HL,(AdrDelFile) LD DE,FileHDR.SIZE .L1 ADD HL,DE BIT FileHDR.B_MARK,(HL) JR Z,.L1 LD (AdrDelFile),HL CALL PrintDIR JP DeleteMain ; удаление одного файла/диры DeleteOne CALL PointerMouseClock BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR Z,DelDel0 PUSH IY POP HL LD DE,PANEL.CURR_PATH ADD HL,DE LD DE,WorkBuffer PUSH DE SUB A .L1 LDI CP (HL) JR NZ,.L1 EX DE,HL LD A,'\\' .L2 DEC HL CP (HL) JR NZ,.L2 INC HL LD (HL),0x00 POP HL PUSH IY SPDSS DSSF.CHDIR POP IY PUSH AF CALL C,DOSError POP AF JP C,DeleteExit DelDel0 LD IX,(AdrDelFile) LD DE,WorkBuffer PUSH DE CALL MakeDELname POP HL LD C,DSSF.RMDIR BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) JR NZ,DelDel1 LD A,(IX + FileHDR.Attr) BIT DIR.B_Dir,A JR NZ,DelDel1 LD C,DSSF.DELETE DelDel1 PUSH IY SPDSS POP IY JR NC,DelDel2 CALL DOSError OR A CALL NZ,BegDIRECTORY JP DeleteExit DelDel2 LD A,0x01 LD (DeleteFlag),A CALL PointerMousePointer JP DeleteSkip DeleteAll BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) JR NZ,DeleteOne LD A,0x01 LD (DeleteFlag),A CALL PointerMouseClock MAKEWINDOW WINSUBOBJ.STORE W_MAIN 160,88,320,48 W_FILL 4,2,312,10,COLORI.BLACK W_TEXT 132,3,COLORI.WHITE,"Delete files" W_TEXT 8,16,COLORP.HIGHGRAY,"Delete:" W_BORDER 16,28,288,12 W_FILL 18,29,284,10,COLORI.WHITE W_END PUSH IY POP HL LD DE,PANEL.CURR_PATH ADD HL,DE LD (DelFrom),HL LD IX,ProcessDel LD L,(IY + PANEL.FILES_MARK) LD H,(IY + PANEL.FILES_MARK + 1) LD A,H OR L JR NZ,.L1 INC HL .L1 LD (IX + PROGRESSBAR.MAX_PAGES),L LD (IX + PROGRESSBAR.MAX_PAGES + 1),H SUB A LD (IX + PROGRESSBAR.MAX_PAGES + 2),A LD (IX + PROGRESSBAR.MAX_PAGES + 3),A CALL InitProgressBar DeleteAllLp LD HL,0x0000 DelFrom EQU $-2 LD DE,WorkBuffer SUB A .L1 LDI CP (HL) JR NZ,.L1 DEC HL LD A,'\\' CP (HL) JR Z,.L2 LD (DE),A INC DE .L2 CALL MakeDELname MAKEWINDOW WINSUBOBJ.WOBIND W_FILL 208,104,256,8,COLORI.HIGHGRAY W_END LD IX,256 LD HL,WorkBuffer LD DE,208 LD BC,104 LD A,COLORP.HIGHGRAY + COLORI.BLACK CALL PrintPathLeft SPDSS DSSF.SCANKEY LD HL,SC.ESC << 8 | 0x1B OR A SBC HL,DE JP Z,DeleteAllExit LD IX,(AdrDelFile) LD DE,WorkBuffer PUSH DE CALL MakeDELname POP HL LD A,(IX + FileHDR.Attr) BIT DIR.B_Dir,A LD C,DSSF.DELETE ; удаление файла JR Z,.L3 LD C,DSSF.RMDIR ; удаление директории .L3 PUSH IY SPDSS POP IY JR NC,DelA1 CALL DOSError OR A CALL NZ,BegDIRECTORY JP DeleteAllExit DelA1 LD IX,ProcessDel LD L,(IX + PROGRESSBAR.CURR_PAGE) LD H,(IX + PROGRESSBAR.CURR_PAGE + 1) INC HL LD (IX + PROGRESSBAR.CURR_PAGE),L LD (IX + PROGRESSBAR.CURR_PAGE + 1),H CALL DrawProgressBar LD C,(IY + PANEL.FILES_MARK) LD B,(IY + PANEL.FILES_MARK + 1) LD A,B OR C JP Z,DeleteAllExit LD IX,(AdrDelFile) RES FileHDR.B_MARK,(IX + FileHDR.Flag) LD L,(IY + PANEL.BYTES_MARK) LD H,(IY + PANEL.BYTES_MARK + 1) LD E,(IX + FileHDR.SizeBytes) LD D,(IX + FileHDR.SizeBytes + 1) OR 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) ; [ ] FAT32 LD A,(IY + PANEL.BYTES_MARK_H) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) SBC HL,DE ; [ ] fat32 SBC A,0 LD (IY + PANEL.BYTES_MARK_H),A LD (IY + PANEL.BYTES_MARK + 2),L LD (IY + PANEL.BYTES_MARK + 3),H DEC BC LD (IY + PANEL.FILES_MARK),C LD (IY + PANEL.FILES_MARK + 1),B LD A,B OR C JP Z,DeleteAllExit LD HL,(AdrDelFile) LD DE,FileHDR.SIZE .L1 ADD HL,DE BIT FileHDR.B_MARK,(HL) JR Z,.L1 LD (AdrDelFile),HL JP DeleteAllLp ProcessDel DW 178,117,284,0,0,0,0,0,0 DB COLORP.BLUE + COLORI.WHITE DeleteAllExit HALT WINDOWCLOSE DeleteExit BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,DelTreeDIR1 LD IX,(AdrDelFile) BIT DIR.B_Dir,(IX + FileHDR.Attr) JR NZ,DelTreeDIR DelExt1 POP AF SETPORT WINSP.CPU3,,0 LD HL,PointerMousePointer PUSH HL LD A,(DeleteFlag) OR A JP NZ,RefreshDIR CALL PrintDIR JP PrnFileInfo DelTreeDIR LD A,(TreeFlag) OR A JR Z,DelExt1 DelTreeDIR1 LD A,(DeleteFlag) OR A JR Z,DelExt1 LD DE,DelName CALL MakeDELname POP AF SETPORT WINSP.CPU3,,0 CALL PointerMouseClock LD HL,PointerMousePointer EX (SP),HL PUSH HL BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) EX AF,AF' PUSH IY GETPORT WINSP.CPU3 PUSH AF LD IY,LeftPanel BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,.L1 LD IY,RightPanel .L1 BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD A,(RAMPAGES.LEFTPANEL) JR Z,.L2 LD A,(RAMPAGES.RIGHTPANEL) .L2 SETPORT WINSP.CPU3,,0 EX AF,AF' JR NZ,DelTree1 BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD HL,LeftPanel JR NZ,.L3 LD HL,RightPanel .L3 LD DE,PANEL.CURR_PATH ADD HL,DE INC HL INC HL CALL FindTreeDIRR JP C,DelDIRn LD HL,0xC001-0x10 LD BC,0x0010 .L4 ADD HL,BC BIT 0,(HL) JR Z,.L4 DEC HL LD A,(HL) AND 0x7F INC A LD IXL,A ADD HL,BC DlTree1 LD A,(HL) AND 0x7F CP IXL JR NZ,DlTr31 PUSH HL LD DE,DelName INC HL INC HL DlTree2 LD A,(DE) OR A JR Z,DlTree4 CP (HL) JR NZ,DlTree3 INC HL INC DE JR DlTree2 DlTree3 POP HL BIT 7,(HL) JP NZ,DelDIRn DlTr31 ADD HL,BC JR DlTree1 DlTree4 LD A,(HL) OR A JR NZ,DlTree3 POP HL JR DelTree2 DelTree1 LD L,(IY + PANEL.FIRST_FILE) LD H,(IY + PANEL.FIRST_FILE + 1) LD E,(IY + PANEL.CURR_FILE) LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL SET 6,H SET 7,H DelTree2 LD E,(HL) INC HL LD A,(HL) LD BC,FileHDR.Attr ADD HL,BC LD D,(HL) INC HL EX AF,AF' PUSH DE PUSH HL LD C,L LD B,H LD L,(IY + PANEL.FILES_ALL) LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL SET 6,H SET 7,H OR A SBC HL,BC LD C,L LD B,H POP HL LD D,H LD A,L SUB 0x10 LD E,A JR NC,.L1 DEC D .L1 PUSH DE LD A,B OR C JR Z,.L2 LDIR .L2 POP HL POP DE DEC HL LD (HL),D LD A,L SUB 0x0E LD L,A JR NC,.L3 DEC H .L3 EX AF,AF' OR A JR Z,.L4 LD (HL),A .L4 DEC HL BIT 7,E JR Z,DelTree3 RES 7,E LD BC,0x0010 ADD HL,BC DelTr1 SBC HL,BC LD A,(HL) AND 0x7F CP E JR C,DelTree3 JR NZ,DelTr1 .L1 SET 7,(HL) DelTree3 LD L,(IY + PANEL.FILES_ALL) LD H,(IY + PANEL.FILES_ALL + 1) DEC HL LD (IY + PANEL.FILES_ALL),L LD (IY + PANEL.FILES_ALL + 1),H LD L,(IY + PANEL.FIRST_FILE) LD H,(IY + PANEL.FIRST_FILE + 1) LD E,(IY + PANEL.CURR_FILE) LD D,(IY + PANEL.CURR_FILE + 1) LD A,H OR L JR Z,DelTree4 DEC HL LD (IY + PANEL.FIRST_FILE),L LD (IY + PANEL.FIRST_FILE + 1),H ADD HL,DE LD C,(IY + PANEL.FILES_ALL) LD B,(IY + PANEL.FILES_ALL + 1) INC HL SBC HL,BC JR NC,DelTree4 INC DE DelTree4 LD (IY + PANEL.CURR_FILE),E LD (IY + PANEL.CURR_FILE + 1),D LD HL,WorkBuffer PUSH IY SPDSS DSSF.CURDIR POP IY LD HL,BegDIR PUSH IY SPDSS DSSF.CHDIR POP IY JR C,DelDIR2 LD HL,TreeName LD DE,WorkBuffer + 0x100 LD A,(FileAtribut) PUSH IY SPDSS DSSF.F_FIRST,0 POP IY JR C,DelDIR2 LD HL,TreeName PUSH IY SPDSS DSSF.CREATE,,0 POP IY JR C,DelDIR2 LD L,(IY + PANEL.FILES_ALL) LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL EX DE,HL LD HL,0xC000 PUSH AF SPDSS DSSF.WRITE POP AF SPDSS DSSF.CLOSE DelDIR2 LD HL,WorkBuffer SPDSS DSSF.CHDIR DelDIRn POP AF SETPORT WINSP.CPU3,,0 POP IY BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,DeleteExt1 CALL ReadDIR CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) AND VIEWFLAG.MASK PUSH AF CALL Z,DrawHScrollBar POP AF CALL NZ,DrawVScrollBar PUSH IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel JR Z,.L1 LD IY,LeftPanel .L1 CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL DrawVScrollBar POP IY RET DeleteExt1 INC SP INC SP CALL PrintDIR CALL PrnFileInfo CALL SetInvert PUSH IY POP IX LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar CALL DrawVScrollBar CALL MakeTreePathR PUSH IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel JR Z,.L1 LD IY,LeftPanel .L1 CALL NewDIRECTORY POP IY RET DelName DB 13 DUP 0 ;-------------------------------------------------------------- COPY .PathCurrFile DW 0 ; Адрес описателя текущего файла/диры .PathSrc DW 0 ; Адрес пути источника .PathDst DW 0 ; Адрес пути приемника .PathSrcEnd DW 0 ; Адрес хвоста пути источника .PathDstEnd DW 0 ; Адрес хвоста пути приемника .CopyFiles DW 0 ; Количество копируемых файлов .CopyBytes DB 5 DUP 0 ; Количество копируемых байтов .OverWriteFlg DB 0 ; Флаг перезаписи файлов .FreeBanks DW 0 ; Количество свободных банков .CurrReadBytes DD 0 ; Длина читаемого файла .CurrWriteBytes DD 0 ; Длина записываемого файла .FHandleSrc DB 0 ; Файл источник .FHandleDst DB 0 ; Файл приемник .MemID DB 0 ; Идентификатор памяти под копирование ;--------------------------------------------------------------