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

229 lines
5.2 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.

;===========================================================
; ‚믮«­¥­¨¥ ª®¬ ­¤ë <Enter> ­  ⥪. § ¯¨á¨
;===========================================================
Press_Enter:
ld hl,(all_files)
ld a,l
or h
ret z ; ¯ãáâ ï ¯ ­¥«ì
call get_record ; hl=­ ç «® § ¯¨á¨, a= âਡãâ ä ©« 
; ᪮¯¨à. ¨¬ï ä ©« /¯ ¯ª¨ ¢ ¡ãä¥à
push af
ld de,work_buffer ; ªã¤ 
ld bc,0044h ; 11 -> 8.3
rst 10h
pop af
and 10h
jp z,Launch_File ; ¢ë¯®«­¨âì ä ©« (launch.asm)
;-----------------------------------------
; <20> ¢¨£ æ¨ï ¯® ¯ ¯ª ¬
;-----------------------------------------
ld a,true
ld (enter_to_folder),a ; ãáâ. ä« £ "­ ¢¨£ æ¨ï ¯® ¯ ¯ª ¬"
ld de,work_buffer ; ¨¬ï ¯ ¯ª¨ "file.ext" ä®à¬ â 
ld hl,(__buff) ;  ¤à¥á  ¡á. ¯ã⨠ ªâ. ¯ ­¥«¨
ld bc,127;255 ; ¬ ªá. ¤«¨­  ¨¬¥­¨
ld a,(de)
cp "." ; ".." ?
jr z,return_to_parent ; ­ § ¤ ¢ த¨â. ¯ ¯ªã
; á®§¤ âì ­®¢ë© ¯ãâì
xor a
cpir ; ­  ª®­¥æ ¯ã⨠¯ ­¥«¨
dec hl
dec hl
ld a,'\'
cp (hl)
jr z,$+3
inc hl
ld (hl),a
inc hl
ex de,hl
call copy_string ; (hl) -> (de) ¤® ­ã«ï
; ¢®©â¨ ¢ ¯ ¯ªã
call fresh_list_panel ; ®¡­®¢¨âì ᯨ᮪ ¯ ­¥«¨ (space.asm)
enter_done:
xor a
ld l,a
ld h,a
ld (enter_to_folder),a ; ä« £ "­ ¢¨£ æ¨ï ¯® ¯ ¯ª ¬"
ld (fresh_list_point),hl ; á¡à. ¯®«®¦. 㪠§ â¥«ï (space.asm)
ld (fresh_list_offset),hl ; á¡à. ᬥé. ᯨ᪠ (space.asm)
enter_done1: ; <- ¢ë§®¢ ¨§ "seldrv.asm"
call tab1 ; ®¡­. ¯ãâì ª®¬-áâப¨ + ¢ë¢¥á⨠㪠§ â¥«ì
; â¥áâ ¢ª«. qview-०¨¬  ­  ¤à. ¯ ­¥«¨
ld a,(format_mode1) ; ä®à¬ â ¯ áá. ¯ ­¥«¨
bit 3,a ; info
jr nz,enter_done3
ret
;bit 4,a ; qview
;ret z
;ld a,true
;ld (dinqview_flag),a
;jp dinam_qview_panel ; ®¡­®¢¨âì qview-¯ ­¥«ì
;
enter_done3:
ld a,0 ; ä« £  ®¡­®¢«¥­¨ï info-¯ ­¥«¨
or a
ret z ; ­¥ ®âà ¡. ¯à¨ ­ ¢¨£ æ¨¨ ¯® ¯ ¯ª ¬
xor a
ld (enter_done3+1),a ; á¡à. ä« £
jp set_info_noactpanel ; ®¡­®¢¨âì info-¯ ­¥«ì
;-------------------------------------------------
; <20> § ¤ ¢ த¨â. ¯ ¯ªã
;-------------------------------------------------
return_to_parent:
; á®§¤ âì ­®¢ë© ¯ãâì
call cut_path_to_prev_dir ; ®£à ­¨ç¨âì ¯ãâì த¨â. ¯ ¯ª®©
; ¢®©â¨ ¢ த¨â. ¯ ¯ªã
push af
push hl
call read_new_folder ; ­®¢ë© ᯨ᮪ ª â «®£  + à §¬¥à ¯ ¯ª¨
call sorting ; à §¤¥«ì­ë© ᯨ᮪ 㪠§ â¥«¥© + á®àâ. ᯨ᪠
pop hl
pop af
; ᪮¯¨à. ¨¬ï த¨â. ¯ ¯ª¨
ld de,work_buffer+127;255 ; ªã¤ 
cp '\' ; ª®à¥­ì ¯ã⨠?
jr z,$+4
ld (de),a ; ¢®ááâ. ¨¬ï ¤®ç¥à­¥© ¯ ¯ª¨
inc de
inc hl
call copy_string
; 8.3 -> 11 ä®à¬ â ¨¬¥­¨
ld hl,work_buffer+127;255 ; ®âªã¤ 
ld de,temp_fname ; ªã¤  (launch.asm)
ld bc,0144h
rst 10h
; ¯®§¨æ. 㪠§ â¥«ì ­  ¨¬ï ¯ ¯ª¨
call calc_index_name ; ¢ëç¨á«¨âì ¨­¤¥ªá ¨¬¥­¨
call set_pointer ; à áç. ¯®«®¦. 㪠§ â¥«ï/ᯨ᪠
ld (fresh_list_offset),hl ; ᬥé. ᯨ᪠ (space.asm)
ld (fresh_list_point),bc ; ¯®«®¦. 㪠§ â¥«ï (space.asm)
call fresh_list_pan ; ®¡­®¢¨âì ᯨ᮪ ¯ ­¥«¨ (space.asm)
jr enter_done ; ®¡­®¢¨âì ¯ãâì ª®¬-áâப¨
; ‚ëç¨á«¨âì ¯®«®¦. ¨¬¥­¨ ¯ ¯ª¨ ¢ ᯨ᪥ ¯ ­¥«¨
; ¢å®¤: bc=¨­¤¥ªá ¯®«®¦. ¨¬¥­¨ ¯ ¯ª¨
; ¢ë室: bc=¯®«®¦. 㪠§ â¥«ï
; hl=ᬥé. ᯨ᪠
set_pointer:
ld hl,(all_files)
ld de,(_0D01+1) ; à §¬¥à áâà ­¨æë - 1
call cmphlde
jr nc,setpnt2
; ç¨á«® ä ©«®¢ ¬¥­ìè¥ á¯¨áª  ¯ ­¥«¨
setpnt1:ld hl,0
ret
;
; …᫨ ¨­¤¥ªá ¨¬¥­¨ ­¥ 㬥頥âáï ­  ¯¥à¢®© áâà ­¨æ¥,
; â® ¨¬ï ãáâ ­®¢¨âì ¢ ª®­¥æ áâà ­¨æë ¨ ­ áâநâì
; á®®â¢. ®¡à §®¬ ᬥé. ᯨ᪠.
setpnt2:ld a,c
sub e
ld a,b
sbc a,d
jr c,setpnt1 ; 㪠§. ¢ ¯à¥¤¥« å ¯¥à¢®© áâà ­¨æë ᯨ᪠
; bc=¨­¤¥ªá ¨¬¥­¨
; de=à §¬¥à áâà ­¨æë-1
ld l,c
ld h,b
ld bc,-1 ; áç¥â稪 ᬥé. ᯨ᪠
dec hl
inc bc
call cmphlde ; hl ¨ "à §¬¥à áâà ­¨æë - 1"
jr nc,$-5
ld hl,(offset_list) ; ᬥé. ᯨ᪠
ld a,l
sub c ; offset_list - áç¥â稪
ld a,h
sbc a,b
jr nc,$+4
ld l,c ; hl=ᬥé. ᯨ᪠
ld h,b
; 㪠§ â¥«ì ¢ ¯à¥¤¥« å ¯®á«¥¤. áâà ­¨æë ᯨ᪠
ld c,e ; bc=¯®«®¦. 㪠§ â¥«ï
ld b,d
ret
; ‚ëç¨á«¨âì ¨­¤¥ªá ¯®«®¦. ¨¬¥­¨ ¯ ¯ª¨ ¢ ᯨ᪥
; ¢å®¤: temp_fname - ¨¬ï ¯ ¯ª¨
; ¢ë室: bc=¨­¤¥ªá ¨¬¥­¨
calc_index_name:
ld bc,0 ; ¨­¤¥ªá ¯®«®¦¥­¨ï
exx
ld hl,(all_folders) ; ç¨á«® ¯ ¯®ª
ld a,(sort_type) ; ०¨¬ á®àâ¨à®¢ª¨
cp "u" ; unsorted
jr nz,$+5
ld hl,(all_files) ; ç¨á«® ¯ ¯®ª+ä ©«®¢
ld a,l
or h
exx
ret z
ld hl,(directory) ; ¬ áᨢ 㪠§ â¥«¥© ­  ¯ ¯ª¨
calc_index__:
ld e,(hl)
inc hl
ld d,(hl)
inc hl
push hl
ex de,hl ; ¨¬ï ᯨ᪠
ld de,temp_fname ; ¨¬ï ¯ã⨠(launch.asm)
call compare_fnames ; áà ¢­¨âì ¨¬¥­ 
pop hl
ret z
inc bc ; ++¨­¤¥ªá ¯®«®¦¥­¨ï
exx
dec hl
ld a,l
or h
exx
jp nz,calc_index__
ret
; ‘à ¢­¨âì áâப¨
; ¢å®¤: hl=string1
; de=string2
; ¢ë室: "z" - ᮢ¯ ¤ îâ
; "nz" - ­¥ ᮢ¯ ¤ îâ
compare_fnames:
ld a,11 ; ¤«¨­  áà ¢­¥­¨ï
ex af,af'
ld a,(de)
cp (hl)
ret nz
inc hl
inc de
ex af,af'
dec a
jr nz,$-8
ret
; Ž£à ­¨ç¨âì ¯ãâì ¯à¥¤ë¤ã饩 ¯ ¯ª®©
; ¢å®¤: hl=áâப  ¯ãâ¨
; ¢ë室: hl=­ ç «® ¨¬¥­¨ § â¥à⮩ ¯ ¯ª¨
; a=§ â¥àâë© á¨¬¢®« ¨¬¥­¨ ¯ ¯ª¨
cut_path_to_prev_dir:
ld e,l
ld d,h
xor a
cpir ; ­  ª®­¥æ áâப¨
dec hl
ld bc,127;255
ld a,'\'
cpdr
inc hl
ex de,hl
sbc hl,de ; ª®à¥­ì ¯ã⨠?
ex de,hl
jr nz,$+3 ; ­¥â
inc hl
ld a,(hl) ; á®åà. § â¨à. ᨬ¢®«
ld (hl),0 ; ®âª¨­ãâì ¯®á«¥¤. ¯ ¯ªã
ret