; LAST UPDATE: 25.07.2025 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 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 LD E,L LD D,H ADD HL,HL ; *10 ADD HL,DE ; *18 SET 6,H SET 7,H ; | 0xC000 LD (AdrCopyFile),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,COPY_DIR ELSE RET NZ ENDIF LD HL,0 LD (CopyFiles),HL LD L,(IX + FileHDR.SizeBytes) LD H,(IX + FileHDR.SizeBytes + 1) LD (CopyBytes),HL LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) LD (CopyBytes + 2),DE CALL ConvBytes2Pages JP CopyNxt IF MARK_DIR ; копирование диры со всем содержимым COPY_DIR PUSH IX PUSH IY PUSH IX LD HL,(AdrCopyFile) ; адрес описателя измеряемой диры CALL RESIDENT.GetDirSize ; считаем и получаем размер в байтах EXX POP HL ; адрес описателя LD (CopyBytes),DE LD (CopyBytes + 2),BC PUSH DE LD DE,FileHDR.SizeBytes ADD HL,DE ; указатель на количество байт копирования POP DE CALL SET_DWORD ; занесли размер диры в байтах в описатель LD HL,0 LD (CopyFiles),HL EX DE,HL LD D,B LD E,C CALL ConvBytes2Pages ; пересчет в количество страниц для копирования ; LD HL,(AdrCopyFile) ; адрес описателя копируемой диры ; CALL RESIDENT.MkdirsDst ; создание папок на приемнике POP IY POP IX RET ENDIF ; копирование помеченных файлов CopyMark LD L,(IY + PANEL.FILES_MARK) LD H,(IY + PANEL.FILES_MARK + 1) LD (CopyFiles),HL LD L,(IY + PANEL.BYTES_MARK) LD H,(IY + PANEL.BYTES_MARK + 1) LD (CopyBytes),HL LD L,(IY + PANEL.BYTES_MARK + 2) LD H,(IY + PANEL.BYTES_MARK + 3) LD (CopyBytes + 2),HL ; [ ] fat32 LD A,(IY + PANEL.BYTES_MARK_H) LD (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 (AdrCopyFile),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 LD C,L LD B,H POP HL ADD HL,BC LD C,E LD B,D POP DE 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 + PROC.MAX_PAGES),L LD (IX + PROC.MAX_PAGES + 1),H LD (IX + PROC.MAX_PAGES + 2),E LD (IX + PROC.MAX_PAGES + 3),D CALL InitProcess 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 DE,CurPath SUB A LD C,A .L2 LDI CP (HL) JR NZ,.L2 LD (DE),A SUB A SUB C LD (PathLen),A LD IX,PathStr LD HL,PathTab CALL InputLine WINDOWCLOSE RET C LD A,(PathLen) OR A RET Z PUSH IY SPDSS DSSF.INFOMEM POP IY LD (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 SUB A LD (OverWriteFlg),A BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD HL,LeftPanel JR Z,.L4 LD HL,RightPanel .L4 LD BC,PANEL.CURR_PATH ADD HL,BC LD (CopySrc),HL LD HL,CurPath LD (CopyDst),HL CALL SetClock PUSH IY 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 CopyNextFile CALL PrnFromTo LD IX,(AdrCopyFile) LD L,(IX + FileHDR.SizeBytes) LD H,(IX + FileHDR.SizeBytes + 1) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) LD (ReadBytes),HL LD (ReadBytes + 2),DE LD (WriteBytes),HL LD (WriteBytes + 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 + PROC.MAX_PAGES),L LD (IX + PROC.MAX_PAGES + 1),H LD (IX + PROC.MAX_PAGES + 2),E LD (IX + PROC.MAX_PAGES + 3),D CALL InitProcess CALL PrnProcess LD HL,(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 (MemID),A LD HL,PagesList SPBIOS BIOSF.GETMEMBLKPAGES LD HL,(CopySrc) ; Открываем файл источник SPDSS DSSF.CHDIR JP C,CopyError1 LD HL,(AdrCopyFile) INC HL LD DE,WorkBuffer PUSH DE CALL MakeDOSname POP HL SPDSS DSSF.OPEN,,1 JP C,CopyError1 LD (FHandleSrc),A LD HL,(CopyDst) ; Открываем файл приемник SPDSS DSSF.CHDIR JP C,CopyError2 LD IX,(AdrCopyFile) LD HL,(AdrCopyFile) INC HL LD DE,WorkBuffer PUSH DE CALL MakeDOSname POP HL LD A,(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 0x07 JP NZ,CopyError2 CALL OverWrite CopyLp2 LD (FHandleDst),A LD HL,(ReadBytes) LD A,H OR L LD HL,(ReadBytes + 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,(ReadBytes) LD DE,(ReadBytes + 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 (ReadBytes),HL LD (ReadBytes + 2),DE LD HL,0xC000 LD DE,0x4000 LD A,(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,(ReadBytes) LD A,D OR E JR Z,.L1 LD A,(FHandleSrc) SPDSS DSSF.READ CALL NextProcess .L1 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,(WriteBytes) LD DE,(WriteBytes + 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 (WriteBytes),HL LD (WriteBytes + 2),DE LD HL,0xC000 LD DE,0x4000 LD A,(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,(ReadBytes) LD A,H OR L LD HL,(ReadBytes + 2) OR H OR L JR Z,CloseFiles JP ReadFile ; !FIXIT сделать так: WriteEnd: LD HL,0xC000 LD DE,(WriteBytes) LD A,D OR E JR Z,.L1 LD A,(FHandleDst) SPDSS DSSF.WRITE JP C,CopyError3 CALL NextProcess .L1 POP HL POP AF SETPORT WINSP.CPU3,,0 CloseFiles LD A,(FHandleSrc) SPDSS DSSF.GET_D_T LD A,(FHandleDst) SPDSS DSSF.PUT_D_T LD A,(FHandleDst) SPDSS DSSF.CLOSE CloseFile1 LD A,(FHandleSrc) SPDSS DSSF.CLOSE LD A,(MemID) SPDSS DSSF.FREEMEM LD IX,(AdrCopyFile) RES FileHDR.B_MARK,(IX + FileHDR.Flag) LD HL,(CopyBytes) LD E,(IX + FileHDR.SizeBytes) LD D,(IX + FileHDR.SizeBytes + 1) OR A SBC HL,DE LD (CopyBytes),HL LD HL,(CopyBytes+2) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) SBC HL,DE LD (CopyBytes+2),HL LD HL,(CopyFiles) LD A,H OR L JR Z,CopyEnd DEC HL LD (CopyFiles),HL LD A,H OR L JR Z,CopyEnd LD HL,(AdrCopyFile) LD DE,FileHDR.SIZE .L1 ADD HL,DE BIT FileHDR.B_MARK,(HL) JR Z,.L1 LD (AdrCopyFile),HL JP CopyNextFile CopyEnd POP AF SETPORT WINSP.CPU3,,0 POP IY WINDOWCLOSE LD HL,(CopyFiles) LD (IY + PANEL.FILES_MARK),L LD (IY + PANEL.FILES_MARK + 1),H LD HL,(CopyBytes) LD (IY + PANEL.BYTES_MARK),L LD (IY + PANEL.BYTES_MARK + 1),H LD HL,(CopyBytes + 2) LD (IY + PANEL.BYTES_MARK + 2),L LD (IY + PANEL.BYTES_MARK + 3),H ; [ ] fat32 LD A,(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 JP C,BegDIRECTORY CALL PrintDIR CALL PrnFileInfo JP SetMouse CopyError3: ; Если нет места на диске для копирования ;!FIXIT оптимизировать POP HL ; снимаем лишнее POP DE ; тут лежит AF PUSH AF LD A,D SETPORT WINSP.CPU3,,0 LD A,(FHandleDst) SPDSS DSSF.CLOSE CALL CopyErrorFileDelete POP AF CopyError2 PUSH AF LD A,(FHandleSrc) SPDSS DSSF.CLOSE POP AF CopyError1 PUSH AF LD A,(MemID) SPDSS DSSF.FREEMEM POP AF CALL DOSError JP CopyEnd CopyBreak POP HL POP AF SETPORT WINSP.CPU3,,0 LD A,(FHandleDst) SPDSS DSSF.CLOSE LD A,(FHandleSrc) SPDSS DSSF.CLOSE LD A,(MemID) SPDSS DSSF.FREEMEM CALL CopyErrorFileDelete JP CopyEnd CopyErrorFileDelete: LD IX,(AdrCopyFile) LD HL,(AdrCopyFile) 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 SetMouse 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,(CopyDst) 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,(AdrCopyFile) INC HL CALL MakeDOSname LD IX,0x00F8 LD HL,WorkBuffer LD DE,320 LD BC,114 LD A,COLORP.HIGHGRAY + COLORI.BLACK CALL PrnRangPathC OvWrtLp LD IX,OverWrtTab CALL TestCoords 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 (OverWriteFlg),A OverWrtFile CALL SetClock LD IX,(AdrCopyFile) LD HL,(AdrCopyFile) INC HL LD DE,WorkBuffer PUSH DE CALL MakeDOSname POP HL LD A,(IX + FileHDR.Attr) SPDSS DSSF.CREATE RET OverSkip CALL SetClock LD IX,(AdrCopyFile) 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 + PROC.CURR_PAGE) LD B,(IX + PROC.CURR_PAGE + 1) ADD HL,BC LD (IX + PROC.CURR_PAGE),L LD (IX + PROC.CURR_PAGE + 1),H LD C,(IX + PROC.CURR_PAGE + 2) LD B,(IX + PROC.CURR_PAGE + 3) EX DE,HL ADC HL,BC LD (IX + PROC.CURR_PAGE + 2),L LD (IX + PROC.CURR_PAGE + 3),H CALL PrnProcess LD HL,CloseFile1 EX (SP),HL RET OverExit INC SP INC SP LD IX,(AdrCopyFile) BIT FileHDR.B_MARK,(IX + FileHDR.Flag) JP Z,CloseFile1 LD A,(FHandleSrc) SPDSS DSSF.CLOSE LD A,(MemID) SPDSS DSSF.FREEMEM POP IY JP CopyEnd ;-------------------------------------------------------------- AdrCopyFile DW 0x0000 ; Адрес описателя текущего файла/диры CopySrc DW 0x0000 ; Адрес пути откуда CopyDst DW 0x0000 ; Адрес пути куда CopyFiles DW 0x0000 ; Количество копируемых файлов CopyBytes DB 5 DUP 0 ; Количество копируемых байтов OverWriteFlg DB 0x00 ; Флаг перезаписи файлов FreeBanks DW 0x0000 ; Количество свободных банков ReadBytes DD 0 ; Длина читаемого файла WriteBytes DD 0 ; Длина записываемого файла FHandleSrc DB 0x00 ; Файл источник FHandleDst DB 0x00 ; Файл приемник MemID DB 0x00 ; Индефик.памяти под копирование ;-------------------------------------------------------------- ; На входе: ; DEHL - количество байт ; На выходе: ; HL - количество страниц ; 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 ConvBytes2Pages: LD A,H LD H,L LD L,0x00 SLA A RL E RL D RL L ; LDEA * 2 SLA A RL E RL D RL L ; LDEA * 2 OR H LD H,0x00 EX DE,HL JR Z,.L1 INC HL .L1 LD A,H OR L RET NZ INC DE RET PrnFromTo LD HL,(CopySrc) 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,(AdrCopyFile) INC HL CALL MakeDOSname LD HL,(CopyDst) 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,(AdrCopyFile) INC HL CALL MakeDOSname MAKEWINDOW WINSUBOBJ.WOBIND W_FILL 204,97,256,18,COLORI.HIGHGRAY W_END LD IX,0x0100 LD HL,WorkBuffer LD DE,204 LD BC,97 LD A,COLORP.HIGHGRAY + COLORI.BLACK CALL PrnRangPathL LD IX,0x0100 LD HL,WorkBuffer+0x100 LD DE,204 LD BC,107 LD A,COLORP.HIGHGRAY + COLORI.BLACK JP PrnRangPathL NextProcess LD IX,ProcessAll LD L,(IX + PROC.CURR_PAGE) LD H,(IX + PROC.CURR_PAGE + 1) INC HL LD (IX + PROC.CURR_PAGE),L LD (IX + PROC.CURR_PAGE + 1),H LD A,H OR L JR NZ,.L1 LD L,(IX + PROC.CURR_PAGE + 2) LD H,(IX + PROC.CURR_PAGE + 3) INC HL LD (IX + PROC.CURR_PAGE + 2),L LD (IX + PROC.CURR_PAGE + 3),H .L1 CALL PrnProcess LD IX,ProcessOne LD L,(IX + PROC.CURR_PAGE) LD H,(IX + PROC.CURR_PAGE + 1) INC HL LD (IX + PROC.CURR_PAGE),L LD (IX + PROC.CURR_PAGE + 1),H LD A,H OR L JR NZ,.L2 LD L,(IX + PROC.CURR_PAGE + 2) LD H,(IX + PROC.CURR_PAGE + 3) INC HL LD (IX + PROC.CURR_PAGE + 2),L LD (IX + PROC.CURR_PAGE + 3),H .L2 JP PrnProcess 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 0x80,0x00,0x00,0x00 PathLen DB 0x00 DW 170,106,324 DB 0xF0 CurPath DB 0x81 DUP 0 ;[]==========================================================[] 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 ; LD A,H ; OR 0xC0 ; LD H,A SET 6,H SET 7,H INC HL INC HL LD DE,CurName LD BC,0x000D LDIR LD A,DIR.M_Dir;0x10 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 ; LD A,H ; OR 0xC0 ; LD H,A SET 6,H SET 7,H ; | 0xC000 PUSH HL INC HL LD DE,CurName CALL MakeDOSname POP HL LD BC,FileHDR.Attr;0x000E 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,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 SetClock LD HL,SetMouse 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,PrnHScrBar POP AF CALL NZ,PrnVScrBar 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,PrnHScrBar POP AF CALL NZ,PrnVScrBar 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 ; LD A,H ; OR 0xC0 ; LD H,A 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 IF TREE_REZID CALL FindTreeDIRR ELSE CALL FindTreeDIRR ENDIF JP C,ReNameT LD HL,0xC001 - 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,PrnHScrBar POP AF CALL NZ,PrnVScrBar 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 PrnVScrBar 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 PrnVScrBar IF TREE_REZID CALL TestTreeR.TestTreeBeg ELSE CALL TestTreeR.TestTreeBeg ENDIF PUSH IY IF TREE_REZID CALL MakeTreePathR ELSE CALL MakeTreePathR ENDIF 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,PrnHScrBar POP AF CALL NZ,PrnVScrBar 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,PrnHScrBar POP AF CALL NZ,PrnVScrBar 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,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 SetClock LD HL,SetMouse 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 IF TREE_REZID CALL FindTreeDIRR ELSE CALL FindTreeDIRR ENDIF 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 ; LD A,H ; OR 0xC0 ; LD H,A 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 ; LD A,H ; OR 0xC0 ; LD H,A 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,PrnHScrBar POP AF CALL NZ,PrnVScrBar 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,PrnHScrBar POP AF CALL NZ,PrnVScrBar 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 ; LD A,H ; OR 0xC0 ; LD H,A 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 ; LD A,H ; OR 0xC0 ; LD H,A 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,0x00F8 LD HL,WorkBuffer LD DE,320 LD BC,106 LD A,COLORP.HIGHGRAY + COLORI.BLACK CALL PrnRangPathC DelLoop LD IX,DeleteTab CALL TestCoords SPDSS DSSF.SCANKEY JR Z,DelLoop LD A,B OR A JR NZ,DelLoop LD A,E CP 0x1B LD HL,DelExit JR Z,DelJump CP 0x0D LD HL,DelDelete JR Z,DelJump RES 5,A CP 'D' LD HL,DelDelete JR Z,DelJump CP 'A' LD HL,DelAll JR Z,DelJump CP 'S' LD HL,DelSkip JR Z,DelJump CP 'C' JR NZ,DelLoop LD HL,DelExit DelJump WINDOWCLOSE JP (HL) AdrDelFile DEFW 0x0000 DeleteFlag DEFB 0x00 MakeDELname LD HL,(AdrDelFile) INC HL BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) ; JR NZ,MakeDELn1 JP Z,MakeDOSname ;MakeDELn1 INC HL SUB A .L1 LDI CP (HL) JR NZ,.L1 LD (DE),A RET ;-------------------------------------------------------------- DelSkip LD C,(IY + PANEL.FILES_MARK) LD B,(IY + PANEL.FILES_MARK + 1) LD A,B OR C JP Z,DelExit 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,DelExit 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 DelDelete CALL SetClock 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,DelExit DelDel0 LD IX,(AdrDelFile) LD DE,WorkBuffer PUSH DE CALL MakeDELname POP HL LD C,DSSF.RMDIR ;0x1C ;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 ;0x0E ;DELETE DelDel1 PUSH IY SPDSS POP IY JR NC,DelDel2 CALL DOSError OR A CALL NZ,BegDIRECTORY JP DelExit DelDel2 LD A,0x01 LD (DeleteFlag),A CALL SetMouse JP DelSkip DelAll BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) JR NZ,DelDelete LD A,0x01 LD (DeleteFlag),A CALL SetClock 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 + PROC.MAX_PAGES),L LD (IX + PROC.MAX_PAGES + 1),H SUB A LD (IX + PROC.MAX_PAGES + 2),A LD (IX + PROC.MAX_PAGES + 3),A CALL InitProcess 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,0x0100 LD HL,WorkBuffer LD DE,208 LD BC,104 LD A,COLORP.HIGHGRAY + COLORI.BLACK CALL PrnRangPathL SPDSS DSSF.SCANKEY LD HL,SC.ESC << 8 | 0x1B OR A SBC HL,DE JP Z,DelAllExit 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 ;0x0E ;DELETE JR Z,.L3 LD C,DSSF.RMDIR ;0x1C ;RMDIR .L3 PUSH IY SPDSS POP IY JR NC,DelA1 CALL DOSError OR A CALL NZ,BegDIRECTORY JP DelAllExit DelA1 LD IX,ProcessDel LD L,(IX + PROC.CURR_PAGE) LD H,(IX + PROC.CURR_PAGE + 1) INC HL LD (IX + PROC.CURR_PAGE),L LD (IX + PROC.CURR_PAGE + 1),H CALL PrnProcess LD C,(IY + PANEL.FILES_MARK) LD B,(IY + PANEL.FILES_MARK + 1) LD A,B OR C JP Z,DelAllExit 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,DelAllExit 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 DW 117 DW 284 DW 0 DW 0 DW 0 DW 0 DW 0 DW 0 DB COLORP.BLUE + COLORI.WHITE DelAllExit HALT WINDOWCLOSE DelExit 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,SetMouse 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 SetClock LD HL,SetMouse 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 IF TREE_REZID CALL FindTreeDIRR ELSE CALL FindTreeDIRR ENDIF 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 ; LD A,H ; OR 0xC0 ; LD H,A SET 6,H SET 7,H DelTree2 LD E,(HL) INC HL LD A,(HL) LD BC,FileHDR.Attr;0x000E 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 ; LD A,H ; OR 0xC0 ; LD H,A 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,PrnHScrBar POP AF CALL NZ,PrnVScrBar 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 PrnVScrBar 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 PrnVScrBar IF TREE_REZID CALL MakeTreePathR ELSE CALL MakeTreePathR ENDIF 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 ;[]==========================================================[] QuitConfirmWin MAKEWINDOW WINSUBOBJ.STORE W_MAIN 208,88,224,50 W_FILL 4,2,216,10,COLORI.BLACK W_TEXT 104,3,COLORI.WHITE,"Quit" W_TEXT 28,19,COLORP.HIGHGRAY,"Do you want quit Flex Navigator ?" W_BUTTON 32,32,72,14 W_TEXT 58,35,COLORP.HIGHGRAY,"Yes" W_BUTTON 120,32,72,14 W_TEXT 150,35,COLORP.HIGHGRAY,"No" W_END .Loop LD IX,QuitTab CALL TestCoords SPDSS DSSF.SCANKEY JR Z,.Loop LD A,B OR A JR NZ,.Loop LD A,E CP 0x1B JR Z,.Abort CP 0x0D JR Z,.OK RES 5,A CP 'Y' JR Z,.OK CP 'N' JR NZ,.Loop .Abort WINDOWCLOSE SCF RET .OK WINDOWCLOSE OR A RET