mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
464 lines
10 KiB
NASM
464 lines
10 KiB
NASM
; Ž¡à ¡®âª BAT-ä ©«®¢
|
||
;
|
||
|
||
;fhandle
|
||
BAT_FM: db 0 ; ¤¥áªà. bat-ä ©«
|
||
;count: db 0 ; ç¨á«® ¯à®ç¨â. ¡ ©â ¨§ ä ©«
|
||
|
||
; ä« £ echo-०¨¬
|
||
echo_mode:
|
||
db true ; 1/0 on/off
|
||
|
||
; ¡ãä¥à bat-ä ©«
|
||
;T98B9: ds 256
|
||
|
||
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‡ ¯ã᪠bat-ä ©«
|
||
; ¢å®¤: hl=¨¬ï ä ©«
|
||
;-------------------------------------------------
|
||
A83E8: call BATCH
|
||
jp c,A83DD ; ®è¨¡ª ®âªà. ä ©« (cpp.asm)
|
||
ret
|
||
|
||
|
||
|
||
; ¢å®¤: b=ç¨á«® á«®¢ "ZERO".."NINE"
|
||
MAKE_BATCH_PRM_ARRAY:
|
||
dec hl
|
||
.loop: inc hl
|
||
ld a,(hl)
|
||
or a
|
||
ret z
|
||
cp " "
|
||
jr z,.loop
|
||
cp 9 ; Tab
|
||
jr z,.loop
|
||
ex de,hl
|
||
ld (hl),e
|
||
inc hl
|
||
ld (hl),d
|
||
inc hl
|
||
ex de,hl
|
||
.B_FIND_SPACE:
|
||
inc hl
|
||
ld a,(hl)
|
||
cp " "+1
|
||
jr nc,.B_FIND_SPACE
|
||
ld (hl),0
|
||
or a
|
||
ret z
|
||
djnz .loop
|
||
ret
|
||
|
||
|
||
;-------------------------------------------------
|
||
; ‡ £à㧪 ¨ ¢ë¯®«¥¨¥ BAT-ä ©«
|
||
; ¢å®¤: hl=¨¬ï ä ©«
|
||
; ¢ë室: "CF" - ®è¨¡ª ®âªà. ä ©«
|
||
;-------------------------------------------------
|
||
BATCH: push hl ; á®åà. ¨¬ï bat-ä ©«
|
||
ld de,work_buffer ; 512 ¬¥áâë© ¡ãä¥à
|
||
call copy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
||
ld hl,work_buffer ; 512 ¬¥áâë© ¡ãä¥à
|
||
ld de,BAT_PRM_ARRAY ; â ¡«¨æ 㪠§ â. "ZERO".."NINE"
|
||
ld b,BAT_PRM_ARRAY.TOTAL ; ç¨á«® á«®¢ "ZERO".."NINE"
|
||
call MAKE_BATCH_PRM_ARRAY
|
||
jr nz,.B_ALL_P
|
||
ld hl,NULL ; ds 2*10
|
||
ex de,hl
|
||
.B_CLR_P:
|
||
ld (hl),e
|
||
inc hl
|
||
ld (hl),d
|
||
inc hl
|
||
djnz .B_CLR_P
|
||
ex de,hl
|
||
.B_ALL_P:
|
||
pop hl ; ¢®ááâ. ¨¬ï bat-ä ©«
|
||
ld a,Dss.Open.R ; ç⥨¥
|
||
ld c,Dss.Open ; ®âªàëâì ä ©«
|
||
RST ToDSS
|
||
push af ; á®åà. ª®¤ ®è¨¡ª¨
|
||
call c,restore_disk_path ; ¢®ááâ. ⥪. ¤¨áª ¨ ¯ãâì
|
||
;R10
|
||
CALL Restore_Screen
|
||
;R10
|
||
pop af
|
||
ret c
|
||
ld (BAT_FM),a ; ¤¥áªà. bat-ä ©«
|
||
; ¢ë¯®«. ª®¬ ¤ bat-ä ©«
|
||
call NEWLINE
|
||
xor a
|
||
ret
|
||
|
||
|
||
;---------------------------------------------------
|
||
; ‚믮«¥¨¥ ª®¬ ¤ BAT-ä ©«
|
||
;---------------------------------------------------
|
||
NEWLINE:
|
||
ld de,struct_input_line+5 ;!HARDCODE
|
||
.ADDBAT: push de
|
||
call READBAT ; ¯à®ç¨â âì 128 ¡ ©â ¨§ ä ©« ¢ "work_buffer1"
|
||
pop de
|
||
or a ; a=ç¨á«® ¯à®ç¨â. ¡ ©â
|
||
jr nz,.BATLINE
|
||
ex de,hl
|
||
;ld de,T96AE ;;256 ¡ãä¥à (inline.asm)
|
||
ld de,struct_input_line+5
|
||
sbc hl,de
|
||
jr z,.exit; ;[x] Vasil, ã¡à ¡ £ á ¥§ ªàëâë¬ BAT-ä ©«®¬
|
||
ld a,l
|
||
ld (struct_input_line+4),a ; ¤«¨ áâப¨
|
||
call CMDMODE ; â¥áâ bat-ª®¬ ¤ë "rem","pause"
|
||
.exit: ld a,(BAT_FM) ; ¤¥áªà. bat-ä ©«
|
||
ld c,Dss.Close ; § ªàëâì ä ©«
|
||
RST ToDSS
|
||
ret
|
||
;
|
||
.BATLINE:
|
||
;ld hl,T99B9 ; ®âªã¤ , 128 ¡ãä¥à (ccp.asm) "work_buffer1"
|
||
ld hl,work_buffer1
|
||
.loop: call MOVWORD ; ᪮¯¨à. work_buffer1 -> struct_input_line+5
|
||
jr c,.ADDBAT
|
||
ld a,b
|
||
ld (MOVWORD.count),a ; ®áâ «®áì ¯à®¯ àá¨âì ¯à®ç¨â ëå ¡ ©â®¢
|
||
push hl
|
||
ex de,hl
|
||
;ld de,T96AE ;;256 ¡ãä¥à (inline.asm)
|
||
ld de,struct_input_line+5
|
||
;ld de,work_buffer+256;;
|
||
sbc hl,de
|
||
ld a,l
|
||
;ld (D96AD),a ;; ¤«¨ áâப¨ (inline.asm)
|
||
ld (struct_input_line+4),a ; ¤«¨ áâப¨
|
||
call CMDMODE ; â¥áâ bat-ª®¬ ¤ë "rem","pause"
|
||
;ld de,T96AE ;;256 ¡ãä¥à (inline.asm)
|
||
ld de,struct_input_line+5
|
||
;ld de,work_buffer+256;;
|
||
pop hl
|
||
jr .loop
|
||
|
||
|
||
;-------------------------------------------------
|
||
; —⥨¥ ¤ ëå (hl) -> (de), ¯à¨ ¥®¡å®¤¨¬®áâ¨
|
||
; ¯®¤ª çª ¨§ ä ©« .
|
||
;
|
||
; ¢å®¤: hl=®âªã¤
|
||
; de=ªã¤
|
||
;-------------------------------------------------
|
||
MOVWORD:
|
||
.count+1: ld a,0 ; (ç¨á«® ¯à®ç¨â. ¡ ©â ¨§ ä ©« )/128
|
||
ld b,a
|
||
.loop: ld a,(hl)
|
||
ld (de),a
|
||
cp " "
|
||
jr c,.loop2
|
||
inc hl
|
||
inc de
|
||
djnz .loop
|
||
scf
|
||
ret
|
||
; ¯à®ç¨â âì ¤®¯. ¡«®ª ¨§ ä ©«
|
||
.loop2: ld a,(hl)
|
||
cp " "
|
||
ret nc
|
||
inc hl
|
||
djnz .loop2
|
||
push de
|
||
call READBAT ; ¯à®ç¨â âì 128 ¡ ©â ¨§ ä ©«
|
||
pop de
|
||
;ld hl,BATBUFF ; 128 ¡ãä¥à (ccp.asm) "work_buffer1"
|
||
ld hl,work_buffer1
|
||
ld b,a ; ç¨á«® ¯à®ç¨â. ¡ ©â
|
||
or a
|
||
jr nz,.loop2
|
||
scf
|
||
ret
|
||
|
||
; ¯à®ç¨â âì 128 ¡ ©â ¨§ ä ©«
|
||
READBAT:
|
||
;ld hl,T99B9 ; 128 ¡ãä¥à ¯®¤ ¤ ë¥ (ccp.asm) "work_buffer1"
|
||
ld hl,work_buffer1
|
||
ld de,128 ; ᪮«ìª®
|
||
ld a,(BAT_FM) ; ¤¥áªà. bat-ä ©«
|
||
ld c,Dss.Read ; ç⥨¥ ä ©«
|
||
RST ToDSS
|
||
ld a,e
|
||
ld (MOVWORD.count),a ; (ç¨á«® ¯à®ç¨â. ¡ ©â ¨§ ä ©« )/128
|
||
ret
|
||
|
||
|
||
; ’¥áâ bat-ª®¬ ¤ë "rem","pause"
|
||
CMDMODE:
|
||
;xor a
|
||
;ld (D96A6),a ; (inline.asm)
|
||
call EVALCMD ; (batch.asm)
|
||
;ld ix,T96AC ; 㦮?? § ª®¬¥â ਫ (inline.asm)
|
||
;ld hl,T96AE ;;256 ¡ãä¥à (inline.asm)
|
||
ld hl,struct_input_line+5
|
||
;ld hl,work_buffer+256;;
|
||
ld a,(hl)
|
||
cp "@" ; 40h
|
||
jr nz,A8240
|
||
dec hl
|
||
;ld hl,struct_input_line+4;;
|
||
dec (hl)
|
||
jr z,A825B
|
||
ld c,(hl) ; ¤«¨ áâப¨
|
||
inc hl
|
||
ld b,0
|
||
;ld hl,work_buffer+256;;
|
||
ld d,h
|
||
ld e,l
|
||
inc hl
|
||
ldir
|
||
jr A825B
|
||
;
|
||
A8240: ld a,(echo_mode) ; ä« £ echo-०¨¬
|
||
or a
|
||
jr z,A825B ; off
|
||
; ¢ë¢¥á⨠á¨áâ. ¯ãâì ¨ áâபã ᮤ¥à¦¨¬®£® bat-ä ©«
|
||
;ld de,T96AE ;;256 ¡ãä¥à (inline.asm)
|
||
;ld de,struct_input_line+5
|
||
;call A95DE ; ¢ë¢®¤ íªà . ¯ã⨠á ">" (inline.asm)
|
||
; ¢ë¢¥á⨠íªà . ¯ãâì ¨ ¢¢¥¤. ª®¬ ¤ã
|
||
ld c,BIOS.LP_GET_PLACE ; ã§ âì ¯®«®¦. ªãàá®à
|
||
RST ToBIOS
|
||
ld (YXpos),de ; Y/X ç «® ª®¬-áâப¨
|
||
ld (cursor_position),de ; Y/X ¯®§¨æ¨ï ªãàá®à
|
||
call print_compath ; ¢ë¢¥á⨠¯ãâì + ®¢ ï è¨à¨ ¯®«ï ¢¢®¤
|
||
ld de,(YXpos) ; Y/X ç «® ª®¬-áâப¨
|
||
ld c,Dss.Locate ; ãáâ. ¯®«®¦. ªãàá®à
|
||
RST ToDSS
|
||
;ld hl,work_buffer+256;;
|
||
ld hl,struct_input_line+4 ; ¤«¨ áâப¨
|
||
ld a,(hl)
|
||
ld b,a
|
||
inc hl ;+5
|
||
push bc
|
||
ld c,BIOS.LP_PRINT_LINE2 ; ¢ë¢®¤ áâப¨ ¡¥§ âਡã⮢
|
||
RST ToBIOS
|
||
pop bc ; b=¤«¨ áâப¨
|
||
ld a,(width_inpline) ; è¨à¨ ¯®«ï ¢¢®¤ (76..48)
|
||
sub b
|
||
ei
|
||
ret z ; ¯à ¢ë© ªà © íªà
|
||
jr c,A8250; ; áâப ¡®«ìè¥ è¨à¨ë íªà
|
||
; § ¯®«¨âì áâப㠤® ª®æ íªà
|
||
dec a ; çâ®¡ë ¥ áà ¡®â « áªà®««¨£ íªà ;!FIXIT scroll
|
||
ld b,a ; ç¨á«® ¢ë¢®¤. ᨬ¢®«®¢
|
||
ld a," " ; ᨬ¢®«
|
||
ld c,BIOS.LP_PRINT_SYM ; ¢ë¢®¤ ᨬ¢®« ¡¥§ âਡãâ
|
||
RST ToBIOS
|
||
ei
|
||
;!TEST
|
||
A8250: call newline
|
||
;
|
||
;
|
||
;ld a,(D96AD) ;; ¤«¨ áâப¨ (inline.asm)
|
||
;ld a,(struct_input_line+4);-
|
||
;or a
|
||
;ret z
|
||
;call newline
|
||
;jr A8264
|
||
;
|
||
A825B: ;ld a,(D96AD) ;; ¤«¨ áâப¨ (inline.asm)
|
||
ld a,(struct_input_line+4)
|
||
or a
|
||
ret z
|
||
;A8264: ld hl,T96AE ;;256 ¡ãä¥à (inline.asm)
|
||
;ld hl,struct_input_line+5
|
||
;dec hl
|
||
; ã¡à âì ª®æ¥¢ë¥ ¯à®¡¥«ë áâப¨
|
||
ld hl,struct_input_line+4
|
||
ld c,(hl) ; hl=¤«¨ áâப¨ (inline.asm)
|
||
ld b,0
|
||
inc hl
|
||
;ld hl,work_buffer+256;;
|
||
A826C: ld a,(hl)
|
||
cp " "
|
||
jr nz,A8276
|
||
inc hl
|
||
dec c
|
||
jr nz,A826C
|
||
ret
|
||
;
|
||
A8276: ld d,h
|
||
ld e,l
|
||
add hl,bc
|
||
ld (hl),b ; 0 ¢ ª®¥æ áâப¨ (¯¥à¢®£® ª®æ. ¯à®¡¥« )
|
||
sbc hl,bc
|
||
ld a,c
|
||
ex af,af'
|
||
ld a," "
|
||
cpir
|
||
jr nz,A8286
|
||
inc c
|
||
A8286: ex af,af'
|
||
sub c
|
||
ld c,a ; ¤«¨ á«®¢ ¨«¨ áâப¨ ?
|
||
ld hl,BATLIST ; ª®¬ ¤ë "pause","rem" + dos-ª®¬ ¤ë
|
||
; de=struct_input_line+5, c=¤«¨ áâப¨ (¡¥§ ª®æ. ¯à®¡¥«®¢)
|
||
; ¢ë¯®«. ª®¬ ¤ã ¨«¨ § ¯ãáâ¨âì ä ©«
|
||
jp A8312
|
||
|
||
|
||
|
||
|
||
|
||
|
||
; ¤®«¦ ã¡à âì ª®æ. ¯à®¡¥«ë ¨ ãáâ. ¤«¨ã áâப¨, ¥á«¨ ã१ « áì
|
||
EVALCMD: xor a
|
||
ld hl,struct_input_line+4 ;!HARDCODE
|
||
ld c,(hl)
|
||
ld b,a
|
||
inc hl
|
||
add hl,bc
|
||
ld (hl),a ; 0 ¢ ª®¥æ áâப¨
|
||
sbc hl,bc
|
||
ld de,work_buffer2 ; 256 ¡ãä¥à
|
||
call EVALSTR
|
||
ld hl,work_buffer2 ;work_buffer+256
|
||
ld de,struct_input_line+5 ; ªã¤
|
||
ld bc,255
|
||
.loop: ld a,(hl)
|
||
ldi
|
||
inc b
|
||
or a
|
||
jr nz,.loop
|
||
dec b
|
||
ld a,b
|
||
ld (struct_input_line+4),a ; ¤«¨ áâப¨ (edline.asm)
|
||
and a
|
||
ret
|
||
|
||
; HL - STRING WITH %VAR%
|
||
EVALSTR: ld a,(hl)
|
||
cp "%"
|
||
jr z,.TVARIABLE
|
||
.VARL1: ldi
|
||
or a
|
||
jr nz,EVALSTR
|
||
ld bc,0
|
||
ld (.TVAR_PNT),bc
|
||
ret
|
||
;
|
||
.TVARIABLE:
|
||
.TVAR_PNT+1: ld bc,0
|
||
ld a,b
|
||
or c
|
||
ld a,"%"
|
||
ld (.TVAR_PNT),de
|
||
jr nz,.TVAR1
|
||
inc hl
|
||
ld a,(hl)
|
||
cp "9"+1
|
||
jr c,.TVAR0
|
||
.TVAR2: ld a,"%" ; > "9"
|
||
dec hl
|
||
jp .VARL1
|
||
.TVAR0: cp "0"
|
||
jr c,.TVAR2 ; < "0"
|
||
; BATCH PARAM %0, %1, %2 ...
|
||
inc hl
|
||
push hl
|
||
ld (.TVAR_PNT),bc
|
||
sub "0"
|
||
add a,a
|
||
ld c,a
|
||
ld hl,BAT_PRM_ARRAY ; â ¡«¨æ 㪠§ â. "ZERO".."NINE"
|
||
add hl,bc
|
||
ld a,(hl)
|
||
inc hl
|
||
ld h,(hl)
|
||
ld l,a
|
||
or h
|
||
jr z,.NOBTP ; NO BATCH PARM
|
||
call copy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
||
dec de
|
||
.NOBTP: pop hl
|
||
jp EVALSTR
|
||
;
|
||
.TVAR1: push hl
|
||
ld h,d
|
||
ld l,e
|
||
dec hl
|
||
and a
|
||
sbc hl,bc
|
||
jr z,.TNOVAR
|
||
ld a,"="
|
||
ld (de),a
|
||
inc de
|
||
xor a
|
||
ld (de),a
|
||
ld d,b ; de=¡ãä¥à § ç¥¨ï ¯¥à¥¬.
|
||
ld e,c
|
||
ld h,b ; hl=¨¬ï ¯¥à¥¬.
|
||
ld l,c
|
||
inc hl
|
||
ld bc,Dss.Environ.Get*256 + Dss.Environ ; ¯®«ãç¨âì ¯¥à¥¬. ®ªà㦥¨ï
|
||
RST ToDSS
|
||
.TNOVAR: pop hl
|
||
inc hl
|
||
ld bc,0
|
||
ld (.TVAR_PNT),bc
|
||
jp EVALSTR
|
||
|
||
|
||
|
||
; !! <09>¥ ¤¥« âì ®¤ã ª®¬ ¤ã > 256 ᨬ¢®«®¢)) !!
|
||
;
|
||
; BAT-ª®¬ ¤ë (¥ ®â¤¥«ïâì ®â ¤®á-ª®¬ ¤)
|
||
BATLIST: DZ 'PAUSE' : DW cmd_pause ;CPAUSE
|
||
DZ 'REM' : DW cmd_rem ;CREM
|
||
;
|
||
; DSS-ª®¬ ¤ë
|
||
CMDLIST: DZ 'CD' : DW cmd_chdir ;CCHDIR
|
||
DZ 'DIR' : DW cmd_dir ;DIR
|
||
DZ 'ECHO' : DW cmd_echo ;CECHO
|
||
DZ 'ECHO.' : DW cmd_echoLN
|
||
DZ 'PATH' : DW cmd_path ;CPATH
|
||
DZ 'MD' : DW cmd_mkdir ;CMKDIR
|
||
DZ 'REN' : DW cmd_rename ;CRENAM
|
||
DZ 'DEL' : DW cmd_del ;CDELET
|
||
DZ 'RD' : DW cmd_rmdir ;CRMDIR
|
||
DZ 'SET' : DW cmd_set ;CSET
|
||
DZ 'TIME' : DW cmd_time ;CTIME
|
||
DZ 'DATE' : DW cmd_date ;CDATE
|
||
DZ 'VER' : DW cmd_version ;VERS
|
||
DZ 'CLS' : DW cmd_cls ;CLS
|
||
DZ 'CHDIR' : DW cmd_chdir ;CCHDIR
|
||
DZ 'MKDIR' : DW cmd_mkdir ;CMKDIR
|
||
DZ 'RENAME' : DW cmd_rename ;CRENAM
|
||
DZ 'ERASE' : DW cmd_del ;CDELET
|
||
DZ 'RMDIR' : DW cmd_rmdir ;CRMDIR
|
||
DZ 'HELP' : DW cmd_help ;HELP
|
||
DZ 'VERSION' : DW cmd_version ;VERS
|
||
DZ 'EXIT' : DW cmd_exit ;CEXIT
|
||
DZ 'REBOOT' : DW cmd_reboot ;REBOOT
|
||
DB #00
|
||
|
||
|
||
IZERO DB "ZERO",0
|
||
IONE DB "ONE",0
|
||
ITWO DB "TWO",0
|
||
ITHREE DB "THREE",0
|
||
IFOUR DB "FOUR",0
|
||
IFIVE DB "FIVE",0
|
||
ISIX DB "SIX",0
|
||
ISEVEN DB "SEVEN",0
|
||
IEIGHT DB "EIGHT",0
|
||
ININE DB "NINE",0
|
||
|
||
BAT_PRM_ARRAY:
|
||
DW IZERO, IONE, ITWO, ITHREE, IFOUR, IFIVE, ISIX, ISEVEN, IEIGHT, ININE
|
||
DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; 10 ç¨á«® á«®¢ "ZERO".."NINE"
|
||
.TOTAL EQU ($-BAT_PRM_ARRAY)/4
|
||
DISPLAY "First compilation test: 10 = ",/D, BAT_PRM_ARRAY.TOTAL
|
||
ASSERT BAT_PRM_ARRAY.TOTAL = 10, "BAT_PRM_ARRAY.TOTAL"
|
||
NULL: DB 0
|
||
;TVAR_PNT: DW 0
|