mirror of
https://github.com/Tolik-Trek/File-Manager.git
synced 2026-06-15 01:11:36 +03:00
365 lines
7.6 KiB
NASM
Executable File
365 lines
7.6 KiB
NASM
Executable File
; ¬¥âª¨ ¥ à §¤¥«ïâì!
|
||
ccp_name:
|
||
db 'X:\SYSTEM.EXE ' ; 襫«
|
||
temp_fname:
|
||
ds 13 ; ¡ãä¥à ¯®¤ ¨¬ï § ¯ãáª. ä ©«
|
||
|
||
|
||
|
||
|
||
; ç¨á«® ¤®á-ª®¬ ¤
|
||
count_dos_commands equ 23 ; ¨¤¥ªá
|
||
|
||
; Š®¬ ¤ë „Ž‘
|
||
array_dos_commands:
|
||
db "CD"," " ;23 ¨¤¥ªá (áç¥â稪 "b")
|
||
db "CHDIR"," " ;22
|
||
; ¨§¬¥ïîâ ᯨ᮪ ä ©«®¢
|
||
db "DEL"," " ;21
|
||
db "ERASE"," " ;20
|
||
db "MD"," " ;19
|
||
db "MKDIR"," " ;18
|
||
db "RD"," " ;17
|
||
db "RMDIR"," " ;16
|
||
db "REN"," " ;15
|
||
db "RENAME"," " ;14
|
||
; ¥ ¨§¬¥ïîâ ᯨ᮪ ä ©«®¢
|
||
db "CLS"," "
|
||
db "DATE"," "
|
||
db "DIR"," "
|
||
db "ECHO"," "
|
||
db "EXIT"," "
|
||
db "HELP"," "
|
||
db "PATH"," "
|
||
db "PAUSE"," "
|
||
db "REM"," "
|
||
db "SET"," "
|
||
db "TIME"," "
|
||
db "VER"," "
|
||
db "VERSION"," "
|
||
|
||
|
||
|
||
|
||
count_extentions equ 4 ; ª®«-¢® à áè¨à¥¨©
|
||
|
||
; § १. à áè¨à¥¨ï ä ©«®¢
|
||
array_extensions:
|
||
db "EXE"," "
|
||
db "BAT"," "
|
||
db "TRD"," "
|
||
db "SCL"," "
|
||
|
||
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‘à ¢¨âì áâப¨ ¡¥§ ãç¥â ॣ¨áâà .
|
||
; Ž¡à §¥æ ¤®«¦¥ ¡ëâì ¢ ¢¥à奬 ॣ¨áâà¥
|
||
; ¨ § ª 稢 âìáï ¯à®¡¥«®¬.
|
||
; ¢å®¤: de - string1
|
||
; hl - string2 (®¡à §¥æ)
|
||
; ¢ë室: Z - à ¢ë
|
||
; NZ - ¥ à ¢ë
|
||
;-------------------------------------------------
|
||
stricmp:ld a,(de)
|
||
cp "a"
|
||
jr c,$+4
|
||
and 11011111b ; á¡à. 5-bit
|
||
cp (hl)
|
||
jr z,stricmp1
|
||
; á«¥¤. ®¡à §¥æ
|
||
ld a,(hl) ; ®¡à §¥æ
|
||
inc hl
|
||
cp " "
|
||
jr nz,$-4
|
||
dec a
|
||
ret
|
||
; ᮢ¯ ¤ ¥â
|
||
stricmp1:
|
||
inc hl
|
||
inc de
|
||
ld a,(hl) ; ®¡à §¥æ
|
||
cp " "+1
|
||
jr nc,stricmp ; ®¡à §¥æ ¥ § ª®ç¥
|
||
inc hl ; á«¥¤. ®¡à §¥æ
|
||
ld a,(de)
|
||
cp " "
|
||
ret z
|
||
or a
|
||
ret
|
||
|
||
|
||
; ‚뤥«¨âì ¨ ãáâ ®¢¨âì ¤¨áª
|
||
cut_disk:
|
||
ld hl,work_buffer ; ®âªã¤
|
||
ld de,ComLineBuff+5 ; ªã¤
|
||
ld bc,0145h
|
||
rst 10h
|
||
ld c,1 ; ãáâ. ¤¨áª
|
||
rst 10h
|
||
ret
|
||
|
||
; ‚뤥«¨âì ¨ ãáâ ®¢¨âì ¯ãâì
|
||
cut_path:
|
||
ld hl,work_buffer ; ®âªã¤
|
||
ld de,ComLineBuff+5+2 ; ªã¤
|
||
push de
|
||
ld bc,0245h
|
||
rst 10h
|
||
pop hl
|
||
ld c,1Dh ; ãáâ. ¯ãâì
|
||
rst 10h
|
||
ret
|
||
|
||
; ‚뤥«¨âì ¨¬ï ä ©« ¨§ áâப¨
|
||
cut_filename:
|
||
ld hl,work_buffer ; ®âªã¤
|
||
ld de,temp_fname ; ªã¤
|
||
ld bc,0345h ; ä®à¬ â "file.ext"
|
||
rst 10h
|
||
ret
|
||
|
||
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‚믮«¨âì ä ©«
|
||
; ¢å®¤: work_buffer - ¡à ï áâப
|
||
;-------------------------------------------------
|
||
Launch_File:
|
||
xor a ; false
|
||
ld (present_doscmnd),a ; á¡à. ä« £ ¯à¨§ ª ¤®á-ª®¬ ¤
|
||
call set_path_from_activ_panel ; ãáâ. á¨áâ. ¤¨áª ¨ ¯ãâì ®â ªâ. ¯ ¥«¨
|
||
ret c
|
||
ld hl,ComLineBuff+5
|
||
xor a
|
||
ld (hl),a ; á¡à. ï祩ªã
|
||
inc hl
|
||
inc hl
|
||
ld (hl),a ; +257 á¡à. ï祩ªã
|
||
; ¢ë¤¥«¨âì à áè. ä ©« ¨§ ª®¬-áâப¨
|
||
ld hl,work_buffer ; ®âªã¤
|
||
ld de,temp_fname ; ªã¤
|
||
ld bc,0445h
|
||
rst 10h
|
||
bit 3,a ; 㪠§ ¤¨áª ?
|
||
push af
|
||
call nz,cut_disk ; ¢ë¤¥«¨âì ¨ ãáâ. ¤¨áª
|
||
pop af
|
||
bit 2,a ; 㪠§ ¯ãâì ?
|
||
push af
|
||
call nz,cut_path ; ¢ë¤¥«¨âì ¨ ãáâ. ¯ãâì
|
||
pop af
|
||
bit 1,a ; 㪠§ ® à áè¨à¥¨¥ ?
|
||
jr z,no_file_extension ; ¥â
|
||
; â¥áâ à áè¨à¥¨ï ä ©«
|
||
ld b,count_extentions ; 4 ª®«-¢® à áè¨à¥¨©
|
||
ld hl,array_extensions ; à áè¨à¥¨ï
|
||
ld de,temp_fname ; áâப 1
|
||
call stricmp ; áà ¢¨âì áâப¨
|
||
jr z,ext_parsing ; § १. à áè¨à¥¨ï
|
||
djnz $-8
|
||
jr ext_execute
|
||
;
|
||
ext_parsing:
|
||
ld a,b
|
||
cp count_extentions ; "exe"
|
||
jr z,ext_execute
|
||
cp count_extentions-1 ; "bat"
|
||
jr z,ext_execute
|
||
cp count_extentions-2 ; "trd"
|
||
;jp z,ext_trd
|
||
cp count_extentions-3 ; "scl"
|
||
;jp z,ext_scl
|
||
; ®¡à ¡. ¤à. à áè¨à¥¨©
|
||
;...
|
||
ret
|
||
|
||
ext_execute:
|
||
no_file_extension:
|
||
call cut_filename ; ¢ë¤¥«¨âì ¨¬ï ä ©« ¨§ áâப¨
|
||
pop bc ; ¢®ááâ. ¡ « á á⥪
|
||
ld hl,ccp_name ; "system.exe "
|
||
ld de,work_buffer+127;255 ; ªã¤
|
||
ld bc,temp_fname - ccp_name ; ¤«¨ ¨¬¥¨
|
||
ldir
|
||
; ¢áâ ¢¨âì ¡ãª¢ã ¤¨áª
|
||
ld hl,ComLineBuff+5
|
||
ld a,(hl) ; ¤¨áª § ¤ ?
|
||
or a
|
||
jr nz,$+7 ; ¤
|
||
ld a,(disk) ; ¤¨áª ªâ. ¯ ¥«¨
|
||
add a,"A"
|
||
ld (de),a
|
||
inc de
|
||
ld a,":"
|
||
ld (de),a
|
||
inc de
|
||
; ¢áâ ¢¨âì ¯ãâì
|
||
ld hl,ComLineBuff+5+2
|
||
ld a,(hl) ; ¯ãâì § ¤ ?
|
||
or a
|
||
jr nz,$+5 ; ¤
|
||
ld hl,(__buff) ; ¯ãâì ªâ. ¯ ¥«¨
|
||
call copy_string ; (hl) -> (de) ¤® ã«ï
|
||
dec de
|
||
dec de
|
||
ld a,(de)
|
||
cp '\'
|
||
jr z,$+6
|
||
inc de
|
||
ld a,'\'
|
||
ld (de),a
|
||
inc de
|
||
; ¢áâ ¢¨âì ¨¬ï ä ©«
|
||
ld hl,temp_fname ; ®âªã¤
|
||
call copy_string ; (hl) -> (de) ¤® ã«ï
|
||
; ¢áâ ¢¨âì 墮áâ ª®¬ ¤ë
|
||
ld hl,work_buffer
|
||
ld bc,2000h ; ¯à®¡¥«/ã«ì
|
||
ld a,(hl)
|
||
inc hl
|
||
cp c
|
||
jr z,$+10 ; ¥â 墮áâ
|
||
cp b
|
||
jr nz,$-6
|
||
dec hl
|
||
dec de
|
||
call copy_string ; (hl) -> (de) ¤® ã«ï
|
||
run_dos_command:
|
||
; ®âà ¡®â âì exe/bat ä ©«ë ¨ ¤®á-ª®¬ ¤ë
|
||
call call_shell ; ¢ë§®¢ 襫« á¨á⥬ë
|
||
|
||
ld sp,stack ; á⥪ ”Œ
|
||
; "¯®¤ïâì" ¯®á«¥¤. áâப㠢뢮¤ íªà
|
||
ld c,8Eh ; ã§ âì ¯®«®¦. ªãàá®à
|
||
rst 08h
|
||
cp 30 ; ®¬¥à ª®¬-áâப¨
|
||
jr c,$+10
|
||
jr z,$+5
|
||
call new_line
|
||
call new_line
|
||
di
|
||
ld a,(page_module0) ; ¤à ©¢¥àë ª« ¢ë, ¬ë誨, ®¡ê¥ªâë
|
||
out (SLOT0),a
|
||
ei
|
||
ld a,(page_module1) ; ®¯¨á ⥫¨ ¯ ¥«¥©, à ¡. ¡ãä¥àë
|
||
out (SLOT1),a
|
||
db 3Eh ; ld a,..
|
||
present_doscmnd:
|
||
db false ; 01/00 ¤ /¥â ä« £ ¤®á-ª®¬ ¤
|
||
or a
|
||
jp z,cold_entry ; 宫®¤ë© ¢å®¤ ¢ ”Œ
|
||
; ¡ë« ¤®á-ª®¬ ¤
|
||
db 3Eh ; ld a,..
|
||
this_cd:db false ; ¯à¨§ ª "cd","chdir" ª®¬ ¤
|
||
or a
|
||
call nz,set_path_to_activ_panel ; ãáâ. ®¢ë© ¯ãâì ªâ. ¯ ¥«¨
|
||
jp warm_entry ; ⥯«ë© ¢å®¤ ¢ ”Œ
|
||
|
||
|
||
; ®¢ ï áâப
|
||
new_line:
|
||
ld a,0Dh
|
||
call $+5
|
||
ld a,0Ah
|
||
ld c,5Bh ; ¢ë¢®¤ ᨬ¢®« íªà
|
||
rst 10h
|
||
ret
|
||
|
||
|
||
|
||
;---------------------------------------------------
|
||
; ‚ë§®¢ 襫« á¨áâ¥¬ë ¤«ï ®âà ¡®âª¨ ä ©«®¢/ª®¬ ¤
|
||
;---------------------------------------------------
|
||
call_shell:
|
||
; áªàëâì ¬ëèªã ”Œ
|
||
call hide_mouse
|
||
; ¢ëª«. ¢ë¢®¤ ç ᮢ ¯ ¥«¥©
|
||
ld hl,enable_clock ; ä« £
|
||
ld a,(hl)
|
||
or a
|
||
jr z,$+7 ; 㦥 ¢ëª«.
|
||
ld (clock__+1),a ; á®åà. ä« £ (shell.asm)
|
||
ld (hl),false
|
||
; ¢®ááâ. ¤®á-áâà ¨æã
|
||
di
|
||
ld a,(port_82)
|
||
out (SLOT0),a
|
||
ei
|
||
; ¢®ááâ. á¨áâ¥¬ë© íªà
|
||
ld c,0B3h
|
||
ld a,(page_sys_screen) ; áâà ¨æ ¡ãä¥à
|
||
call screen__
|
||
; ¢®ááâ. ¯®«®¦. ªãàá®à á¨áâ. íªà
|
||
ld de,(sys_cursor_coords+1) ; Y/X
|
||
ld c,84h
|
||
rst 08h
|
||
; ¢®ááâ. § 票¥ ¯®àâ
|
||
ld a,(port_89)
|
||
out (89h),a
|
||
; ¢ë¯®«¨âì ä ©«
|
||
ld (stack1+1),sp
|
||
ld hl,work_buffer+127;255 ; ¨¬ï ä ©«
|
||
ld bc,0040h
|
||
rst 10h
|
||
; áªàëâì á¨áâ. ¬ëèªã
|
||
ld c,2
|
||
rst 30h
|
||
stack1: ld sp,0
|
||
ret
|
||
|
||
|
||
|
||
|
||
|
||
;-----------------------------------------------------------
|
||
; <20> §¡®à ª®¬ ¤®© áâப¨
|
||
;-----------------------------------------------------------
|
||
parsing_command_line:
|
||
ld hl,what ; ¯®«¥ ᮡë⨩
|
||
ld (hl),evNothing ; ᮡë⨥
|
||
xor a
|
||
ld hl,work_buffer+127;255 ; ¡à ï áâப
|
||
cp (hl)
|
||
ret z ; ¯ãáâ ï ª®¬-áâப
|
||
; ¯®¨áª ¤®á-ª®¬ ¤
|
||
ld b,count_dos_commands ; ç¨á«® ¤®á-ª®¬ ¤
|
||
ld hl,array_dos_commands ; ¬ áᨢ ¤®á-ª®¬ ¤
|
||
ld de,work_buffer+127;255 ; ¡à ï áâப
|
||
call stricmp ; áà ¢¨âì áâப¨
|
||
jr z,found_dos_command ; 諨
|
||
djnz $-8
|
||
; ¥ ¤®á-ª®¬ ¤
|
||
ld hl,work_buffer+127;255 ; ®âªã¤
|
||
ld de,work_buffer ; ªã¤
|
||
call copy_string ; (hl) -> (de) ¤® ã«ï
|
||
jp Launch_File ; ®âà ¡®â âì ä ©«
|
||
|
||
; „Ž‘-ª®¬ ¤ ©¤¥
|
||
found_dos_command:
|
||
ld a,true
|
||
ld (present_doscmnd),a ; ãáâ. ¯à¨§ ª ¤®á-ª®¬ ¤
|
||
ld a,b
|
||
ld (number_command),a ; ®¬¥à ª®¬ ¤ë (shell.asm)
|
||
cp 23 ; "cd" ?
|
||
jr z,$+6
|
||
cp 22 ; "chdir" ?
|
||
jr nz,dos_cmnd
|
||
ld (this_cd),a ; ãáâ. ¯à¨§ ª "cd","chdir" ª®¬ ¤
|
||
ld (change),a ; ãáâ. ä« £ ᬥë ⥪. ¤¨áª ¨«¨ ¯ãâ¨
|
||
dos_cmnd:
|
||
call set_path_from_activ_panel ; ãáâ. á¨áâ. ¤¨áª ¨ ¯ãâì ®â ªâ. ¯ ¥«¨
|
||
ld hl,ccp_name ; "system.exe "
|
||
ld de,work_buffer ; ªã¤
|
||
ld bc,temp_fname - ccp_name ; ¤«¨ ¨¬¥¨
|
||
ldir
|
||
ld hl,work_buffer+127;255 ; ®âªã¤
|
||
call copy_string ; (hl) -> (de) ¤® ã«ï
|
||
ld hl,work_buffer ; £®â®¢ ï áâப
|
||
ld de,work_buffer+127;255 ; ªã¤
|
||
call copy_string ; (hl) -> (de) ¤® ã«ï
|
||
pop bc ; ¢®ááâ. ¡ « á á⥪
|
||
jp run_dos_command ; ®âà ¡®â âì ¤®á-ª®¬ ¤ã
|