mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
206 lines
4.1 KiB
NASM
206 lines
4.1 KiB
NASM
; à ¡. ï祩ª
|
||
SAVEHL: dw 0
|
||
|
||
|
||
|
||
;-------------------------------------------------------------
|
||
; <20> §¡®à ¨ ¢ë¯®«¥¨¥ ¢¢¥¤¥ëå ª®¬ ¤ ¨ ¨¬¥ ä ©«®¢
|
||
;-------------------------------------------------------------
|
||
COMP: call EVALCMD ; (batch.asm)
|
||
ld hl,Buffers.input_line.Path
|
||
dec hl
|
||
ld c,(hl) ; ¤«¨ áâப¨
|
||
ld b,0
|
||
inc hl ; Buffers.input_line.Path
|
||
.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=Buffers.input_line.Path
|
||
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 ¤®áâ ¢ âì Buffers.sys_path ®â¤¥«ì® ¤«ï ª ¦¤®£® ¤¨áª (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
|
||
; â¥áâ áãé¥á⢮¢ ¨¥ ¯ ¯ª¨ 楫¥¢®¬ ¤¨áª¥
|
||
IFDEF MANY_SYS_PATHES
|
||
ld hl,Buffers.sys_path ; ¡ãä¥à á¨áâ. ¯ãâ¨
|
||
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
|
||
RST ToDSS
|
||
jp nc,Get_Path ; Ok
|
||
ENDIF
|
||
;
|
||
|
||
; ãáâ. ª®à¥ì, ¥â â ª®© ¯ ¯ª¨ ®¢®¬ ¤¨áª¥
|
||
ld hl,Buffers.sys_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 (SAVEHL),hl ; Buffers.input_line.Path
|
||
ld de,EXTBF ; ¡ãä¥à
|
||
ld bc,4*256 + Dss.EX_Path ; ¢ë¤¥«¨âì à áè. ä ©«
|
||
RST ToDSS
|
||
ld hl,(SAVEHL) ; ¨¬ï ä ©«
|
||
jr c,RUN_EXE ; ¢ë¯®«¨âì exe-ä ©«
|
||
bit 1,a ; ¥áâì à áè. ?
|
||
jr z,.NON_EXT ; ¥â
|
||
; ¥áâì à áè. ä ©«
|
||
ld de,EXTBF ; ¡ãä¥à à áè. ä ©«
|
||
ld hl,BATBF ; "BAT"
|
||
ld b,3 ; ¤«¨ áà ¢¥¨ï ;!HARDCODE
|
||
call COMPARE ; áà ¢¨âì áâப¨
|
||
ld hl,(SAVEHL)
|
||
jp z,RUN_BAT ; ¢ë¯®«¨âì bat-ä ©« (batch.asm)
|
||
jr RUN_EXE ; ¢ë¯®«¨âì exe-ä ©«
|
||
.NON_EXT:
|
||
ld bc,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,(SAVEHL)
|
||
cp DSS_Error.sys.FILE_NOT_FOUND
|
||
jr nz,EXEERR
|
||
push hl
|
||
;ld a,(D96AD) ; ¤«¨ áâப¨ (inline.asm)
|
||
ld a,(Buffers.input_line.Symbols_Num) ; ¤«¨ áâப¨
|
||
ld b,a
|
||
.loop: ld a,(hl)
|
||
cp " "+1
|
||
jr c,.next
|
||
inc hl
|
||
djnz .loop
|
||
.next: 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=¨¬ï ä ©«
|
||
RUN_EXE:
|
||
ld bc,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
|
||
;
|
||
EXEERR: 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
|
||
CALL .path
|
||
;R10
|
||
CALL Restore_Screen
|
||
;R10
|
||
RET
|
||
;
|
||
.path: ;[x] 01/11/23 ;!TEST
|
||
LD A,(Buffers.screen_path)
|
||
SUB 'A'
|
||
LD C,Dss.ChDisk
|
||
RST ToDSS
|
||
;
|
||
LD HL,Buffers.sys_path
|
||
LD C,Dss.ChDir
|
||
RST ToDSS
|
||
RET
|
||
;
|
||
; |