mirror of
https://github.com/Tolik-Trek/File-Manager.git
synced 2026-06-15 01:11:36 +03:00
335 lines
8.8 KiB
NASM
Executable File
335 lines
8.8 KiB
NASM
Executable File
;===========================================================
|
||
;
|
||
; <20>à®æ¥áá 㤠«¥¨ï ä ©« /¯ ¯ª¨
|
||
;
|
||
;===========================================================
|
||
delete: call test_show_panels ; â¥áâ ०¨¬ ¢ª«. ¯ ¥«¥©
|
||
ret z
|
||
call get_fire ; § é¨â ®â "§ «¨¯ ¨ï" ¡ãâ®®¢
|
||
ld a,(format_mode) ; ⥪. ä®à¬ â ¯ ¥«¨
|
||
and form_info+form_qview ; info, qview
|
||
ret nz
|
||
xor a
|
||
ld (show_dial_ro_all+1),a ; á¡à. ä« £ ¥ ¢ë¢®¤ ¤¨ «®£ "ä ©« r/o"
|
||
ld de,(mark_files) ; ç¨á«® ¢ë¤¥«. ä ©«®¢
|
||
ld hl,1
|
||
sbc hl,de
|
||
jp c,delete_group_files ; >= 2 ¢ë¤¥«. ä ©«®¢
|
||
call prep_delete_name ; ¨¬ï ä ©« ¢ ®¯¨á â¥«ì ®ª
|
||
ret c ; ".." § ¯¨áì
|
||
call set_path_from_activ_panel ; ãáâ. ¤¨áª ¨ ¯ãâì ªâ. ¯ ¥«¨
|
||
ret c
|
||
; ®ç¨áâ¨âì ¡ãä¥à ª« ¢ë
|
||
ld a,1
|
||
rst 20h
|
||
;
|
||
ld a,(del_confirm) ; ä« £ ¯®¤â¢¥à¦¤¥¨ï
|
||
or a
|
||
jr z,delete_ok
|
||
; ¢ë¢®¤ ç «ì®£® ®ª
|
||
ld hl,dial_delete ; ®¯¨á â¥«ì ®ª
|
||
call DialogW
|
||
cp evCommand ; ᮡë⨥ "ª®¬ ¤ "
|
||
ret nz
|
||
ld a,(hl) ;+1 what
|
||
cp cmOkey ; "Ok"
|
||
ret nz
|
||
delete_ok:
|
||
call deleting_files
|
||
ret c ; ®è¨¡ª¨ ¨«¨ ¯à¥àë¢ ¨¥ ®¯¥à 樨
|
||
jp fresh_two_panels ; ¡¥§ ®è¨¡®ª, ®¡®¢¨âì ¯ ¥«¨
|
||
|
||
|
||
; “„€‹…<E280B9>ˆ… ”€‰‹€/<2F>€<EFBFBD>Šˆ
|
||
; ¢ë室: NC - Ok
|
||
; CF - ¯à¥àë¢ ¨¥ ®¯¥à 樨 ¨«¨ ®è¨¡ª
|
||
; a= -1 ®â¬¥ ®¯¥à 樨
|
||
; a= -2 ®â¬¥ 㤠«¥¨ï ⥪. ¥ ¯ãá⮩ ¯ ¯ª¨
|
||
; a=®¬¥à ª®¬ ¤ë (cmCancel, cmSkip, cmSkipAll)
|
||
deleting_files:
|
||
;
|
||
ld a,(attr_record) ; âਡãâ ä ©« (£«®¡. ï祩ª )
|
||
bit 4,a ; ¯ ¯ª ?
|
||
jr nz,delete1 ; ¤
|
||
bit 0,a ; Read-Only ?
|
||
jr z,delete1 ; ¥â
|
||
show_dial_ro_all:
|
||
ld a,false ; ä« £ ¥ ¢ë¢®¤ ¤¨ «®£ "ä ©« r/o"
|
||
or a
|
||
jr nz,delete_yes1
|
||
; ¢ë¢®¤ ®ª "ä ©« r/o"
|
||
ld hl,delete_name ; ®âªã¤
|
||
ld de,delete_name3 ; ªã¤ (¡ãä¥à 12 ¡ ©â)
|
||
call copy_string ; (hl) -> (de) á ã«¥¬
|
||
ld hl,dial_delete_ro ; "The file is read only"
|
||
call DialogEr
|
||
cp evCommand ; ᮡë⨥ "ª®¬ ¤ "
|
||
ld a,-1 ; ª®¤ "®â¬¥ ®¯¥à 樨"
|
||
scf
|
||
ret nz
|
||
ld a,(hl) ;+1 what
|
||
cp cmOkey ; "Delete"
|
||
jr z,delete_yes1
|
||
cp cmAll ; "All"
|
||
scf
|
||
ret nz ; Cancel, Skip, Skip all
|
||
ld (show_dial_ro_all+1),a ; ãáâ. ä« £
|
||
delete_yes1:
|
||
; áïâì "r/o" âਡãâ
|
||
ld hl,attr_record ; âਡãâ ä ©« (£«®¡. ï祩ª )
|
||
res 0,(hl) ; ®¡®¢¨âì âਡãâ
|
||
ld a,(hl)
|
||
ld hl,temp_fname ; ¨¬ï ä ©« /¯ ¯ª¨
|
||
ld bc,0116h ; ãáâ. âਡãâ ä ©«
|
||
rst 10h
|
||
delete1:
|
||
; ᪮¯¨à. ¨¬ï ä ©« /¯ ¯ª¨ ¢ ®¯¨á â¥«ì ¨ä®-®ª
|
||
ld hl,delete_name ; ®âªã¤
|
||
ld de,delete_name1 ; ªã¤
|
||
call copy_string
|
||
delete_try:
|
||
; ¢ë¢®¤ ¨ä®-®ª ¨¬¥¨ ä ©« /¯ ¯ª¨
|
||
ld hl,dial_delete_current
|
||
call WinSimple ; ®âªàëâì ®ª®
|
||
; 㤠«¥¨¥ ä ©« /¯ ¯ª¨
|
||
ld c,1Ch ; 㤠«¨âì ¯ ¯ªã
|
||
ld a,(attr_record) ; âਡãâ ä ©« (£«®¡. ï祩ª )
|
||
bit 4,a ; ¯ ¯ª ?
|
||
jr nz,$+4 ; ¤
|
||
ld c,0Eh ; 㤠«¨âì ä ©«
|
||
ld hl,temp_fname ; ¨¬ï ä ©« /¯ ¯ª¨
|
||
rst 10h
|
||
; § ªàëâì ¨ä®-®ª®
|
||
push af
|
||
call CloseWinSimple
|
||
pop af
|
||
ret nc ; ä ©« (¯ ¯ª ) 㤠«¥ ¡¥§ ®è¨¡®ª
|
||
; ®è¨¡ª¨
|
||
cp 0Bh ; ¥ ¯ãáâ ï ¯ ¯ª ?
|
||
jr z,folder_not_empty ; ¤
|
||
; ¢ë¢®¤ ®ª ®è¨¡ª¨ 㤠«¥¨ï
|
||
ld hl,delete_name ; ®âªã¤
|
||
ld de,delete_name2 ; ªã¤ (¡ãä¥à 12 ¡ ©â)
|
||
call copy_string ; (hl) -> (de) á ã«¥¬
|
||
ld hl,dial_error_delete ; "Cannot delete the file"
|
||
call DialogEr
|
||
cp evCommand ; ᮡë⨥ "ª®¬ ¤ "
|
||
ld a,-1 ; ª®¤ "®â¬¥ ®¯¥à 樨"
|
||
scf
|
||
ret nz
|
||
ld a,(hl) ;+1 what
|
||
cp cmOkey ; "Retry"
|
||
jr z,delete_try
|
||
scf
|
||
ret ; Cancel, Skip, Skip all
|
||
|
||
|
||
; “¤ «ï¥¬ ï ¯ ¯ª ¥ ¯ãáâ ï
|
||
folder_not_empty:
|
||
ld a,(flag_del_non_empty) ; ä« £ ¯®¤â¢¥à¦¤¥¨ï
|
||
or a
|
||
jr z,delete_full_folder
|
||
; ¢ë¢®¤ ®ª ¯à¥¤ã¯à¥¦¤¥¨ï
|
||
ld hl,delete_name ; ®âªã¤
|
||
ld de,delete_name4 ; ªã¤
|
||
call copy_string
|
||
ld hl,dial_nonempty_delete_folder ; "The following folder will be deleted"
|
||
call DialogEr
|
||
cp evCommand ; ᮡë⨥ "ª®¬ ¤ "
|
||
ld a,-2 ; ®â¬¥ 㤠«¥¨ï ⥪. ¥ ¯ãá⮩ ¯ ¯ª¨
|
||
scf
|
||
ret nz
|
||
ld a,(hl) ;+1 what
|
||
cp cmOkey ; Delete
|
||
ld a,-2 ; ®â¬¥ 㤠«¥¨ï ⥪. ¥ ¯ãá⮩ ¯ ¯ª¨
|
||
scf
|
||
ret nz ; Cancel
|
||
; 㤠«¨âì ¥ ¯ãáâãî ¯ ¯ªã
|
||
delete_full_folder:
|
||
ld a,3 ; ०¨¬ 㤠«¥¨ï
|
||
del_full_fold_rec:
|
||
ld hl,0 ; á®åà. ¤à¥á § ¯¨á¨ (¨§ ¯/¯ "prep_delete_name")
|
||
call scan_folder_alt ; ãáâ. ¯ãâì + ᪠¨à. ¯ ¯ª¨ (qview.asm)
|
||
jr c,delete_full_folder_err
|
||
; <20>¥â ®è¨¡®ª, 㤠«¨âì áâ à⮢ãî ¯ ¯ªã
|
||
; ᪮¯¨à. ¨¬ï ä ©« ¢ ®¯¨á â¥«ì ¨ä®-®ª
|
||
ld hl,temp_fname ; ®âªã¤
|
||
ld de,delete_name1 ; ªã¤
|
||
call copy_cur_fname_alt ; ᪮¯¨à. ¨¬ï ä ©« ¨ ®âæ¥â஢ âì
|
||
; ¢ë¢®¤ ¨ä®-®ª
|
||
ld hl,dial_delete_current
|
||
call WinSimple ; ®âªàëâì ®ª®
|
||
; á®áâ ¢¨âì ¯ãâì áâ à⮢®© ¯ ¯ª¨
|
||
ld hl,(__buff) ; ¯ãâì ªâ. ¯ ¥«¨
|
||
ld de,work_buffer ; ªã¤ (¢ ª®¥æ áâப¨)
|
||
call copy_string
|
||
ex de,hl
|
||
dec hl
|
||
dec hl
|
||
ld a,'\'
|
||
cp (hl)
|
||
jr z,$+3
|
||
inc hl
|
||
ld (hl),a
|
||
inc hl
|
||
ex de,hl ; de=ªã¤
|
||
ld hl,temp_fname ; ®âªã¤ (¨¬ï ¯ ¯ª¨)
|
||
call copy_string
|
||
; 㤠«¨âì ¯ ¯ªã
|
||
ld hl,work_buffer ; ªã¤ (¢ ª®¥æ áâப¨)
|
||
ld c,1Ch ; 㤠«¨âì ¯ ¯ªã
|
||
rst 10h
|
||
; § ªàëâì ¨ä®-®ª®
|
||
call CloseWinSimple
|
||
or a
|
||
ret
|
||
|
||
|
||
delete_full_folder_err:
|
||
; ¢ë室 ¨§ ᪠¨à. ¯® ®è¨¡ª¥
|
||
cp EUABORT ; 37 ª®¤ "®¯¥à æ¨ï ¯à¥à¢ ¯®«ì§®¢ ⥫¥¬"
|
||
scf
|
||
ret z
|
||
; Žª® ®è¨¡ª¨ 㤠«¥¨ï
|
||
; ¢ë¢®¤ ¨¬¥¨ ⥪. ¯ ¯ª¨
|
||
;ld hl,work_buffer+33; ; ®âªã¤
|
||
;ld de,delete_name5; ; ªã¤ (¡ãä¥à 12 ¡ ©â)
|
||
;call copy_cur_fname_alt; ; ᪮¯¨à. ¨¬ï ä ©« ¨ ®âæ¥â஢ âì
|
||
; ¢ë¢®¤ ¨¬¥¨ áâ à⮢®© ¯ ¯ª¨
|
||
ld hl,delete_name ; ®âªã¤
|
||
ld de,delete_name5 ; ªã¤
|
||
call copy_string
|
||
ld hl,dial_error_delete_tiny ; "Cannot delete the file or folder"
|
||
call DialogEr
|
||
ld a,-1 ; ª®¤ "®â¬¥ ®¯¥à 樨"
|
||
scf
|
||
ret
|
||
|
||
|
||
|
||
; ‘ª®¯¨à®¢ âì ⥪. ¨¬ï 㤠«ï¥¬®£® ä ©« /¯ ¯ª¨ ¢ ®¯¨á â¥«ì ®ª .
|
||
; Ž¡à ¡®âª ¬ ªá. ®¤®© ¢ë¤¥«. § ¯¨á¨
|
||
prep_delete_name:
|
||
ld de,(mark_files) ; ç¨á«® ¢ë¤¥«. ä ©«®¢
|
||
ld a,d
|
||
or e
|
||
jr nz,prep_del_name1 ; ¥áâì ®¤¨ ¢ë¤¥«. ä ©«
|
||
; ¥â ¢ë¤¥«. ä ©«®¢
|
||
call get_record ; § ¯¨áì ¢ ⥪. ¯®«®¦¥¨¨ 㪠§ ⥫ï
|
||
ld (attr_record),a ; âਡãâ ä ©« (£«®¡. ï祩ª )
|
||
ld (del_full_fold_rec+1),hl
|
||
ld a,(hl)
|
||
cp "." ; ".."
|
||
scf
|
||
ret z
|
||
jr $+5
|
||
prep_del_name1:
|
||
call scan_mark_records ; ¯®¨áª ®â¬¥ç. ä ©« (á ç « ᯨ᪠)
|
||
prep_del_name2:
|
||
ld (del_full_fold_rec+1),hl
|
||
; ¢å®¤: hl=§ ¯¨áì ä ©«
|
||
ld bc,delete_name ; ªã¤ (¡ãä¥à 12 ¡ ©â)
|
||
jp copy_cur_fname ; ᪮¯¨à. ¨¬ï ä ©« ¨ ®âæ¥â஢ âì
|
||
|
||
|
||
;======== <20>«®ª à ¡®â ¥â ¢ á®áâ ¢¥ ScanTree ===============
|
||
; “¤ «¥¨¥ ⥪ã饣® ä ©«
|
||
delete_file:
|
||
push ix
|
||
; ᪮¯¨à. ¨¬ï ä ©« ¢ ®¯¨á â¥«ì ¨ä®-®ª
|
||
ld hl,work_buffer+33 ; ®âªã¤
|
||
ld de,delete_name1 ; ªã¤
|
||
call copy_cur_fname_alt ; ᪮¯¨à. ¨¬ï ä ©« ¨ ®âæ¥â஢ âì
|
||
; ¢ë¢®¤ ¨ä®-®ª
|
||
ld hl,dial_delete_current
|
||
call WinSimple ; ®âªàëâì ®ª®
|
||
;
|
||
ld hl,work_buffer+32 ; âਡãâ ©¤. § ¯¨á¨
|
||
ld a,(hl)
|
||
bit 0,a ; Read-Only ?
|
||
jr z,delete_file_next ; ¥â
|
||
; áïâì "r/o" âਡãâ
|
||
res 0,(hl) ; ®¡®¢¨âì âਡãâ
|
||
ld a,(hl)
|
||
inc hl ; +33 (¨¬ï ä ©« )
|
||
ld bc,0116h ; ãáâ. âਡãâ ä ©«
|
||
push af
|
||
rst 10h
|
||
pop af
|
||
delete_file_next:
|
||
ld c,0Eh ; 㤠«¨âì ä ©«
|
||
delete_file_next1:
|
||
ld hl,work_buffer+33 ; ¨¬ï ä ©«
|
||
rst 10h
|
||
push af
|
||
; § ªàëâì ¨ä®-®ª®
|
||
call CloseWinSimple
|
||
pop af
|
||
pop ix
|
||
ret
|
||
|
||
; “¤ «¥¨¥ ⥪ã饩 ¯ ¯ª¨
|
||
; ¢å: hl= ¤à¥á ¨¬¥¨ ⥪. ¯ ¯ª¨
|
||
delete_folder:
|
||
push ix
|
||
; ᪮¯¨à. ¨¬ï ¯ ¯ª¨ ¢ ®¯¨á â¥«ì ¨ä®-®ª
|
||
ld de,delete_name1 ; ªã¤
|
||
call copy_cur_fname_alt ; ᪮¯¨à. ¨¬ï ä ©« ¨ ®âæ¥â஢ âì
|
||
;
|
||
ld hl,work_buffer+33
|
||
ld c,1Eh ; ã§ âì ¯ãâì
|
||
rst 10h
|
||
; ¢ë¢®¤ ¨ä®-®ª
|
||
ld hl,dial_delete_current
|
||
call WinSimple ; ®âªàëâì ®ª®
|
||
ld c,1Ch ; 㤠«¨âì ¯ ¯ªã
|
||
jr delete_file_next1
|
||
;========================================================
|
||
|
||
|
||
|
||
|
||
|
||
|
||
;--------------------------------------------------------------
|
||
; ƒà㯯®¢®¥ 㤠«¥¨¥ ä ©«®¢/¯ ¯®ª
|
||
;--------------------------------------------------------------
|
||
delete_group_files:
|
||
call set_path_from_activ_panel ; ãáâ. ¤¨áª ¨ ¯ãâì ªâ. ¯ ¥«¨
|
||
ret c
|
||
; ©â¨ ®â¬¥ç. ä ©« (á ç « ᯨ᪠) + ª®¯¨à. ¨ æ¥â஢ª ¨¬¥¨
|
||
call prep_del_name1 ; ©â¨ ®â¬¥ç. ä ©« + æ¥â஢ª ¨¬¥¨
|
||
;
|
||
ld a,(del_confirm) ; ä« £ ¯®¤â¢¥à¦¤¥¨ï
|
||
or a
|
||
jr z,delete_group_loop
|
||
; ¢ë¢®¤ ç «ì®£® ®ª
|
||
ld hl,dial_delete ; ®¯¨á â¥«ì ®ª
|
||
call DialogW
|
||
cp evCommand ; ᮡë⨥ "ª®¬ ¤ "
|
||
ret nz
|
||
ld a,(hl) ;+1 what
|
||
cp cmOkey ; "Ok"
|
||
ret nz
|
||
delete_group_loop:
|
||
call deleting_files ; 㤠«¨âì ⥪. ä ©«/¯ ¯ªã
|
||
jr nc,delete_group_next ; ¯à®æ¥áá Ok
|
||
; ®â¬¥ ®¯¥à 樨 ¨«¨ ®è¨¡ª
|
||
cp -1 ; ®â¬¥ ®¯¥à 樨 ?
|
||
jp z,fresh_two_panels ; ¤ , ®¡®¢¨âì ¯ ¥«¨
|
||
cp -2 ; ®â¬¥ 㤠«¥¨ï ⥪. ¥ ¯ãá⮩ ¯ ¯ª¨
|
||
jr z,delete_group_next
|
||
cp cmSkipAll ; Skip all
|
||
jp z,fresh_two_panels
|
||
cp cmSkip ; Skip
|
||
jr z,delete_group_next
|
||
cp EUABORT ; 37 ª®¤ "®¯¥à æ¨ï ¯à¥à¢ ¯®«ì§®¢ ⥫¥¬"
|
||
jp nz,fresh_two_panels ; Cancel
|
||
call set_path_from_activ_panel ; ãáâ. áâ àâ®¢ë© ¯ãâì
|
||
jp c,fresh_two_panels ; ®è¨¡ª , ®¡®¢¨âì ¯ ¥«¨
|
||
delete_group_next:
|
||
call scan_mark_loop ; ¯®¨áª ®â¬¥ç. ä ©« (á«¥¤. ¯® ᯨáªã)
|
||
jp c,fresh_two_panels ; ¥â ®â¬¥ç. § ¯¨á¥©, ®¡®¢¨âì ¯ ¥«¨
|
||
call prep_del_name2 ; ©â¨ á«¥¤. ®â¬¥ç. § ¯¨áì + æ¥â஢ª ¨¬¥¨
|
||
jr delete_group_loop
|