Estex-DSS/SHELL/SHELL_EXEC.ASM
2023-08-11 04:54:30 +10:00

194 lines
3.8 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> §¡®à ¨ ¢ë¯®«­¥­¨¥ ¢¢¥¤¥­­ëå ª®¬ ­¤ ¨ ¨¬¥­ ä ©«®¢
;-------------------------------------------------------------
A82E7: 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;;
A82F2: ld a,(hl)
cp " "
jr nz,A82FC
inc hl
dec c
jr nz,A82F2
ret
;
A82FC: 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,A830C
inc c
A830C: ex af,af'
sub c
ld c,a
ld hl,CMDLIST ; ᯨ᮪ ª®¬ ­¤ „Ž‘- 
; de=struct_input_line+5, c=¤«¨­  áâப¨
; ®â bat-®âà ¡®âª¨
A8312: push bc
push de
A8314: ld a,(de)
cp "a"
jr c,A8321
cp "z"+1
jr nc,A8321
and 5Fh ; a..z -> A..Z
A8321: cp (hl)
jr nz,COMP002 ; ­¥ ¤®á-ª®¬ ­¤ë
inc hl
inc de
dec c
jr nz,A8314
xor a
cp (hl)
jr nz,COMP002
pop bc
pop bc
ld a,(de)
cp " "
jr nz,A8338
inc de
A8338: 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,A8312 ; ­ § ¤ ¢ 横«, ¥é¥ ­¥ ¤®è«¨ ª®­æ  ᯨ᪠ ¤®á-ª®¬ ­¤
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,A8376 ; ­¥â, ¨¬¥¥¬ ¡®«ìè¥ 2-å ᨬ¢®«®¢
ld a,":" ; ¯®áâä¨ªá ¡ãª¢ë ¤¨áª 
cp c ; 2-© ᨬ¢®«
jr nz,A8376 ; § ¤ ­ ­¥ ¤¨áª
ld a,b ; 1-© ᨬ¢®«
cp "a"
jr c,A8369
cp "z"+1
jr nc,A8369
and 5Fh ; a..z -> A..Z
A8369: 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
; § ¤ ­ ­¥ ¤¨áª
A8376: 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