mirror of
https://github.com/Tolik-Trek/File-Manager.git
synced 2026-06-15 01:11:36 +03:00
340 lines
8.2 KiB
NASM
Executable File
340 lines
8.2 KiB
NASM
Executable File
; ‘ª ¨à®¢ ¨¥ ¯ ¯ª¨
|
||
;
|
||
; „«ï ¢à¥¬. ¡ãä¥à ¢ë¤¥«ï¥âáï 1 áâà ¨æ ¯ ¬ïâ¨. <20>®á«¥ ®âà ¡®âª¨ ¯à®æ¥¤ãàë,
|
||
; áâà ¨æ ®á¢®¡®¦¤ ¥âáï.
|
||
; Œ ªá. £«ã¡¨ ¢«®¦¥®á⨠¯ ¯®ª à ¢ 20-⨠(¬®¦® ¯®áâ ¢¨âì ¤à㣮¥).
|
||
; „«ï ¬ áᨢ í«¥¬¥â®¢ ¨á¯®«ì§ã¥âáï æ¥« ï ¡ ª , ¢¬¥é îé ï 1024
|
||
; (16*1024=4000h) í«¥¬¥â®¢. ޡ饥 ç¨á«® ¯ ¯®ª, ®âá«¥¦¨¢ ¥¬®¥ ¯à®æ¥¤ãன,
|
||
; ®à£ ¨ç¨¢ ¥âáï à §¬¥à®¬ í⮣® ¬ áᨢ .
|
||
;
|
||
; <20>¥à¥¤ ¢ë§®¢®¬ ¯à®æ¥¤ãàë, ¥®¡å®¤¨¬® ãáâ ®¢¨âì ¤¨áª ¨ ¯ãâì.
|
||
;
|
||
|
||
|
||
|
||
|
||
|
||
max_depth equ 20+1 ; ¬ ªá. ç¨á«® ¢«®¦¥®á⨠¯ ¯®ª
|
||
|
||
|
||
;-----------------------------------------------------------
|
||
; ‘ª ¨à®¢ ¨¥ ¯ ¯ª¨
|
||
; ¢ë室: NC - ®à¬ «ì®¥ § ¢¥à襨¥
|
||
; C - ®¯¥à æ¨ï ¯à¥à¢ ¯®«ì§®¢ ⥫¥¬ (A=0FFh)
|
||
;-----------------------------------------------------------
|
||
ScanTree:
|
||
ld (tree_stack),sp
|
||
ld bc,3135h ; ®ç¨áâ¨âì ¡ãä¥à á¨áâ. ª« ¢ë
|
||
rst ToDSS
|
||
ld sp,work_buffer+512 ; á⥪ ¯à®æ¥¤ãàë
|
||
in a,(SLOT3)
|
||
ld (tree_page),a ; á®åà. ¯®àâ
|
||
; ¢ë¤¥«¨âì 1 áâà. ¯®¤ ¢à¥¬. ¡ãä¥à
|
||
ld bc,01C2h
|
||
rst 08h
|
||
ld (tmppage+1),a ; á®åà. ¤¥áªà. áâà.
|
||
jr nc,$+9 ; ¡¥§ ®è¨¡®ª
|
||
xor a
|
||
ld (tmppage+1),a
|
||
ld a,(page_dial_screen) ; ¨á¯. ¤«ï ¢à¥¬. ¡ãä¥à
|
||
out (SLOT3),a
|
||
xor a
|
||
ld l,a
|
||
ld h,a
|
||
ld (depth_tree),a ; á¡à. ®¬¥à ãà®¢ï ¢«®¦¥¨©
|
||
ld (count_dirs),hl ; á¡à. ç¨á«® ¯ ¯®ª
|
||
ld (count_files),hl ; á¡à. ç¨á«® ä ©«®¢
|
||
ld (size_files),hl ; á¡à. à §¬¥à ä ©«®¢
|
||
ld (size_files+2),hl
|
||
push hl ; ⥪. í«¥¬¥â (ª®à¥ì) ¢ á⥪
|
||
ld (cur_tree_adr+1),hl ; ¨¨â. ï祩ªã
|
||
ld hl,LC000+16 ; ç «® ¡ãä¥à í«¥¬¥â®¢ ¢«®¦¥¨©
|
||
ld (end_tree),hl ; ç «® á«¥¤. 16-⨠¡ ©â®£® í«¥¬¥â
|
||
ld b,16 ; à §¬¥à í«¥¬¥â ¢«®¦¥¨©
|
||
ld (hl),a ; a=0
|
||
inc hl
|
||
djnz $-2
|
||
call scan_cur_level ; ᪠¨à. ®¤®£® ã஢ï + á⮯ª í«¥¬.
|
||
jr nc,tree_exit ; ¥â ¯ ¯®ª
|
||
; ¢®©â¨ ¢ ¯ ¯ªã á«¥¤. ã஢ï
|
||
tree_loop:
|
||
push hl ; ¤à¥á áâ ண® í«¥¬¥â (¯®á«¥ LoadDIR)
|
||
ld c,31h ; ®¯à®á á¨áâ. ª« ¢ë
|
||
rst ToDSS
|
||
call nz,abort_tree_scan ; ¢ë¢¥á⨠®ª® "¯à¥àë¢. ®¯¥à 樨"
|
||
pop hl
|
||
ld a,(depth_tree) ; ®¬¥à ⥪. ãà®¢ï ¢«®¦¥¨©
|
||
inc a
|
||
cp max_depth+1 ; 20+1 ¬ ªá. ç¨á«® ¢«®¦¥¨© ¯ ¯®ª
|
||
jr c,tree_depth_ok
|
||
tree_depth_err:
|
||
ld a,EDEPTH ; 36 ª®¤ "᫨誮¬ ¡®«ìè ï ¢«®¦¥®áâì ¯ ¯®ª"
|
||
jr tree_abort1
|
||
;
|
||
tree_depth_ok:
|
||
ld (depth_tree),a
|
||
ld de,(count_dirs) ; ⥪. ç¨á«® ¯ ¯®ª
|
||
bit 2,d ; >= 1024 ¯ ¯®ª (> 1 ¡ ª¨ í«¥¬¥â®¢)
|
||
jr nz,tree_depth_err ; ®è¨¡ª , ¢ë©â¨
|
||
push hl ; ⥪. ¨¬ï ¯ ¯ª¨ ¢ á⥪
|
||
ld a,(hl)
|
||
or a
|
||
jr z,dirs_end ; ¥â ¢«®¦¥¨©, ¢¥àãâìáï ¢ ç. ã஢¥ì
|
||
ld (cur_tree_adr+1),hl ; ¨¬ï ¯ ¯ª¨ ⥪. ã஢ï
|
||
ld c,1Dh ; ãáâ. ¯ãâì ¯ ¯ªã ⥪. ã஢ï
|
||
rst ToDSS
|
||
call scan_cur_level ; ᪠¨à. ®¤®£® ã஢ï + á⮯ª í«¥¬.
|
||
jr c,tree_loop ; ¥áâì ¯ ¯ª¨
|
||
; ¢¥àãâìáï ¯à¥¤. ã஢¥ì
|
||
dirs_end:
|
||
ld c,31h ; ®¯à®á á¨áâ. ª« ¢ë
|
||
rst ToDSS
|
||
call nz,abort_tree_scan ; ¢ë¢¥á⨠®ª® "¯à¥àë¢. ®¯¥à 樨"
|
||
pop hl ; ⥪. í«¥¬¥â ¨§ á⥪
|
||
ld a,h
|
||
or l
|
||
jr z,tree_exit ; ¢ áâ à⮢®© ¯ ¯ª¥
|
||
push hl ; hl= ¤à¥á ¨¬¥¨ ¯ ¯ª¨
|
||
ld a,(scan_mode) ; ०¨¬ à ¡®âë ¯à®æ¥¤ãàë
|
||
cp 2 ; ãáâ. âਡã⮢ ¯ ¯ª¨
|
||
jr nz,dirs_end1
|
||
;call attrib_folder;
|
||
ds 3;
|
||
jr dirs_end2
|
||
dirs_end1:
|
||
cp 3 ; 㤠«¥¨¥ ¯ ¯ª¨
|
||
jr c,dirs_end2
|
||
call delete_folder; ; a=3,4 㤠«¥¨¥/¯¥à¥®á ¯ ¯ª¨
|
||
jr dirs_end3
|
||
dirs_end2:
|
||
ld hl,parent_level ; ".."
|
||
ld c,1Dh ; ãáâ. ¯ãâì
|
||
rst ToDSS
|
||
dirs_end3:
|
||
ld hl,depth_tree ; ®¬¥à ⥪. ãà®¢ï ¢«®¦¥¨©
|
||
dec (hl)
|
||
pop hl
|
||
ld de,16-1 ; à §¬¥à í«¥¬¥â ¢«®¦¥¨© - 1
|
||
add hl,de
|
||
ld a,(hl)
|
||
inc hl
|
||
inc a
|
||
jr nz,tree_loop
|
||
jr dirs_end ; § ¤ ¢ 横«
|
||
;
|
||
tree_abort:
|
||
ld a,EUABORT ; 37 ª®¤ "®¯¥à æ¨ï ¯à¥à¢ ¯®«ì§®¢ ⥫¥¬"
|
||
tree_abort1:
|
||
scf
|
||
jr $+3
|
||
tree_exit:
|
||
xor a ; a=Ok ¨ á¡à. CF
|
||
push af
|
||
tmppage:ld a,0 ; ¤¥áªà. áâà.
|
||
or a
|
||
ld bc,01C3h ; ®á¢®¡. 1 áâà. ¯ ¬ïâ¨
|
||
call nz,0008h
|
||
db 3Eh ; ld a,..
|
||
tree_page:
|
||
db 0
|
||
out (SLOT3),a ; ¢®ááâ. ¯®àâ
|
||
pop af ; ¢®§¢à. ª®¤ ¯à®æ¥¤ãàë
|
||
db 31h ; ld sp,..
|
||
tree_stack:
|
||
dw 0 ; á®åà. á⥪
|
||
ret
|
||
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‘ª ¨à®¢ âì ®¤¨ ã஢¥ì
|
||
; ¢ë室: C - ¥áâì ¯ ¯ª¨
|
||
; NC - ¥â ¯ ¯®ª
|
||
; hl= ¤à¥á áâ ண® í«¥¬¥â
|
||
;-------------------------------------------------
|
||
scan_cur_level:
|
||
ld de,(end_tree)
|
||
push de ; á®åà. ¤à¥á áâ ண® í«¥¬¥â
|
||
ld ix,0 ; áç¥â稪 ¯ ¯®ª
|
||
ld hl,scan_mask ; ¨¬ï ä ©« (è ¡«® ¯®¨áª )
|
||
ld de,work_buffer ; à ¡. ¡ãä¥à
|
||
push ix
|
||
push de
|
||
ld a,37h ; ¢á¥, ªà®¬¥ ¬¥âª¨ ⮬
|
||
ld bc,0119h ; f_first 8.3
|
||
rst ToDSS
|
||
pop hl
|
||
pop ix
|
||
jr c,scan_level_exit ; ¥ ©¤¥®
|
||
scan_level_loop:
|
||
call tree_record ; ¤«ï ¯ ¯®ª á®§¤. á⮯ªã í«¥¬¥â®¢
|
||
jr c,scan_level_exit ; ®è¨¡ª , ¢ë室 § £à ¨æã ¡ ª¨
|
||
push ix
|
||
ld de,work_buffer ; à ¡. ¡ãä¥à
|
||
push de
|
||
ld c,1Ah ; f_next
|
||
rst ToDSS
|
||
pop hl
|
||
pop ix
|
||
jr nc,scan_level_loop ; § ¤ ¢ 横«
|
||
scan_level_exit:
|
||
ld hl,(end_tree) ; ç «® á«¥¤. í«¥¬¥â
|
||
dec hl
|
||
ld (hl),-1 ; +xF ¢ ª®¥æ ¯à¥¤.
|
||
db 0DDh
|
||
ld c,l ; ld bc,ix
|
||
db 0DDh
|
||
ld b,h
|
||
ld hl,(count_dirs) ; ⥪. ç¨á«® ¯ ¯®ª
|
||
add hl,bc ; + ç¨á«® ¯ ¯®ª ¯à®áª ¨à. ã஢ï
|
||
ld (count_dirs),hl
|
||
pop hl ; ¢®ááâ. ¤à¥á áâ ண® í«¥¬¥â
|
||
ld a,c
|
||
or b
|
||
ret z ; ¥â ¯ ¯®ª
|
||
; á®åà. ¢ ¯¥à¢®¬ í«¥¬¥â¥ ¢ +0D..0E ¤à¥á ¯®á«. í«¥¬¥â
|
||
cur_tree_adr:
|
||
ld de,0 ; ¤à¥á ⥪. ¨¬¥¨ ¯ ¯ª¨
|
||
ld a,e
|
||
or d
|
||
jr z,scan_level_exit1
|
||
ex de,hl
|
||
ld bc,0Dh ; ᬥé. ï祩ª¨ ¤à¥á ¯®á«. í«¥¬¥â
|
||
add hl,bc
|
||
ld (hl),e ; á®åà. ¤à¥á ¯®á«. í«¥¬¥â
|
||
inc hl
|
||
ld (hl),d
|
||
ex de,hl
|
||
scan_level_exit1:
|
||
scf ; ¥áâì á«¥¤. ã஢¥ì
|
||
ret
|
||
|
||
|
||
;-------------------------------------------------
|
||
; Ž¡à ¡®âª ©¤¥®© § ¯¨á¨.
|
||
; „«ï ¯ ¯®ª - á®§¤ ¥â á⮯ªã í«¥¬¥â®¢.
|
||
; ¢å®¤: hl=à ¡. ¡ãä¥à § ¯¨á¨
|
||
; ¢ë室: ¯à¨ ®è¨¡ª¥ CF, ¢ë室 § £à ¨æã ¡ ª¨
|
||
;-------------------------------------------------
|
||
; í«¥¬¥â: +00..0C - ¨¬ï ¯ ¯ª¨ (á ã«¥¬)
|
||
; +0D..0E - ¤à¥á ¯®á«. í«¥¬¥â (¢ § ¯¨á¨ ¯¥à¢®£® í«¥¬¥â )
|
||
;-------------------------------------------------
|
||
tree_record:
|
||
ld a,(work_buffer+32) ; âਡãâ ©¤. § ¯¨á¨
|
||
bit 4,a ; ¯ ¯ª ?
|
||
jr nz,ins_tree_item ; ¤
|
||
; ©¤¥ ä ©«
|
||
ld a,(scan_mode) ; ०¨¬ à ¡®âë ¯à®æ¥¤ãàë
|
||
or a ; a=0 ᪠¨à. ¯ ¯ªã
|
||
jr z,tree_record_next
|
||
dec a ; a=1 ª®¯¨à. ¯ ¯ªã
|
||
;jp z,copy_file
|
||
dec a ; a=2 ãáâ. âਡ. ä ©«®¢ ¯ ¯ª¨
|
||
;jp z,attrib_file
|
||
dec a ; a=3 㤠«¥¨¥ ¯ ¯ª¨
|
||
jp z,delete_file
|
||
dec a ; a=4 ¯¥à¥®á ¯ ¯ª¨
|
||
;jp z,move_file
|
||
or a ; á¡à. CF
|
||
ret
|
||
; ++®¡ê¥¬ ä ©«®¢
|
||
tree_record_next:
|
||
ld de,(work_buffer+28) ; ¬«. à §àï¤
|
||
ld hl,(size_files)
|
||
add hl,de
|
||
ld (size_files),hl
|
||
ld de,(work_buffer+30) ; áâ. à §àï¤
|
||
ld hl,(size_files+2)
|
||
adc hl,de
|
||
ld (size_files+2),hl
|
||
; ++ç¨á«® ä ©«®¢
|
||
ld hl,(count_files)
|
||
inc hl
|
||
ld (count_files),hl
|
||
or a ; á¡à. CF
|
||
ret
|
||
; ©¤¥ ¯ ¯ª
|
||
ins_tree_item:
|
||
ex de,hl
|
||
ld hl,(end_tree) ; ç «® ®¢®£® í«¥¬¥â
|
||
ld bc,16 ; à §¬¥à í«¥¬¥â
|
||
add hl,bc
|
||
sbc hl,bc
|
||
ex de,hl
|
||
ret c ; § ¯à¥¤¥«®¬ ¡ ª¨ (> 0FFFFh)
|
||
ld bc,33
|
||
add hl,bc
|
||
ld a,(hl) ;+33 ¨¬ï ä ©«
|
||
cp "." ; ".", ".."
|
||
ret z
|
||
inc ix ; ++ç¨á«® ¯ ¯®ª
|
||
ld c,16 ; à §¬¥à í«¥¬¥â ¢«®¦¥¨©
|
||
xor a
|
||
ldi
|
||
cp (hl)
|
||
jr nz,$-3 ; ᪮¯¨à. ¢ í«¥¬¥â ¨¬ï ¯ ¯ª¨
|
||
ld b,c ; ®¡ã«¨âì ®áâ ⮪ í«¥¬¥â
|
||
ld (de),a
|
||
inc de
|
||
djnz $-2
|
||
ld (end_tree),de ; ç «® á«¥¤. 16-⨠¡ ©â®£® í«¥¬¥â
|
||
ld a,(scan_mode) ; ०¨¬ à ¡®âë ¯à®æ¥¤ãàë
|
||
cp 1 ; ª®¯¨à. ¯ ¯ª¨
|
||
;jp z,create_folder
|
||
cp 4 ; move ¯ ¯ª¨
|
||
;jp z,create_folder;
|
||
or a ; á¡à. CF
|
||
ret
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‚뢮¤ ®ª ¯à¥àë¢ ¨ï ®¯¥à 樨
|
||
;-------------------------------------------------
|
||
abort_tree_scan:
|
||
ld bc,3135h ; ®ç¨áâ¨âì ¡ãä¥à á¨áâ. ª« ¢ë
|
||
rst ToDSS
|
||
ld hl,dial_abort ; ®¯¨á â¥«ì ®ª
|
||
call DialogEr
|
||
cp evCommand ; ᮡë⨥ "ª®¬ ¤ "
|
||
ret nz
|
||
ld a,(hl) ;+1 what
|
||
cp cmOkey ; Yes
|
||
jp z,tree_abort ; ¢ë©â¨ ¨§ ¯à®æ¥¤ãàë
|
||
ret
|
||
|
||
|
||
|
||
|
||
; <20>¥¦¨¬ à ¡®âë ¯à®æ¥¤ãàë:
|
||
; 0 - ᪠¨à®¢ ¨¥ ¯ ¯ª¨
|
||
; 1 - ª®¯¨à®¢ ¨¥ ¯ ¯ª¨
|
||
; 2 - ãáâ. âਡã⮢ ä ©«®¢ ¯ ¯ª¨
|
||
; 3 - 㤠«¥¨¥ ¯ ¯ª¨
|
||
; 4 - ¯¥à¥®á ¯ ¯ª¨
|
||
scan_mode:
|
||
db 0
|
||
|
||
; è ¡«® ¯®¨áª (â ª¦¥ ¨á¯. ¤«ï ¯®¨áª ¬¥âª¨ ⮬ )
|
||
scan_mask:
|
||
db "*.*",0
|
||
; ¢¥à娩 ã஢¥ì
|
||
parent_level:
|
||
db "..",0
|
||
; ®¬¥à ⥪. ãà®¢ï ¢«®¦¥¨©
|
||
depth_tree:
|
||
db 0
|
||
; ç «® á«¥¤. 16-⨠¡ ©â®£® í«¥¬¥â
|
||
end_tree:
|
||
dw 0
|
||
|
||
; ç¨á«® ¯ ¯®ª
|
||
count_dirs:
|
||
dw 0
|
||
; ç¨á«® ä ©«®¢ ¯ ¯ª¨
|
||
count_files:
|
||
dw 0
|
||
; ®¡é. à §¬¥à ä ©«®¢ ¯ ¯ª¨
|
||
size_files:
|
||
dw 0 ; ¬«. à §àï¤
|
||
dw 0 ; áâ. à §àï¤
|