flex_nav/rez2_fn_funct.a80
savelij13 8f458146bc - для ошибок у которых нет текста описания теперь выдает всегда
текст ошибки "Unknown Error".
- исправлена ошибка приводящая к вылету при копировании нескольких файлов
  на уже существующие и выборе отмены от продолжения копирования.
2026-01-22 17:36:03 +03:00

2817 lines
52 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; LAST UPDATE: 22.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 ;!!!!!!!!!!!! <20>¥â ¯ ¬ïâ¨
; ¨­¤¨ª æ¨ï ¯à®æ¥áá  ª®¯¨à®¢ ­¨ï
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 ; á®§¤ ­¨¥ ä ©« 
LD (COPY.FHandleDst),A
JR NC,.CopyLp2
CP ERR_DSS.FILE_EXISTS
JP NZ,CopyError2
CALL OverWrite ; ä ©« áãé¥áâ¢ã¥â, § ¯à®á ­  ¯¥à¥§ ¯¨áì
AND A ; OverWrite.REWRITE
JR Z,.CopyLp2 ; ¯à®¤®«¦ âì á ¯¥à¥§ ¯¨áìî
DEC A ; OverWrite.SKIP
JP Z,CopyNextFile.CloseFile1 ; ¯à®¯ã᪠ª®¯¨à®¢ ­¨ï
; ¯à¥à뢠­¨¥ ª®¯¨à®¢ ­¨ï OverWrite.BREAK
LD A,(COPY.FHandleSrc)
SPDSS DSSF.CLOSE
LD A,(COPY.MemID)
SPDSS DSSF.FREEMEM
JP CopyEnd
; ¯¥à¥§ ¯¨áì ä ©«  ¨ ¯à®¤®«¦¥­¨¥
.CopyLp2 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
_INIT_VAR
_SETVAR .REWRITE ; ¯¥à¥§ ¯¨áì ä ©« 
_SETVAR .SKIP ; ¯à®¯ã᪠ª®¯¨à®¢ ­¨ï
_SETVAR .BREAK ; ¯à¥ªà é¥­¨¥ ª®¯¨à®¢ ­¨ï
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
LD (COPY.FHandleDst),A ; ¯à¨ ¯¥à¥§ ¯¨á¨ ®¡­®¢«ï¥¬ 奭¤«¥à ¢ë室­®£® ä ©« 
LD_A OverWrite.REWRITE ; ¢ë室 á ¯¥à¥§ ¯¨áìî ä ©« 
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
LD A,OverWrite.SKIP ; ¢ë室 á ¯à®¯ã᪮¬ ª®¯¨à®¢ ­¨ï
RET
OverExit LD A,OverWrite.BREAK ; ¢ë室 á ¯à¥ªà é¥­¨¥¬ ª®¯¨à®¢ ­¨ï
RET
; 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
; Š®­¢¥àá¨ï à §¬¥à  ¢ ¡ ©â å ¢ ª®«¨ç¥á⢮ áâà ­¨æ
; <20>  ¢å®¤¥:
; DEHL - ª®«¨ç¥á⢮ ¡ ©â
; <20>  ¢ë室¥:
; 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 ; ˆ¤¥­â¨ä¨ª â®à ¯ ¬ï⨠¯®¤ ª®¯¨à®¢ ­¨¥
;--------------------------------------------------------------