Estex-DSS/SHELL/SHELL_EXEC.ASM
Anatoliy Belyanskiy 6224d9fcb6 ...
2023-09-08 22:40:45 +10:00

195 lines
3.9 KiB
NASM
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.

; à ¡. ï祩ª 
D8374: dw 0
;-------------------------------------------------------------
; <20> §¡®à ¨ ¢ë¯®«­¥­¨¥ ¢¢¥¤¥­­ëå ª®¬ ­¤ ¨ ¨¬¥­ ä ©«®¢
;-------------------------------------------------------------
COMP: call EVALCMD ; (batch.asm)
ld hl,struct_input_line+5
dec hl
;ld hl,struct_input_line+4;;
ld c,(hl) ; ¤«¨­  áâப¨
ld b,0
inc hl ; struct_input_line+5
;ld hl,work_buffer+256;;
.loop: ld a,(hl)
cp " "
jr nz,COMP01
inc hl
dec c
jr nz,.loop
ret
;
COMP01: ld d,h
ld e,l
add hl,bc
ld (hl),0
sbc hl,bc
ld a,c
ex af,af'
ld a," "
cpir
jr nz,COMP005
inc c
COMP005: ex af,af'
sub c
ld c,a
ld hl,CMDLIST ; ᯨ᮪ ª®¬ ­¤ „Ž‘- 
; de=struct_input_line+5, c=¤«¨­  áâப¨
; ®â bat-®âà ¡®âª¨
COMP004: push bc
push de
COMP000: ld a,(de)
cp "a"
jr c,COMP001
cp "z"+1
jr nc,COMP001
and #5F ; a..z -> A..Z
COMP001: cp (hl)
jr nz,COMP002 ; ­¥ ¤®á-ª®¬ ­¤ë
inc hl
inc de
dec c
jr nz,COMP000
xor a
cp (hl)
jr nz,COMP002
pop bc
pop bc
ld a,(de)
cp " "
jr nz,NOSPC
inc de
NOSPC: inc hl
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
jp (hl) ; ­  á®®â¢. ®¡à ¡®â稪 ¤®á-ª®¬ ­¤ë
; <20>¥ ¤®á-ª®¬ ­¤ë. ’¥áâ ­  § ¤ ­¨¥ ¤¨áª  ¨ § ¯ã᪠䠩« 
COMP002: xor a
LD C,A
CPIR
inc hl
inc hl
pop de
pop bc
ld a,(hl)
or a
jr nz,COMP004 ; ­ § ¤ ¢ 横«, ¥é¥ ­¥ ¤®è«¨ ª®­æ  ᯨ᪠ ¤®á-ª®¬ ­¤
ld h,d
ld l,e
; hl=struct_input_line+5
ld b,(hl) ;+0 1-© ᨬ¢®«
inc hl
ld c,(hl) ;+1 2-© ᨬ¢®«
inc hl
ld a,(hl) ;+2 3-© ᨬ¢®«
or a ; § ¤ ­ ¤¨áª ⨯  "x:" ?
jr nz,RUN_EXT ; ­¥â, ¨¬¥¥¬ ¡®«ìè¥ 2-å ᨬ¢®«®¢
ld a,":" ; ¯®áâä¨ªá ¡ãª¢ë ¤¨áª 
cp c ; 2-© ᨬ¢®«
jr nz,RUN_EXT ; § ¤ ­ ­¥ ¤¨áª
ld a,b ; 1-© ᨬ¢®«
cp "a"
jr c,NOUP
cp "z"+1
jr nc,NOUP
and 5Fh ; a..z -> A..Z
;!!!!! âãâ ¢®ááâ ­ ¢«¨¢ ¥âáï ¤¨à¥ªâ®à¨ï ¨ ¬®£ãâ ¡ëâì £«îª¨ ­  ­®¢®¬ ï¤à¥
NOUP: sub "A" ; ­®¬¥à ¤¨áª 
ld c,Dss.ChDisk ; ᬥ­¨âì ⥪. ¤¨áª
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
; â¥áâ ­  áãé¥á⢮¢ ­¨¥ ¯ ¯ª¨ ­  楫¥¢®¬ ¤¨áª¥
ld hl,system_path ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS
jp nc,save_disk_path ; Ok
; ãáâ. ª®à¥­ì, ­¥â â ª®© ¯ ¯ª¨ ­  ­®¢®¬ ¤¨áª¥
ld hl,system_path+1 ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld (hl),0
dec hl
ld (hl),'\'
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
jp save_disk_path ; Ok
; § ¤ ­ ­¥ ¤¨áª
RUN_EXT: ex de,hl ; ¢®ááâ.  ¤à¥á ­ ç «  áâப¨
ld (D8374),hl ; struct_input_line+5
ld de,T8C1A ; ¡ãä¥à
ld bc,4*256 + Dss.EX_Path ; ¢ë¤¥«¨âì à áè. ä ©« 
RST ToDSS
ld hl,(D8374) ; ¨¬ï ä ©« 
jr c,A83D7 ; ¢ë¯®«­¨âì exe-ä ©«
bit 1,a ; ¥áâì à áè. ?
jr z,A839D ; ­¥â
; ¥áâì à áè. ä ©« 
ld de,T8C1A ; ¡ãä¥à à áè. ä ©« 
ld hl,T8C1E ; "BAT"
ld b,3 ; ¤«¨­  áà ¢­¥­¨ï
call A874E ; áà ¢­¨âì áâப¨
ld hl,(D8374)
jp z,A83E8 ; ¢ë¯®«­¨âì bat-ä ©« (batch.asm)
jr A83D7 ; ¢ë¯®«­¨âì exe-ä ©«
A839D: ld bc,0*256 + Dss.Exec ; § £à. ¨ ¢ë¯®«­¨âì ¯à®£à ¬¬ã
RST ToDSS
;R10
CALL Restore_Screen
;R10
ret nc ; Ok
ld hl,(D8374)
cp 3 ; ª®¤ ®è¨¡ª¨ "ä ©« ­¥ ®¡­ à㦥­"
jr nz,A83DD
push hl
;ld a,(D96AD) ;; ¤«¨­  áâப¨ (inline.asm)
ld a,(struct_input_line+4) ; ¤«¨­  áâப¨
ld b,a
A83AF: ld a,(hl)
cp " "+1
jr c,A83B7
inc hl
djnz A83AF
A83B7: ld e,b
ld d,0
add hl,de
push hl
ld e,4
add hl,de
pop de
ex de,hl
ld c,b
ld b,0
inc c
lddr
inc hl
ld (hl),"."
inc hl
ld (hl),"B"
inc hl
ld (hl),"A"
inc hl
ld (hl),"T"
pop hl
jp A83E8 ; ¢ë¯®«­¨âì bat-ä ©« (batch.asm)
; ‚믮«­¨âì exe-ä ©«
; hl=¨¬ï ä ©« 
A83D7: ld bc,0*256 + Dss.Exec ; § £à㧨âì ¯à®£à ¬¬ã, ¢ë¯®«­¨âì ä ©«
RST ToDSS
;R10
CALL Restore_Screen
;R10
ret nc
A83DD: cp DSS_Error.sys.INVALID_HANDLE ; ª®¤ ®è¨¡ª¨ "­¥â ¤¥áªà¨¯â®à "
jp nc,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
xor a ; ¨­¤¥ªá "Bad command or file name"
jp print_err_message