File-Manager/MOD2/DELETE.ASM
2025-04-04 00:37:36 +10:00

335 lines
8.8 KiB
NASM
Executable File
Raw 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;===========================================================
;
; <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