Estex-DSS/SHELL/EXEC.ASM
2023-12-13 04:32:38 +10:00

204 lines
4.0 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 c,(hl) ; ¤«¨­  áâப¨
ld b,0
inc hl ; struct_input_line+5
.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 ; ᯨ᮪ ª®¬ ­¤ „Ž‘- 
.start: call RUN_COMMAND
jr nc,.skip ; NC ¥á«¨ ­¥ ­ ©¤¥­  ª®¬ ­¤ 
jp (hl)
.skip: ; <20>¥ ¤®á-ª®¬ ­¤ë. ’¥áâ ­  § ¤` ­¨¥ ¤¨áª  ¨ § ¯ã᪠䠩« 
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 #5F ; a..z -> A..Z
NOUP: sub "A" ; ­®¬¥à ¤¨áª 
ld c,Dss.ChDisk ; ᬥ­¨âì ⥪. ¤¨áª
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
;!FIXIT âãâ ¢®ááâ ­ ¢«¨¢ ¥âáï ¤¨à¥ªâ®à¨ï ¨ ¬®£ãâ ¡ëâì £«îª¨ ­  ­®¢®¬ ï¤à¥
;!TODO ¤®áâ ¢ âì system_path ®â¤¥«ì­® ¤«ï ª ¦¤®£® ¤¨áª  (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
; â¥áâ ­  áãé¥á⢮¢ ­¨¥ ¯ ¯ª¨ ­  楫¥¢®¬ ¤¨áª¥
IFDEF MANY_SYS_PATHES
ld hl,system_path ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS
jp nc,Get_Path ; Ok
ENDIF
;
; ãáâ. ª®à¥­ì, ­¥â â ª®© ¯ ¯ª¨ ­  ­®¢®¬ ¤¨áª¥
ld hl,system_path+1 ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld (hl),0
dec hl
ld (hl),'\'
;!TODO ¤®áâ ¢ âì system_path ®â¤¥«ì­® ¤«ï ª ¦¤®£® ¤¨áª  (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
IFDEF MANY_SYS_PATHES
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ENDIF
;
jp Get_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 ; ¤«¨­  áà ¢­¥­¨ï ;!HARDCODE
call A874E ; áà ¢­¨âì áâப¨
ld hl,(D8374)
jp z,RUN_BAT ; ¢ë¯®«­¨âì bat-ä ©« (batch.asm)
jr A83D7 ; ¢ë¯®«­¨âì exe-ä ©«
A839D: ld bc,0*256 + Dss.Exec ; § £à. ¨ ¢ë¯®«­¨âì ¯à®£à ¬¬ã
RST ToDSS
;[x] 01/11/23 ;!TEST
PUSH AF
CALL RESTORE_ALL
POP AF
;
;[x] 25/10/23
JP NC,Ret_New_Line ; Ok
;
ld hl,(D8374)
cp DSS_Error.sys.FILE_NOT_FOUND
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 RUN_BAT ; ¢ë¯®«­¨âì bat-ä ©« (batch.asm)
; ‚믮«­¨âì exe-ä ©«
; hl=¨¬ï ä ©« 
A83D7: ld bc,0*256 + Dss.Exec ; § £à㧨âì ¯à®£à ¬¬ã, ¢ë¯®«­¨âì ä ©«
RST ToDSS
;[x] 01/11/23 ;!TEST
PUSH AF
CALL RESTORE_ALL
POP AF
;
;[x] 25/10/23
JP NC,Ret_New_Line ; Ok
;
A83DD: cp DSS_Error.sys.INVALID_HANDLE ; ª®¤ ®è¨¡ª¨ "­¥â ¤¥áªà¨¯â®à "
jp nc,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
xor a ; ¨­¤¥ªá "Bad command or file name"
jp print_err_message
Ret_New_Line:
LD C,Dss.Cursor
RST ToDSS
XOR A
OR E
RET Z
jp newline
RESTORE_ALL:
;[x] 01/11/23 ;!TEST
CALL Get_Path
;
LD A,(screen_path)
SUB 'A'
LD C,Dss.ChDisk
RST ToDSS
;
LD HL,system_path
LD C,Dss.ChDir
RST ToDSS
;
;R10
CALL Restore_Screen
;R10
;
RET
;