File-Manager/CORE/FILLSTR.ASM
2025-04-05 01:58:39 +10:00

561 lines
11 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.

;-------------------------------------------------
; ‡ ¯®«­¥­¨¥ áâப¨ ᯨ᪠ ¯® ä®à¬ âã ¯ ­¥«¨
;-------------------------------------------------
; ¢å®¤: b=ä®à¬ â ¯ ­¥«¨
; hl=­ ç «® § ¯¨á¨ ª â «®£ 
; de=ï祩ª   âਡã⮢ ä ©« 
fill_string:
ld ix,string_of_list ; ¡ãä¥à áâப¨
bit 1,b ; Medium
jp nz,fill_med
bit 2,b ; Brief
jp nz,fill_brief
; Full
bit 6,b
jp nz,fill_full_spec ; full-spec
; ms-dos
ld a,(de) ; ¡ ©â  âਡã⮢
bit 4,a ; ¯ ¯ª  ?
jp nz,dir_name_full ; ¤ , ¢ë¢®¤ ¨¬¥­¨
; ä®à¬ â "file ext"
ld b,8
call L22BD ; ¨¬ï ä ©« 
ld b,4 ; ç¨á«® ¯à®¡¥«®¢
call spaces ; ¢áâ ¢¨âì ¯à®¡¥«ë
ld b,3
call L22BD ; à áè. ä ©« 
fill_string1__:
call separator ; "³" (¨«¨ " ") à §¤¥«¨â¥«ì ª®«®­®ª
; 2 ª®«®­ª  (à §¬¥à ä ©« )
push hl
ld de,17 ; ᬥé. ­  à §¬¥à ä ©« 
add hl,de
call L0020 ; de = à §¬¥à ä ©« 
ld c,(hl)
inc hl
ld b,(hl)
push bc
exx
pop hl
exx
ex de,hl
ld a,1
ld (put_mega),a ; ãáâ. ä« £
ld bc,0120h ; ¢¥¤ã騥 ¯à®¡¥«ë
call dec32 ; ¢ë¢®¤ à §¬¥à  ä ©«  (¢ ¯ ­¥«¨)
ld hl,put_mega
ld (hl),0 ; á¡à. ä« £
pop hl
A2290: call separator ; "³" (¨«¨ " ") à §¤¥«¨â¥«ì ª®«®­®ª
; 3 ª®«®­ª  (¤ â )
ld de,13
add hl,de ;+24 ¯¥à¥©â¨ ­  ¤ âã
ex de,hl
ld a,(de)
and 1Fh
call dec8 ; ¢ë¢®¤ ¤­ï
ld (ix+0),"." ; à §¤¥«¨â¥«ì "¤¥­ì.¬¥áïæ"
inc ix
ld a,(de)
and 0E0h
ld b,a
inc de
ld a,(de)
and 1
or b
rlca
rlca
rlca
call dec8 ; ¢ë¢®¤ ¬¥áïæ 
ld (ix+0),"." ; à §¤¥«¨â¥«ì "¬¥áïæ.£®¤"
inc ix
ld a,(de)
and 0FEh
rrca
add a,80
cp 100
jr c,$+4
sub 100
call dec8 ; ¢ë¢®¤ £®¤ 
call separator ; "³" (¨«¨ " ") à §¤¥«¨â¥«ì ª®«®­®ª
; 4 ª®«®­ª  (¢à¥¬ï)
dec de
dec de
ld a,(de) ;+22 ï祩ª  ¢à¥¬¥­¨
and 0F8h
rrca
rrca
rrca
call dec8 ; ¢ë¢®¤ ç á®¢
ld (ix+0),":" ; à §¤¥«¨â¥«ì "ç áë:¬¨­ãâë"
inc ix
ld a,(de) ;+22
and 7
ld b,a
dec de
ld a,(de) ;+21
and 0E0h
or b
rlca
rlca
rlca
jp dec8 ; ¢ë¢®¤ ¬¨­ãâ
;
; ¢ë¢®¤ ¨¬¥­¨ ¯ ¯ª¨
; in: hl= ¤à¥á ¨¬¥­¨
dir_name_full:
ld a,(hl)
push af
call dir_name ; ¢áâ ¢¨âì ¨¬ï ¯ ¯ª¨
ld b,3 ; ç¨á«® ¯à®¡¥«®¢
call spaces ; ¢áâ ¢¨âì ¯à®¡¥«ë
call separator ; "³" (¨«¨ " ") à §¤¥«¨â¥«ì ª®«®­®ª
pop af
; 2 ª®«®­ª 
ld de,folder_string ; "Folder "
cp "." ; த¨â. ¯ ¯ª  ?
jr nz,A2304_
ld de,up_string ; " Up "
A2304_: ex de,hl
ld b,7 ; ¤«¨­  áâப¨
A2307_: ld a,(hl)
ld (ix+0),a ; ᨬ¢®« ¢ áâபã
inc hl
inc ix
djnz A2307_
ex de,hl
jp A2290 ; ¢ë¢®¤ ¤ âë ¨ ¢à¥¬¥­¨
;-------------------------------------------------
; ¢ë¢®¤ ¨¬¥­¨ ¯ ¯ª¨
;-------------------------------------------------
; in: hl=­ ç «® § ¯¨á¨ ª â «®£ 
; ix=¡ãä¥à
dir_name:
; ä®à¬ â "dir.ext" (¢á¥£¤  ¢ë¢®¤¨â 12 ᨬ¢®«®¢)
call directory1__
dec e
inc e
ret z
ld b,e
jp spaces ; ¤®¡ ¢¨âì ª®­æ¥¢ë¥ ¯à®¡¥«ë
;
directory1__:
ld e,1 ; áç¥â稪 ¤®¯®«­. ¯à®¡¥«®¢
ld b,8 ; ¨¬ï ¯ ¯ª¨
call directory3__
ld a,(hl)
cp " "
jr z,directory2__
dec e
ld (ix+0),"." ; ᨬ¢®« ¢ áâபã
inc ix
directory2__:
ld b,3 ; à áè. ¯ ¯ª¨
directory3__:
ld a,(hl)
cp " "
jr z,directory4__
; ¢ë¢®¤ ᨬ¢®« 
ld (ix+0),a ; ᨬ¢®« ¢ áâபã
inc ix
inc hl
djnz directory3__
ret
directory4__:
inc hl
inc e
djnz directory4__
ret
;-------------------------------------------------
; Medium
;-------------------------------------------------
fill_med:
bit 6,b
jp nz,fill_med_spec ; med-spec
; ms-dos
ld a,(de) ;+11 ᬥé. ¤® ¡ ©â   âਡã⮢
bit 4,a ; ¯ ¯ª  ?
jp nz,dir_name_med ; ¤ , ¢ë¢®¤ ¨¬¥­¨
; ä®à¬ â "file.ext" (¢á¥£¤  ¢ë¢®¤¨â 15 ᨬ¢®«®¢)
ld d,0 ; ¬ «¥­ìª¨¥ ¡ãª¢ë
fill_med1:
call fill_med1__
fill_med__:
ld a,(string_len)
sub 15 ; 15=¤«¨­  áâப¨ ¨¬¥­¨
ld b,a
jp spaces
;
fill_med1__:
call fill_med2__
fill_med11__:
ld b,e
jp spaces ; ¤®¡ ¢¨âì ª®­æ¥¢ë¥ ¯à®¡¥«ë
;
fill_med2__:
ld b,8 ; ¨¬ï ä ©« 
ld e,1+3 ; áç¥â稪 ¤®¯®«­. ¯à®¡¥«®¢
call fill_med4__
ld a,(hl)
cp " "
jr z,fill_med3__
dec e
ld (ix+0),"." ; ᨬ¢®« ¢ áâபã
inc ix
fill_med3__:
ld b,3 ; à áè.
fill_med4__:
ld a,(hl)
cp " "+1
jr c,fill_med7__
; ¢ë¢®¤ ᨬ¢®« 
bit 0,d
jr nz,fill_med6__ ; ­¥ ¬¥­ïâì ॣ¨áâà ¡ãª¢
cp "_"
jr z,fill_med6__
set 5,a
cp "ð" ; 240
jr nz,fill_med6__
inc a ; 241 = "ñ"
fill_med6__:
ld (ix+0),a ; ᨬ¢®« ¢ áâபã
inc ix
inc hl
djnz fill_med4__
ret
fill_med7__:
inc hl
inc e
djnz fill_med7__
ret
;
dir_name_med:
call dir_name ; ¢áâ ¢¨âì ¨¬ï ¯ ¯ª¨
ld a,(string_len)
sub 12 ; ¤«¨­  ¨¬¥­¨ ¯ ¯ª¨
ld b,a ; ç¨á«® ¯à®¡¥«®¢
jp spaces ; ¢áâ ¢¨âì ¯à®¡¥«ë
; ¢áâ ¢¨âì ᯥª-¨¬ï "file.ext" ä®à¬ â 
;--------------------------------------
fill_med_spec:
call fill_med_spec_name
jr fill_med__
;
fill_med_spec_name:
ld b,8-1 ; ¨¬ï ä ©« 
ld e,1+3 ; áç¥â稪 ¤®¯®«­. ¯à®¡¥«®¢
call fill_med_spec2
ld a,(hl)
cp " "
jr z,fill_med_spec1
dec e
ld (ix+0),"." ; ᨬ¢®« ¢ áâபã
inc ix
fill_med_spec1:
call fill_spec_ext1 ; ᪮¯¨à. à áè.
jr fill_med11__ ; ¤®¡ ¢¨âì ª®­æ. ¯à®¡¥«ë
;
fill_med_spec2:
ld a,(hl)
and 7Fh ; á¡à.7-© ¡¨â (¬ àª.ä ©« )
ld (ix+0),a
inc ix
inc hl
fill_med_spec3:
ld a,(hl)
cp " "
jr nz,fill_med_spec4
inc hl
ld a,(hl)
dec hl
cp " "
jr z,fill_med_spec5
ld a,b
dec a
jr z,fill_med_spec5
ld a,"_" ;" " ; ᨬ¢®« ¢­ãâਠ¨¬¥­¨
fill_med_spec4:
ld (ix+0),a
inc ix
inc hl
djnz fill_med_spec3
ret
;
fill_med_spec5:
inc hl
inc e
djnz fill_med_spec5
ret
;-------------------------------------------------
; Brief
;-------------------------------------------------
fill_brief:
bit 6,b
jr nz,fill_brief_spec ; brief-spec
; ms-dos
ld a,(de) ;+11 ᬥé. ¤® ¡ ©â   âਡã⮢
bit 4,a ; ¯ ¯ª  ?
jp nz,dir_name ; ¤ , ¢ë¢®¤ ¨¬¥­¨
; ä®à¬ â "filename ext"
ld b,8
call L22BD ; ¨¬ï ä ©« 
ld (ix+0)," "
inc ix
ld b,3
jp L22BD ; à áè. ä ©« 
;
; ä®à¬ â "filename ext"
fill_brief_spec:
ld b,1 ; ç¨á«® ¯à®¡¥«®¢ ¬¥¦¤ã "Filename" ¨ "Ext"
jp fill_spec_name
;-------------------------------------------------
; Full-Spec
;-------------------------------------------------
;º Name ³ Size³Start³SSz³Trk³Secº
;ºFilename Ext³00000³00000³000³000³000º
;
fill_full_spec:
ld b,3 ; ç¨á«® ¯à®¡¥«®¢ ¬¥¦¤ã "Filename" ¨ "Ext"
call fill_spec_name ; ¢ë¢®¤ "Filename Ext"
fill_full_spec1:
inc hl ; ­  áâ àâ.  ¤à¥á ä ©«  (2-ï ¡ãª¢  à áè.)
push hl
; ª®«®­ª  "Size"
inc hl
inc hl
call L0020 ; ¢ de à §¬¥à ä ©«  ¢ ¡ ©â å
call dec16s ; 16-bit ç¨á«® á ¢¥¤. ¯à®¡¥« ¬¨
call separator ; "³"
pop hl
; ª®«®­ª  "Start"
call L0020 ; ¢ de áâ àâ.  ¤à¥á
call dec16s
call separator
inc hl
inc hl
; ª®«®­ª  "SSz"
ld a,(hl) ; à §¬¥à ä ©«  ¢ ᥪâ®à å
inc hl
call dec9 ; 0..999 ç¨á«® á ¢¥¤. ¯à®¡¥« ¬¨
call separator
db 3Eh ; ld a,..
trd_records:
db true ; ä« £ trd-ᯨ᪠ ä ©«®¢
or a
jr z,fill_spec_scl
; ª®«®­ª  "Trk" (­®¬¥à ¤®à®¦ª¨ ä ©« )
inc hl
ld a,(hl)
call dec9
call separator
dec hl
; ª®«®­ª  "Sec" (­®¬¥à ¯¥à¢®£® ᥪâ®à  ä ©« )
ld a,(hl)
jp dec9
;
; SCL-ᯨ᮪ ä ©«®¢
fill_spec_scl:
ld b,3
call spaces ; ®ç¨áâ¨âì ª®«®­ªã "Trk"
call separator
ld b,3
jp spaces ; ®ç¨áâ¨âì ª®«®­ªã "Sec"
; ˆ¬ï ᯥª-ä ©«  ä®à¬ â  "Filename Ext"
; ¢å®¤: b=ç¨á«® ¯à®¡¥«®¢ ¬¥¦¤ã "Filename" ¨ "Ext"
fill_spec_name:
push bc
ld a,(hl)
and 7Fh ; á¡à.7-© ¡¨â (¬ àª.ä ©« )
ld (ix+0),a
inc ix
inc hl
ld b,7
call A0E90 ; ᪮¯¨à. ¨¬ï ä ©« 
pop bc
call spaces
push hl
call fill_spec_ext1 ; ᪮¯¨à. à áè.
call separator ; "³"
pop hl
ret
;
; Š®¯¨à®¢ ­¨¥ ᯥª-à áè¨à¥­¨ï ä ©« 
fill_spec_ext1:
; § ¯à¥é¥­ë ¢ ms-dos
; " + , . / : ; < = > [ \ ] |
; 22 2B 2C 2E 2F 3A 3B 3C 3D 3E 5B 5C 5D 7C
;
ld bc,0320h ; à áè./¯à®¡¥«
ld a,(hl)
cp "B" ; (B)asic-ä ©«
jr nz,fill_spec_ext__+1
ld (ix+0),a ; ᨬ¢®« ¢ áâபã
inc ix
inc hl
dec b
jr fill_spec_ext2__
fill_spec_ext__:
ld a,(hl)
cp " "+1
jr c,fill_spec_ext2__ ; ­¥â à áè.
cp "z"+1
jr nc,fill_spec_ext2__
cp '"'
jr z,fill_spec_ext2__
cp "-"
jr z,fill_spec_ext1__
cp "," ; 2Ch
jr c,fill_spec_ext1__
cp "/"+1 ; 2Fh+1
jr c,fill_spec_ext2__
cp ":" ; 3Ah
jr c,fill_spec_ext1__
cp ">" ; 3Eh
jr c,fill_spec_ext2__
cp "["
jr c,fill_spec_ext1__
cp "_"+1
jr c,fill_spec_ext2__
cp "`"
jr z,fill_spec_ext2__
fill_spec_ext1__:
ld (ix+0),a ; ᨬ¢®« ¢ áâபã
inc ix
inc hl
djnz fill_spec_ext__
ret
;
fill_spec_ext2__:
ld (ix+0),c ; ᨬ¢®« ¢ áâபã
inc ix
inc hl
djnz fill_spec_ext2__
ret
;-------------------------------------------------
; ‚áâ ¢ª  áâப¨ ¢ ¡ãä¥à (¬ «¥­ìª¨¬¨ ¡ãª¢ ¬¨)
;-------------------------------------------------
; in: hl=áâப 
; ix=¡ãä¥à
; b=¤«¨­  ¢å®¤. áâப¨
;
L22BD: ld a,(hl)
inc hl
cp "_"
jr z,A22D0_
set 5,a
cp "ð" ; 240
jr nz,A22D0_
inc a ; 241 = "ñ"
A22D0_: ld (ix+0),a ; ᨬ¢®« ¢ áâபã
inc ix
djnz L22BD
ret
;-----------------------------------------------------------
; ‚뢮¤ ¨­ä®à¬. áâப¨ ¢­¨§ã ¯ ­¥«¨
;-----------------------------------------------------------
print_status:
call test_show_panels ; â¥áâ ­  ०¨¬ ¢ª«. ¯ ­¥«¥©
ret z ; ¢ëª«.
ld a,(format_mode)
and form_info+form_qview
ret nz
call get_record ;  ¤à¥á ⥪. § ¯¨á¨ ¢ ¯ ¯ª¥
ld b,a ;+11  âਡãâ ä ©« 
jr print_status6__
;
print_status1:
db 21h ; ld hl,..
print_status1__:
dw 0 ; á®åà. ­ ç «® § ¯¨á¨ (¨§ ª â «®£ )
db 6 ; ld b,..
print_status2__:
db 0 ;  âਡãâ ä ©« 
print_status6__:
; ®ç¨áâ¨âì áâ â. áâபã
di
ld (print_stat_stack),sp ; á®åà. á⥪
ld de,2020h ; ¯à®¡¥«ë
ld sp,status_string+42 ; ª®­¥æ áâப¨ - 1
ld a,19 ; 38/2
print_stat_loop:
push de
dec a
jr nz,print_stat_loop
db 31h ; ld sp,..
print_stat_stack:
dw 0
ei
ld ix,status_string+4 ; ¡ãä¥à áâப¨
ld a," "
ld (separ__),a
ld a,(format_mode) ; ä®à¬ â  ªâ. ¯ ­¥«¨
bit 6,a ; spec
jr nz,print_status_spec
bit 4,b ; ¯ ¯ª  ?
jr z,print_status4__ ; ­¥â
bit 0,a ; full
jr z,print_status3__ ; ­¥â
call dir_name ; ¢áâ ¢¨âì ⮫쪮 ¨¬ï ¯ ¯ª¨
jr print_status5__
;
print_status3__:
call dir_name_full ; ¢áâ ¢¨âì ¨¬ï+¤ â +¢à¥¬ï ¯ ¯ª¨
jr print_status5__
;
; ¨¬ï ä ©« 
print_status4__:
ld d,1 ; ­¥ ¬¥­ïâì ॣ¨áâà ¡ãª¢
call fill_med1__ ; ä®à¬ â "file.ext" (¢ë¢®¤¨â 15 ᨬ¢.)
ld a,(format_mode) ; ä®à¬ â  ªâ. ¯ ­¥«¨
bit 0,a ; full
call z,fill_string1__ ; ¢áâ ¢¨âì à §¬¥à+¤ â +¢à¥¬ï
print_status5__:
ld a,"³"
ld (separ__),a ; ¢®ááâ. à §¤¥«¨â¥«ì
ld (ix+0),0 ; ª®­¥æ ®¯¨á â¥«ï
; ¢ë¢®¤ £®â®¢®© áâப¨
ld hl,status_string ; ®¯¨á â¥«ì áâப¨
jp draw_text ; ¯®§¨æ. ¢ë¢®¤ áâப¨
;
;
; § ¯®«­¥­¨¥ ᯥª-áâப¨
print_status_spec:
; ä®à¬ â "file.ext"
push hl
call fill_med_spec_name ; ¢áâ ¢¨âì ᯥª. ¨¬ï
pop hl
ld bc,8 ; ᬥé. ­  1-î ¡ãª¢ã à áè.
add hl,bc ; ¤«ï ¯/¯ fill_full_spec1
ld a,(format_mode) ; ä®à¬ â  ªâ. ¯ ­¥«¨
bit 0,a ; full
call z,fill_full_spec1 ; ¢áâ ¢¨âì "Size-Start-SSz-Trk-Sec"
jr print_status5__ ; ¢ë¢®¤ £®â®¢®© áâப¨