mirror of
https://github.com/Tolik-Trek/File-Manager.git
synced 2026-06-15 01:11:36 +03:00
448 lines
9.6 KiB
NASM
Executable File
448 lines
9.6 KiB
NASM
Executable File
;
|
||
; Shell-Metzner «£®à¨â¬ á®àâ¨à®¢ª¨
|
||
;
|
||
|
||
|
||
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‘®àâ¨à®¢ª ᯨ᪠¯ ¥«¨ (¢ë§®¢ ¨§ ®¡®«®çª¨)
|
||
; ¢å®¤: c = ¡ãª¢ á®àâ¨à®¢ª¨ (n/x/d/s/u)
|
||
;-------------------------------------------------
|
||
sorting_list:
|
||
call test_show_panels ; â¥áâ ०¨¬ ¢ª«. ¯ ¥«¥©
|
||
ret z ; ¢ëª«.
|
||
ld hl,(all_files) ; ç¨á«® ä ©«®¢ ¨ ¯ ¯®ª
|
||
ld a,l
|
||
or h
|
||
ret z
|
||
ld a,(format_mode) ; 䮬 â ªâ. ¯ ¥«¨
|
||
and form_trd ; trd/scl spectrum
|
||
ret nz
|
||
ld hl,(sort_type) ; ⨯ á®àâ. ªâ. ¯ ¥«¨
|
||
ld a,h
|
||
xor 1 ; ¨¢¥àá¨ï á®àâ¨à®¢ª¨
|
||
ld h,a
|
||
ld a,l
|
||
cp c ; ®¢ë© = áâ ஬ã ?
|
||
jr z,$+4 ; ¨¢¥àá¨ï ०¨¬ á®àâ¨à®¢ª¨
|
||
ld h,0 ; á¡à. á®àâ¨à®¢ªã ¢ ""
|
||
ld l,c
|
||
ld (sort_type),hl
|
||
call sorting ; à §¤¥«ìë© á¯¨á®ª 㪠§ ⥫¥© + á®àâ. ᯨáª
|
||
jp A20FC ; ®¡®¢¨âì ᯨ᮪
|
||
|
||
|
||
|
||
|
||
;-----------------------------------------------------------
|
||
; ‘®§¤ ¨¥ à §¤¥«ì®£® ᯨ᪠㪠§ ⥫¥© ¨ á®àâ¨à®¢ª
|
||
; ᯨ᪮¢ ¯ ¯®ª ¨ ä ©«®¢.
|
||
;
|
||
; ¢å®¤: de=ª®«-¢® § ¯¨á¥© ᯨáª
|
||
;-----------------------------------------------------------
|
||
sorting:ld de,(all_files) ; ç¨á«® ä ©«®¢ ¨ ¯ ¯®ª
|
||
ld a,e
|
||
or d
|
||
ret z
|
||
call make_array_pointer ; á®§¤ âì à §¤¥«ìë© á¯¨á®ª 㪠§ ⥫¥©
|
||
ld hl,sort_type+1
|
||
ld a,(hl) ; 00/01 /
|
||
or a
|
||
ld a,0D2h ; "jp nc,.."
|
||
jr z,$+4
|
||
ld a,0DAh ; "jp c,.."
|
||
ld (sort_mode),a ; / á®àâ¨à®¢ª
|
||
dec hl
|
||
ld a,(hl) ; hl=sort_type
|
||
cp "n" ; name
|
||
jr z,sort_name
|
||
cp "x" ; extension
|
||
jr z,sort_ext
|
||
cp "d" ; date
|
||
jr z,sort_date
|
||
cp "s" ; size
|
||
jr z,sort_size
|
||
jr unsorted_list ; á®§¤ âì ®¡é¨© ᯨ᮪ 㪠§ ⥫¥©
|
||
|
||
|
||
; ‘®àâ¨à®¢ª ¯ ¯®ª
|
||
sort_folders:
|
||
ld de,(all_folders) ; ç¨á«® ¯ ¯®ª ¢ ᯨ᪥
|
||
ld hl,(directory) ; ç «® ᯨ᪠㪠§ ⥫¥© ¯ ¯®ª
|
||
ld c,(hl)
|
||
inc hl
|
||
ld b,(hl)
|
||
dec hl
|
||
ld a,(bc) ;+0 ¨¬ï ä ©«
|
||
cp "." ; ".." ¯¥à¢ ï § ¯¨áì ?
|
||
jr nz,$+5 ; ¥â
|
||
dec de ; --ç¨á«® ¯ ¯®ª
|
||
inc hl ; á«¥¤. 㪠§ ⥫ì
|
||
inc hl
|
||
jp metzner_sort
|
||
|
||
|
||
; Ctrl+F3. ‘®àâ¨à®¢ª ¯® ¨¬¥¨
|
||
sort_name:
|
||
ld hl,cmp_names ; ¯à®æ¥¤ãà áà ¢¥¨ï
|
||
sort__: ld (sort_func+1),hl
|
||
call sort_folders ; á®àâ¨à®¢ª ¯ ¯®ª
|
||
ld hl,(all_files) ; ç¨á«® § ¯¨á¥© ᯨáª
|
||
ld de,(all_folders) ; ç¨á«® ¯ ¯®ª ᯨáª
|
||
and a
|
||
sbc hl,de
|
||
ex de,hl ; de=ç¨á«® ä ©«®¢ ¢ ᯨ᪥
|
||
ld hl,(directory+2) ; ç «® ᯨ᪠㪠§ ⥫¥© ä ©«®¢
|
||
jp metzner_sort ; á®àâ¨à®¢ª
|
||
|
||
; Ctrl+F4. ‘®àâ¨à®¢ª ¯® à áè¨à¥¨î
|
||
sort_ext:
|
||
ld hl,cmp_extensions ; ¯à®æ¥¤ãà áà ¢¥¨ï
|
||
jr sort__
|
||
|
||
; Ctrl+F5. ‘®àâ¨à®¢ª ¯® ¤ â¥
|
||
sort_date:
|
||
ld hl,cmp_date ; ¯à®æ¥¤ãà áà ¢¥¨ï
|
||
jr sort__
|
||
|
||
; Ctrl+F6. ‘®àâ¨à®¢ª ¯® à §¬¥àã
|
||
sort_size:
|
||
ld hl,cmp_size ; ¯à®æ¥¤ãà áà ¢¥¨ï
|
||
jr sort__
|
||
|
||
; Ctrl+F7. <20>¥§ á®àâ¨à®¢ª¨.
|
||
unsorted_list:
|
||
ld a,(cash_left_dir) ; ¡ ª ª â «®£ ªâ. ¯ ¥«¨
|
||
out (SLOT3),a ; ¯®¤ª«. áâà ¨æã ª â «®£
|
||
ld iy,0C000h ; ç «® ᪠¨à㥬®© ¯ ¯ª¨
|
||
ld hl,(directory) ; ç «® ¡ãä¥à ᯨ᪠¤à¥á®¢
|
||
ld bc,32 ; ms-dos § ¯¨áì
|
||
ld a,(format_mode) ; ä®à¬ â ªâ. ¯ ¥«¨
|
||
and form_trd ; trd/scl spectrum
|
||
jr z,$+5
|
||
unsorted_spec: ; <- ¯¥à¥å®¤ ¨§ "make_array_pointer"
|
||
ld bc,16 ; spec-§ ¯¨áì
|
||
; á®§¤ âì ®¡é. ᯨ᮪ 㪠§ ⥫¥©
|
||
ld de,(all_files) ; ç¨á«® ä ©«®¢ ¨ ¯ ¯®ª ¢ ᯨ᪥
|
||
unsorted_loop:
|
||
db 0FDh
|
||
ld a,l
|
||
ld (hl),a
|
||
inc hl
|
||
db 0FDh
|
||
ld a,h
|
||
ld (hl),a
|
||
inc hl
|
||
add iy,bc ; á«¥¤. § ¯¨áì
|
||
dec de
|
||
ld a,e
|
||
or d
|
||
jp nz,unsorted_loop
|
||
ret
|
||
|
||
|
||
;-----------------------------------------------------------
|
||
; ‘®§¤ ¨¥ ¬ áᨢ 㪠§ ⥫¥© § ¯¨á¨ ᯨáª
|
||
;
|
||
; ¢å®¤: de = ª®«-¢® § ¯¨á¥© ᯨáª
|
||
; ¢ë室: directory+2 - ᮤ¥à¦¨â ç «® á¯¨áª ä ©«®¢
|
||
; all_folders - ᮤ¥à¦¨â ç¨á«® ¯ ¯®ª ¢ ᯨ᪥
|
||
; NZ - ᯥª-ᯨ᮪
|
||
;-----------------------------------------------------------
|
||
make_array_pointer:
|
||
ld iy,0C000h ; ç «® ᪠¨à㥬®£® ª â «®£
|
||
ld a,(cash_left_dir) ; ¡ ª ª â «®£ ªâ. ¯ ¥«¨
|
||
out (SLOT3),a ; ¯®¤ª«. áâà ¨æã ª â «®£
|
||
ld hl,(directory) ; ç «® ᯨ᪠㪠§ ⥫¥©
|
||
ld a,(format_mode) ; ä®à¬ â ªâ. ¯ ¥«¨
|
||
and form_trd ; trd/scl spectrum
|
||
jr z,make_msdos_list
|
||
; ᯥª-ᯨ᮪
|
||
ld a,"u"
|
||
ld (sort_type),a ; ãáâ. ०¨¬ "unsort"
|
||
ld bc,0
|
||
ld (all_folders),bc ; ç¨á«® ¯ ¯®ª ¢ ᯨ᪥
|
||
ld (directory+2),hl ; ç «® á¯¨áª ä ©«®¢
|
||
jr unsorted_spec ; á®§¤ âì ®¡é. ᯨ᮪ 㪠§ ⥫¥©
|
||
|
||
; á®§¤ âì à §¤¥«ìë© á¯¨á®ª 㪠§ ⥫¥©
|
||
make_msdos_list:
|
||
exx
|
||
ld bc,32 ; ms-dos § ¯¨áì
|
||
exx
|
||
; á®§¤ âì 㪠§ ⥫¨ ¯ ¯ª¨
|
||
ld a,0CAh ; "jp z,"
|
||
call make_flist1__ ; á®§¤ âì ᯨ᮪ ¯ ¯®ª
|
||
ld (all_folders),bc ; ç¨á«® ¯ ¯®ª ¢ ᯨ᪥
|
||
ld (directory+2),hl ; ç «® á¯¨áª ä ©«®¢
|
||
; á®§¤ âì 㪠§ ⥫¨ ä ©«ë
|
||
ld iy,0C000h ; ç «® ᪠¨à㥬®£® ª â «®£
|
||
ld de,(all_files) ; ç¨á«® ä ©«®¢ ¨ ¯ ¯®ª
|
||
ld a,0C2h ; "jp nz,"
|
||
;
|
||
make_flist1__:
|
||
ld (make_flist_code),a
|
||
ld bc,0 ; áç¥â稪 ç¨á« ¯ ¯®ª/ä ©«®¢
|
||
make_flist_loop:
|
||
bit 4,(iy+11) ;+11 âਡãâ ä ©«
|
||
make_flist_code:
|
||
jp z,make_flist_next
|
||
db 0FDh
|
||
ld a,l
|
||
ld (hl),a
|
||
inc hl
|
||
db 0FDh
|
||
ld a,h
|
||
ld (hl),a
|
||
inc hl
|
||
inc bc ; ++ç¨á«® ¯ ¯®ª/ä ©«®¢
|
||
make_flist_next:
|
||
exx
|
||
add iy,bc ; á«¥¤. ms-dos § ¯¨áì
|
||
exx
|
||
dec de
|
||
ld a,e
|
||
or d
|
||
jp nz,make_flist_loop
|
||
ret
|
||
|
||
|
||
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‘®àâ¨à®¢ª ᯨ᪠. Shell-Metzner «£®à¨â¬.
|
||
; <20> ¡®â ¥â á 㪠§ ⥫ﬨ § ¯¨á¨.
|
||
;
|
||
; ¢å®¤: hl= ¤à¥á ¬ áᨢ 㪠§ ⥫¥©
|
||
; de=ª®«-¢® § ¯¨á¥© ¢ ᯨ᪥
|
||
;-------------------------------------------------
|
||
metzner_sort:
|
||
ld (sort_base+1),hl ; ¤à¥á ¬ áᨢ
|
||
ld (sort_count+1),de ; ª®«-¢® í«¥¬¥â®¢ (¥ ¨§¬.)
|
||
ld (sort_count1),de ; (áç¥â稪)
|
||
; à §¤¥«¨âì ⥪. ç¨á«® í«¥¬¥â®¢ 2
|
||
sort_divide:
|
||
db 21h ; ld hl,..
|
||
sort_count1:
|
||
dw 0 ; ⥪. ª®«-¢® í«¥¬¥â®¢ / 2
|
||
and a
|
||
ld a,h
|
||
rra
|
||
ld h,a
|
||
ld a,l
|
||
rra
|
||
ld l,a
|
||
ld a,l
|
||
or h
|
||
ret z ; ¢á¥ í«¥¬¥âë ®âá®àâ¨à®¢ ë
|
||
ld (sort_count1),hl ;6,3,1,0 ⥪. ª®«-¢® í«¥¬¥â®¢ / 2
|
||
ex de,hl
|
||
sort_count:
|
||
ld hl,0 ;12 (count) ª®«-¢® í«¥¬¥â®¢
|
||
and a
|
||
sbc hl,de ; sreclen = sort_count - sort_count1
|
||
ld (sreclen+1),hl ;6,9,11
|
||
ld hl,1
|
||
ld (sortv1),hl
|
||
ld (sstadr),hl
|
||
dec l
|
||
add hl,de
|
||
add hl,de
|
||
ld (sortv2),hl ;+42,+21,+0B ᬥé. ¤® á¥à¥¤¨ë ⥪. ¬ áᨢ
|
||
ex de,hl
|
||
sort_base:
|
||
ld hl,0 ; ç «® ¬ áᨢ
|
||
;
|
||
sort_ndone:
|
||
ld (sortv4),hl ; ¤à¥á á«¥¤. § ¯¨á¨ 1-© ¯®«®¢¨ë ¬ áᨢ
|
||
ld (sortv3),hl
|
||
ex de,hl
|
||
add hl,de ; ᬥé.¤® á¥à¥¤¨ë ¬ áᨢ + ¤à¥á á«¥¤. § ¯¨á¨
|
||
ex de,hl ; de= ¤à¥á á«¥¤. § ¯¨á¨ 2-© ¯®«®¢¨ë ¬ áᨢ
|
||
sort_compre:
|
||
ld (srtptr2+1),de
|
||
ld (srtptr1+1),hl
|
||
; à § ¤à¥á æ¨ï de ¨ hl
|
||
ld a,(de)
|
||
ld c,a
|
||
inc de
|
||
ld a,(de)
|
||
ld d,a
|
||
ld e,c
|
||
ld a,(hl)
|
||
inc hl
|
||
ld h,(hl)
|
||
ld l,a
|
||
ld (srtptr3+1),hl
|
||
ld (srtptr4+1),de
|
||
;
|
||
sort_func:
|
||
call cmp_extensions ; ⥪. ¯/¯ á®àâ¨à®¢ª¨
|
||
jp z,noswap_items ; í«¥¬¥âë à ¢ë
|
||
sort_mode:
|
||
jp nc,noswap_items ; nc/c ⨯ / á®àâ¨à®¢ª¨
|
||
; ®¡¬¥ïâì ¤à¥á 㪠§ ⥫¥©
|
||
srtptr2:ld de,0 ; ¤à¥á § ¯¨á¨ 2-© ¯®«®¢¨ë ᯨáª
|
||
srtptr1:ld hl,0 ; ¤à¥á § ¯¨á¨ 1-© ¯®«®¢¨ë ᯨáª
|
||
ld a,(de)
|
||
ld c,a
|
||
ld a,(hl)
|
||
ld (de),a
|
||
ld (hl),c
|
||
inc de
|
||
inc hl
|
||
ld a,(de)
|
||
ld c,a
|
||
ld a,(hl)
|
||
ld (de),a
|
||
ld (hl),c
|
||
;
|
||
ld hl,(sort_count1) ;6,3,1 ⥪. ª®«-¢® í«¥¬¥â®¢ / 2
|
||
ld a,h
|
||
cpl
|
||
ld d,a
|
||
ld a,l
|
||
cpl
|
||
ld e,a
|
||
db 21h ; ld hl,..
|
||
sortv1: dw 0
|
||
add hl,de ;-7, -4, -2
|
||
jp nc,noswap_items
|
||
inc hl
|
||
ld (sortv1),hl ; ¯®à浪. ®¬¥à § ¯¨á¥©
|
||
db 11h ; ld de,..
|
||
sortv3: dw 0 ; ⥪. § ¯¨áì 1-© ¯®«®¢¨ë ¬ áᨢ
|
||
ld hl,(sortv2) ;+42,+21,+0B ᬥé. ¤® á¥à¥¤¨ë ⥪. ¬ áᨢ
|
||
ld a,e
|
||
sub l
|
||
ld l,a
|
||
ld a,d
|
||
sbc a,h
|
||
ld h,a
|
||
ld (sortv3),hl ; ¤à¥á § ¯¨á¥©
|
||
jp sort_compre ; áà ¢¨âì í«¥¬¥âë (de ¨ hl)
|
||
;
|
||
noswap_items:
|
||
db 21h ; ld hl,..
|
||
sstadr: dw 0 ; ®â 1
|
||
inc hl ; ++incr
|
||
ld (sstadr),hl ;
|
||
ld (sortv1),hl
|
||
ex de,hl
|
||
sreclen:ld hl,0 ;6,9,11 (sreclen) ¤«¨ í«¥¬¥â
|
||
and a
|
||
sbc hl,de ; cmp sreclen ¨ incr
|
||
jp c,sort_divide
|
||
db 21h
|
||
sortv4: dw 0 ; ¤à¥á á«¥¤. § ¯¨á¨ 1-© ¯®«®¢¨ë ¬ áᨢ
|
||
inc hl ; á«¥¤. 㪠§ ⥫ì
|
||
inc hl
|
||
db 11h ; ld de,..
|
||
sortv2: dw 0 ;+42,+21,+0B ᬥé. ¤® á¥à¥¤¨ë ⥪. ¬ áᨢ
|
||
jp sort_ndone
|
||
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‘à ¢¨âì ¨¬¥
|
||
;
|
||
; in: hl= ¤à¥á § ¯¨á¨ 1-© ¯®«®¢¨ë ¬ áᨢ
|
||
; de= ¤à¥á § ¯¨á¨ 2-© ¯®«®¢¨ë ¬ áᨢ
|
||
; out: z - à ¢ë
|
||
; nz - ¥ à ¢ë
|
||
;-------------------------------------------------
|
||
cmp_names:
|
||
ld b,11 ; ¯®«®¥ ¨¬ï
|
||
srtptr3:ld hl,0
|
||
srtptr4:ld de,0
|
||
cmp__: ld a,(de) ; 2-ï ¯®«®¢¨ ¬ áᨢ
|
||
cp "_"
|
||
jp z,cmp1__
|
||
or 00100000b
|
||
cp "ð" ; 240
|
||
jp nz,cmp1__
|
||
inc a ; 241 = "ñ"
|
||
cmp1__: ld c,(hl) ; 1-ï ¯®«®¢¨ ¬ áᨢ
|
||
cp "_"
|
||
jp z,cmp2__
|
||
set 5,c
|
||
cp "ð" ; 240
|
||
jp nz,cmp2__
|
||
inc c ; 241 = "ñ"
|
||
cmp2__: sub c
|
||
ret nz ; í«¥¬¥âë ¥ à ¢ë
|
||
inc hl
|
||
inc de
|
||
djnz cmp__
|
||
ret
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‘à ¢¨âì à áè¨à¥¨ï
|
||
;
|
||
; in: hl= ¤à¥á § ¯¨á¨ 1-© ¯®«®¢¨ë ¬ áᨢ
|
||
; de= ¤à¥á § ¯¨á¨ 2-© ¯®«®¢¨ë ¬ áᨢ
|
||
; out: z - à ¢ë
|
||
; nz - ¥ à ¢ë
|
||
;-------------------------------------------------
|
||
cmp_extensions:
|
||
ld bc,8 ; ᬥé. ¤® í«¥¬. áà ¢¥¨ï
|
||
ex de,hl
|
||
add hl,bc ; ᬥé. ¤® ï祥ª áà ¢¥¨ï
|
||
ex de,hl
|
||
add hl,bc ; ᬥé. ¤® ï祥ª áà ¢¥¨ï
|
||
ld b,3 ; ¤«¨ í«¥¬. áà ¢¥¨ï
|
||
ecmp__: ld a,(de) ; 2-ï ¯®«®¢¨ ¬ áᨢ
|
||
cp "_"
|
||
jp z,ecmp1__
|
||
or 00100000b
|
||
cp "ð" ; 240
|
||
jp nz,ecmp1__
|
||
inc a ; 241 = "ñ"
|
||
ecmp1__:ld c,(hl) ; 1-ï ¯®«®¢¨ ¬ áᨢ
|
||
cp "_"
|
||
jp z,ecmp2__
|
||
set 5,c
|
||
cp "ð" ; 240
|
||
jp nz,ecmp2__
|
||
inc c ; 241 = "ñ"
|
||
ecmp2__:sub c
|
||
ret nz ; í«¥¬¥âë ¥ à ¢ë
|
||
inc hl
|
||
inc de
|
||
djnz ecmp__
|
||
; í«¥¬¥âë ᮢ¯ ¤ îâ
|
||
ld b,8 ; ¤«¨ í«¥¬. áà ¢¥¨ï
|
||
jp srtptr3 ; áà ¢¨âì ¨¬¥
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‘à ¢¨âì ¤ âë/à §¬¥àë
|
||
;
|
||
; in: hl= ¤à¥á ª®æ § ¯¨á¨ (1-ï ¯®«®¢¨ ¬ áᨢ )
|
||
; de= ¤à¥á ª®æ § ¯¨á¨ (2-ï ¯®«®¢¨ ¬ áᨢ )
|
||
; out: z - à ¢ë
|
||
; nz - ¥ à ¢ë
|
||
;-------------------------------------------------
|
||
cmp_date:
|
||
ld bc,25 ; ᬥé. ª®¥æ ¤ âë
|
||
jp $+6
|
||
cmp_size:
|
||
ld bc,31 ; ᬥé. ª®¥æ à §¬¥à
|
||
ex de,hl
|
||
add hl,bc ; + ᬥé. ¤® ï祥ª áà ¢¥¨ï
|
||
ex de,hl
|
||
add hl,bc ; + ᬥé. ¤® ï祥ª áà ¢¥¨ï
|
||
ld b,4 ; ¤«¨ í«¥¬. áà ¢¥¨ï
|
||
ld a,(de) ; 2-ï ¯®«®¢¨ ¬ áᨢ
|
||
sub (hl) ; 1-ï ¯®«®¢¨ ¬ áᨢ
|
||
ret nz ; í«¥¬¥âë ¥ à ¢ë
|
||
dec hl
|
||
dec de
|
||
djnz $-5
|
||
; í«¥¬¥âë ᮢ¯ ¤ îâ
|
||
jp cmp_names ; áà ¢¨âì ¨¬¥
|