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

365 lines
7.6 KiB
NASM
Executable File
Raw Permalink 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.

; ¬¥âª¨ ­¥ à §¤¥«ïâì!
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 ToDSS
ld c,1 ; ãáâ. ¤¨áª
rst ToDSS
ret
; ‚뤥«¨âì ¨ ãáâ ­®¢¨âì ¯ãâì
cut_path:
ld hl,work_buffer ; ®âªã¤ 
ld de,ComLineBuff+5+2 ; ªã¤ 
push de
ld bc,0245h
rst ToDSS
pop hl
ld c,1Dh ; ãáâ. ¯ãâì
rst ToDSS
ret
; ‚뤥«¨âì ¨¬ï ä ©«  ¨§ áâப¨
cut_filename:
ld hl,work_buffer ; ®âªã¤ 
ld de,temp_fname ; ªã¤ 
ld bc,0345h ; ä®à¬ â "file.ext"
rst ToDSS
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 ToDSS
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 ToDSS
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,(DSS_PAGE)
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 (PORT_Y),a
; ¢ë¯®«­¨âì ä ©«
ld (stack1+1),sp
ld hl,work_buffer+127;255 ; ¨¬ï ä ©« 
ld bc,0040h
rst ToDSS
; áªàëâì á¨áâ. ¬ëèªã
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 ; ®âà ¡®â âì ¤®á-ª®¬ ­¤ã