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

488 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.

;/////////////////////////////////////////////////////////////////////
; ‚뢮¤ ¤ ­­ëå  ªâ. ¯ ­¥«¨ -> ¢ ¯ áá. ¯ ­¥«ì (¢ë§ë¢ ¥âáï ¨§ ä ©«¥à )
; <âਣ£¥à­ ï ä¨âç >
;/////////////////////////////////////////////////////////////////////
alt_qview_panel:
call test_show_panels ; â¥áâ ­  ०¨¬ ¢ª«. ¯ ­¥«¥©
ret z ; ¢ëª«.
; â¥áâ ­ «¨ç¨ï qview-ä®à¬ â  ­   ªâ. ¯ ­¥«¨
ld a,(format_mode) ; ä®à¬ â  ªâ. ¯ ­¥«¨
and form_qview
jr nz,set_norm_actpanel ; ¢ë¢¥á⨠­®à¬.  ªâ¨¢­ãî ¯ ­¥«ì
ld hl,qview1_ ; âਣ£¥à ¯ áá. ¯ ­¥«¨
ld a,(hl)
or a
jr nz,set_norm_noactpanel ; ¢ë¢¥á⨠­®à¬. ¯ áᨢ­ãî ¯ ­¥«ì
jr set_qview_noactpanel ; qview-¯ ­¥«ì ¢ ¯ áá. ¯ ­¥«¨ ( ªâ. ¤ ­­ë¥)
;--------------------------------------------------
; ‚뢥á⨠­®à¬ «ì­®©  ªâ. ¯ ­¥«ì
;--------------------------------------------------
set_norm_actpanel:
ld hl,qview_ ; âਣ£¥à  ªâ. ¯ ­¥«¨
ld (hl),0 ; á¡à. âਣ£¥à
inc hl
ld a,(hl) ; ï祩ª  form_under_qview
ld (format_mode),a ; ä®à¬ â  ªâ. ¯ ­¥«¨
jp A20FC ; ¢ë¢¥á⨠¯ ­¥«ì
;--------------------------------------------------
; ‚뢥á⨠­®à¬ «ì­®© ¯ áá. ¯ ­¥«ì
;--------------------------------------------------
set_norm_noactpanel:
call change_panel
call set_norm_actpanel
jp change_panel
;----------------------------------------------------
; ‚뢥á⨠qview-¯ ­¥«ì ¢  ªâ. ¯ ­¥«¨ (¯ áá. ¤ ­­ë¥)
; (¢ë§ë¢ ¥âáï ¨§ Œ¥­î)
;----------------------------------------------------
set_qview_actpanel:
; § ¯®«­¨âì ¤ ­­ë¬¨ â¨â«-®¯¨á â¥«ì + ãáâ. ¥£® ⨯
call change_panel
call get_qview_data ; ¯ áá. ¤ ­­ë¥
; push af
call change_panel
jr set_qview_actpanel1
; pop af
; ret nc ; ¯ ¯ª 
; ¢ë¢®¤ ᮤ¥à¦. ä ©« 
; call draw_half_frame ; ®ç¨áâ¨âì ¯ ­¥«ì
;set_qview_file:
; ld hl,up_info ; ®¯¨á â¥«ì "ÉÍÍÍÍÍÍÍÍÍÍ»"
; call draw_text
; ld hl,title_qview ; ®¯¨á â¥«ì ®¤­®£® â¨â« 
; call draw_text
; db 3Eh;-
;set_qview_fl:
; db false ; ä« £
; or a
; ld a,0
; ld (set_qview_fl),a ; á¡à. ä« £
; jr nz,$+11;-
; call change_panel
; call alt_file_viewer ; ¢ë¢¥á⨠ᮤ¥à¦. ä ©« 
; call change_panel
; scf
; ret
; ­ áâà. ä®à¬ â
set_qview_actpanel1:
call dinqview_res_flag ; "dinamqview" 㦥 ®âà ¡®â «
ld de,format_mode ; ä®à¬ â  ªâ. ¯ ­¥«¨
ld a,(de)
bit 4,a ; qview
ret nz ; ­¥ ®âà ¡. ¯®¢â®à­®
bit 3,a ; info
jr z,$+5
ld a,(form_under_info) ; ä®à¬ â ¯®¤ info-¯ ­¥«ìî
ld hl,qview_ ; âਣ£¥à  ªâ. ¯ ­¥«¨
ld (hl),1 ; ãáâ. âਣ£¥à
inc hl
ld (hl),a ; form_under_qview
and form_trd ; ãç¥áâì 6-© ¡¨â ᯥª-ä®à¬ â 
or form_qview
ld (de),a ; ãáâ. qview-ä®à¬ â
xor a
ld (info_),a ; á¡à. info-âਣ£¥à
ret
;----------------------------------------------------
; ‚뢥á⨠qview-¯ ­¥«ì ¢ ¯ áá. ¯ ­¥«¨ ( ªâ. ¤ ­­ë¥)
;----------------------------------------------------
set_qview_noactpanel:
; § ¯®«­¨âì ¤ ­­ë¬¨ â¨â«-®¯¨á â¥«ì + ãáâ. ¥£® ⨯
call get_qview_data
; push af
xor a
ld (D48B1),a ; á¡à. ¨­¢¥àá¨î â¨â« 
call change_panel
call set_qview_actpanel1 ; ­ áâà. ä®à¬ â
call draw_half_frame ; ®ç¨áâ¨âì ¯ ­¥«ì
; pop af
; jr c,set_qview_noactp2 ; ä ©«
call prn_up_path ; ¢ë¢¥á⨠§ ¯®«­. ®¯¨á â¥«ì ¯ ¯ª¨
;set_qview_noactp1:
call change_panel
ld a,true
ld (D48B1),a ; ãáâ. ¨­¢¥àá¨î â¨â« 
ret
; ­ áâநâì æ¢¥â qview-â¨â« 
;set_qview_noactp2:
; ld a,(D48B1) ; ä« £ ¨­¢¥àᨨ path-áâப¨  ªâ. ¯ ­¥«¨
; or a
; ld a,(color_array+4) ; 30h 梥â "Selected title"
; jr nz,$+5
; ld a,(color_array+2) ; 1Bh 梥â "Normal text"
; ld (qview_color1__),a ; 梥â
; call set_qview_file
; jr set_qview_noactp1
type_title_qview:
db 0 ; ä« £ 00/01 - ¯ ¯ª /ä ©«
;-----------------------------------------------------------
; ‡ ¯®«­¨âì â¨â«-®¯¨á â¥«ì ¤ ­­ë¬¨ ¤¨áª   ªâ. ¯ ­¥«¨
; ¨ ãáâ ­®¢¨âì ⨯ ¢ë¢®¤¨¬®£® â¨â« -®¯¨á â¥«ï.
;-----------------------------------------------------------
get_qview_data:
; ¢áâ ¢¨âì ¨¬ï ⥪. ¯ ¯ª¨ ¨«¨ ¯ãâì + ᪠­¨à®¢ ­¨¥
call print_qview_name
ret c ; 㪠§ â¥«ì ­  ä ©«¥
; ç¨á«® ¯ ¯®ª
exx
ld hl,0 ; áâ.à §àï¤
exx
ld hl,(count_dirs) ; ç¨á«® ¯ ¯®ª
ld iy,tmp2__
res 7,(iy+0)
ld ix,qview_total_folders ; "00,000"
call decimal16
; ç¨á«® ä ©«®¢
exx
ld hl,0 ; áâ.à §àï¤
exx
ld hl,(count_files) ; ç¨á«® ä ©«®¢ ¢ ¯ ¯ª¥
ld iy,tmp2__
res 7,(iy+0)
ld ix,qview_total_files ; "00,000"
call decimal16
; ®¡é. à §¬¥à ä ©«®¢
exx
ld hl,(size_files+2) ; áâ.à §àï¤
exx
ld hl,(size_files) ; ¬«.à §àï¤
ld ix,qview_total_bytes ; "0,000,000,000"
jp decimal32
qview_max_name equ 29 ; ¬ ªá. ¤«¨­  áâப¨ ¯ã⨠¤«ï ".."
;------------------------------------------------------------------------
; ‚뢮¤ ¨¬¥­¨ ¯ ¯ª¨ (¨«¨ ¯ã⨠".." ¯ ¯ª¨) ¨ ¢ëç¨á«¥­¨¥ ¥¥ ¯ à ¬¥â஢.
; …᫨ 㪠§ â¥«ì ­  ".." ¯ ¯ª¥, â® ¢ëç¨á«ïîâáï ¥¥ ¯ à ¬¥âàë.
; …᫨ 㪠§ â¥«ì ­  ¨¬¥­¨ ä ©« , â® ¢ë©â¨.
;
; ¢ë室: CF - 㪠§ â¥«ì ­  ä ©«¥
;------------------------------------------------------------------------
print_qview_name:
; ®ç¨áâ¨âì ¯à¥¦­¥¥ ¨¬ï ¯ ¯ª¨
ld hl,qview_name_folder ; ¡ãä¥à ¨¬¥­¨
ld b,qview_max_name ; 29 áç¥â稪
ld a," "
ld (hl),a
inc hl
djnz $-2
;
call get_record
ld a,(de) ;+11  âਡãâ ä ©« 
and 10h ; ¯ ¯ª  ?
ld a,true ; ä ©«
ld (type_title_qview),a ; ä« £ ⨯  qview-®¯¨á â¥«ï
scf
ret z
xor a ; ¯ ¯ª 
ld (type_title_qview),a ; ä« £ ⨯  qview-®¯¨á â¥«ï
call qview_scan_folder ; ¢ëç¨á«¨âì à §¬¥à ¯ ¯ª¨
ld a,(hl) ; ­ ç «® ¨¬¥­¨ ¯ ¯ª¨
cp "."
jr z,qview_parent_name ; ".." ¯ ¯ª 
ld ix,qview_name_folder ; ¡ãä¥à ¨¬¥­¨
jp dir_name ; ¢áâ ¢¨âì ¨¬ï ¯ ¯ª¨
;-----------------------------------------------------------
; ‚áâ ¢¨âì ¯ãâì ¤«ï ".." ¯ ¯ª¨. „«¨­­ë© ¯ãâì ®¡à¥§ ¥âáï
; ;¢å®¤: de=ªã¤  ª®¯¨à®¢ âì
;-----------------------------------------------------------
qview_parent_name:
ld de,qview_name_folder ; ªã¤ 
ld hl,(__path) ; ®¯¨á â¥«ï ¯ã⨠ ªâ. ¯ ­¥«¨
ld a,(hl) ; ¤«¨­  áâப¨
sub 2 ; ¬¨­ãá ¯à®¡¥«ë ­ ç « -ª®­æ  áâப¨
ld bc,5 ; ᬥé. ¤® ¡ãª¢ë ¤¨áª 
add hl,bc ; hl=­ ç «® ¡ãª¢ë ¤¨áª  áâப¨
ld bc,qview_max_name ; 29 ¬ ªá. ¤«¨­  ¯ãâ¨
cp qview_max_name+1
jr c,qview_parent_loop
; ®¡à¥§ âì ¤«¨­­ãî áâபã
ldi ; ᪮¯¨à®¢ âì "X:\"
ldi
ldi
sub (qview_max_name-5)+3 ; ¤«¨­  ®áâ âª  ¯ã⨠+ ¤«¨­  "X:\"
ld c,a
add hl,bc ; ­  ­ ç «® ¬ ªá. ¤«¨­­®© áâப¨
ld a,"." ; ..
ld (de),a
inc de
ld (de),a
inc de
ld bc,qview_max_name-5 ; ¬¨­ãá ¤«¨­ã áâப¨ "X:\.."
qview_parent_loop:
ld a,(hl)
ldi
ret po ; ¢¥áì ¯ãâì ᪮¯¨à®¢ ­
or a
jr nz,qview_parent_loop
push de
pop ix ; ¡ãä¥à
ld b,c
jp spaces ; ¤®¯¨á âì 墮áâ®¢ë¥ ¯à®¡¥«ë
;---------------------------------------------------------------------
; ‚뢮¤ 32-å ¡¨â­ëå ç¨á¥« ¢ ¡ãä¥à, ¢ ¤¥áïâ¨ç­®¬ ä®à¬ â¥ á
; à §¤¥«¥­¨¥¬ à §à冷¢ § ¯ï⮩ ¨ ¢¥¤ã騬¨ ¯à®¡¥« ¬¨
;---------------------------------------------------------------------
; in: hl' = áâ. à §àï¤
; hl = ¬«. à §àï¤
; ix = ¡ãä¥à
;---------------------------------------------------------------------
decimal32:
ld de,0CA00h
exx
ld de,3B9Ah ; 1.000.000.000
exx
ld iy,tmp2__
res 7,(iy+0)
call GetN32
call print_comma1
ld de,0E100h
exx
ld de,05F5h ; 100.000.000
exx
call GetN32
ld de,9680h
exx
ld de,98h ; 10.000.000
exx
call GetN32
decimal24:
ld de,4240h
exx
ld de,0Fh ; 1.000.000
exx
call GetN32
call print_comma1
ld de,86A0h
exx
ld de,1 ; 100.000
exx
call GetN32
decimal16:
ld de,10000
exx
ld de,0 ; 10.000
exx
call GetN32
ld de,1000 ; 1.000
call GetN16
call print_comma1
ld de,100 ; 100
call GetN16
ld de,10 ; 10
call GetN16
ld a,l
add a,"0"
jr GetN163
tmp2__: db 0
GetN32: ld a,2Fh
and a
GetN321:inc a
sbc hl,de
exx
sbc hl,de
exx
jp nc,GetN321
add hl,de
exx
adc hl,de
exx
jr GetN160
;
GetN16: ld a,2Fh
and a
GetN161:inc a
sbc hl,de
jp nc,GetN161
add hl,de
GetN160:cp "0"
jr z,GetN162
set 7,(iy+0)
GetN162:bit 7,(iy+0)
jr nz,GetN163
ld a," " ; ¢¥¤ã騩 ¯à®¡¥«
GetN163:ld (ix+0),a ; á®åà. ¢ ¡ãä¥à¥
inc ix
ret
; à §¤¥«¨â¥«ì à §à冷¢
print_comma1:
ld a,","
jr nz,prn_com__
ld a," "
prn_com__:
ld (ix+0),a
inc ix
ret
;-----------------------------------------------------------
; „¨­ ¬¨ç¥áª¨© ¢ë¢®¤  ªâ. ¯ ­¥«¨ ¢ ¯ áᨢ­®©
; ¢ë室: NZ - ᬥ­¨âì á®áâ. key-¡ à 
;-----------------------------------------------------------
dinam_qview_panel:
call test_show_panels ; â¥áâ ­  ०¨¬ ¢ª«. ¯ ­¥«¥©
ret z ; ¢ëª«.
ld a,(format_mode1) ; ä®à¬ â ¯ áá. ¯ ­¥«¨
and form_qview
ret z ; ०¨¬ ¢ëª«.
; § ¤¥à¦ª  ¯¥à¥¤ ®âà ¡®âª®©
ld b,60 ; 0,6 ᥪ.
dinqview_loop:
push bc
call get_mouse_info ; ç⥭¨¥ á®áâ®ï­¨ï ¬ë誨
pop bc
jr z,dinqview_next ; ª­®¯ª¨ ­¥ ­ ¦ âë
ld a,h
cp 28 ; Y ª®®à¤. ¬ë誨
jr nc,dinqview_res_flag
jr dinqview_set_flag
dinqview_next:
push bc
ld a,3 ; ®¯à®á ª« ¢ë
rst 20h
ex af,af'
ld a,b
pop bc
and 11110000b ; ­ ¦ âë Ctrl,Alt,Shift ?
ret nz ; ¤ 
ex af,af'
jr nz,dinqview_exit ; ¥áâì ᨬ¢®«
halt
djnz dinqview_loop
db 3Eh ; ld a,..
dinqview_flag:
db true ; ä« £ ­¥®¡å. ®âà ¡®âª¨ "dinam_qview_panel"
or a
ret z ; ­¥ ®âà ¡ â뢠âì
call get_qview_data ; § ¯®«­¨âì ®¯¨á â¥«ì
; jr c,dinqview_file ; 㪠§ â¥«ì ­  ä ©«¥
call change_panel
call draw_half_frame ; ®ç¨áâ¨âì ¯ ­¥«ì
call upath6_ ; ¢ë¢¥á⨠§ ¯®«­. ®¯¨á â¥«ì
call change_panel
dinqview_res_flag:
xor a ; false
jr $+4
dinqview_set_flag:
ld a,true
ld (dinqview_flag),a
dinqview_exit:
xor a ; Z-ä« £
ret
; ‚뢥á⨠ᮤ¥à¦¨¬®¥ ä ©«  ¢ ¯ áá. ¯ ­¥«¨
;dinqview_file:
; call change_panel
; call draw_half_frame ; ®ç¨áâ¨âì ¯ ­¥«ì
; ld hl,title_qview ; ®¯¨á â¥«ì ®¤­®£® â¨â« 
; call draw_text
; call change_panel
; call alt_file_viewer ; ¢ë¢¥á⨠ᮤ¥à¦. ä ©« 
; jr dinqview_res_flag ; á¡à. ä« £ ®âà ¡®âª¨ "dinqview"
;-------------------------------------------------
; <20>®¤áç¨â âì à §¬¥à ¯ ¯ª¨
; ¢å®¤: hl=­ ç «® § ¯¨á¨
;-------------------------------------------------
qview_scan_folder:
push hl
push hl
ld hl,win_scan_folder ; ®¯¨á â¥«ì "Scanning the folder..."
call WinSimple ; ®âªàëâì ®ª­®
pop hl
call scan_folder ; ᪠­¨à. ¯ ¯ªã
call CloseWinSimple ; § ªàëâì ®ª­®
ld a,1 ; ®ç¨áâ¨âì ¡ãä¥à ª« ¢ë
rst 20h
pop hl
ret
;-------------------------------------------------
; ‘ª ­¨à®¢ ­¨¥ ¯ ¯ª¨  ªâ. ¯ ­¥«¨
; ¢å®¤: hl=­ ç «® § ¯¨á¨
;-------------------------------------------------
scan_folder:
xor a ; ०¨¬ "¯à®á⮥ ᪠­¨à. ¯ ¯ª¨"
scan_folder_alt:
ld (scan_mode),a ; ०¨¬ à ¡®âë ¯à®æ¥¤ãàë
; ᪮¯¨à. ¯ãâì ¯ ­¥«¨ ¢® ¢à¥¬. ¡ãä¥à
push hl
ld hl,(__buff) ; ®âªã¤ ,  ¤à¥á ¯ã⨠ ªâ. ¯ ­¥«¨
ld de,work_buffer ; ªã¤ 
ld a,(disk) ; ¤¨áª ¯ ­¥«¨
add a,"A"
ld (de),a
inc de
ld a,":"
ld (de),a
inc de
call copy_string ; (hl) -> (de) ¤® ­ã«ï
pop hl
ld a,(hl)
cp "." ; ".." ?
jr z,scan_fold1 ; ⮫쪮 ¯ãâì த¨â. ¯ ¯ª¨
; á®§¤ âì ­®¢ë© ¯ãâì
push hl
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=ªã¤ 
pop hl ; ®âªã¤ 
ld bc,0044h ; 11 -> 8.3
rst 10h
scan_fold1:
ld hl,work_buffer
ld c,1Dh ; ãáâ. ¯ãâì
rst 10h
jp ScanTree ; ᪠­¨à. ¯ ¯ªã