Estex-DSS/Console/CONSOLE.ASM
2023-07-03 02:11:18 +10:00

2269 lines
31 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.

;[BEGIN]
;
; SYSTEM.EXE /S /P
;
; /P Primary command processor
; /S Secondary command processor
; /C Execute batch file
;--------------------------------------------------------------
;Rev. Date Name Description
;--------------------------------------------------------------
;R10 16-05-2023 BAO TE•T MODE AND TEXT ARE RESTORED AFTER RETURNING FROM THE APP
;R09 ??-??-???? DNS ;????? ????
;R08 21-02-2003 DNS FIX BUG IN BAT-PARSER, IT SPLIT STRINGS
; WHEN LINE BEGAN AT #xx00 OFFSET
;R07 14-12-2002 DNS PARSING BATCH LINE
;R06 12-12-2002 DNS ADD %0, %1, %2 ...
;R05 11-12-2002 DNS IMPLEMENTED %VAR%
;R04 11-12-2002 DNS ADD 'EVALSTRING' ROUTINE
;R03 11-12-2002 DNS NEW VERSION
;R02 19-11-2002 DNS CORRECT SOME ERROR MESSAGES
;R01 19-11-2002 DNS ADD ENVIRONMENT %VARIABLE% IN ECHO
;
OUTPUT './Build/system.exe'
ORG #8100-512
include 'shared_includes/constants/bios_equ.inc'
include 'shared_includes/constants/dss_equ.inc'
CR EQU 13
LF EQU 10
DB "EXE" ;EXE ID
DB #00 ;EXE VERSION
DW #0200 ;CODE OFFSET LOW
DW #0000 ;CODE OFFSET HIGH
DW #0000 ;END-BEG ;PRIMARY LOADER
DW #0000 ;
DW #0000 ;RESERVED
DW #0000 ;
DW #8100 ;LOAD ADDRESS
DW #8100 ;START ADDRESS
DW #BFFF ;STACK ADDRESS
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0
; DEFS 490,0
; LD SP,#BFFF
START CALL INIT
CALL GET_CMD
EI
LD A,(RUNMODE)
AND #80 ;TEST PRIMARY
JP NZ,FPRIMAR
LD A,(RUNMODE)
AND #20 ;TEST SECONDARY
JP NZ,FSECOND
LD A,(RUNMODE)
AND #10 ;TEST BATCH FILE
JP NZ,FBATCHS
LD A,(RUNMODE)
AND #40 ;TEST PROCESS
JP NZ,FBATCH
JP QUIT
FSECOND CALL VERS
JP CONSOLE
FBATCHS
LD HL,CMDLINE
CALL BATCH
JP QUIT
FBATCH
CALL CMDMODE
JP QUIT
FPRIMAR LD C,Dss.CTRLKey
RST #10
LD A,B
AND #C0
JP NZ,CONSOLE
LD HL,BATNAME
CALL BATCH
JP CONSOLE
;R07
MAKE_BATCH_PRM_ARRAY
DEC HL
B_SKIP_SPACE
INC HL
LD A,(HL)
OR A
RET Z
CP " "
JR Z,B_SKIP_SPACE
CP 9
JR Z,B_SKIP_SPACE
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 "!"
JR NC,B_FIND_SPACE
LD (HL),0
OR A
RET Z
DJNZ B_SKIP_SPACE
RET
BATCH: PUSH HL
LD DE,PRMLINE
BCHL1 LD A,(HL)
LDI
OR A
JR NZ,BCHL1
LD HL,PRMLINE
LD DE,BAT_PRM_ARRAY
LD B,10
CALL MAKE_BATCH_PRM_ARRAY
JR NZ,B_ALL_P
LD HL,NULL
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
;R07
XOR A
LD C,Dss.Open
RST #10
;R10
CALL Restore_Screen
;R10
RET C
LD (BAT_FM),A
CALL NEWLINE
XOR A
RET
Restore_Screen:
PUSH AF
LD C,Dss.GetVMod
RST ToDSS
AND #80
JR Z,.exit
LD BC,1 * 256 + Dss.SetVMod
LD A,Dss.SetVMod.txt80x32
RST ToDSS
.exit: POP AF
RET
NEWLINE LD DE,CMDLINE
ADDBAT PUSH DE
CALL READBAT
POP DE
OR A
JR NZ,BATLINE
EX DE,HL
LD DE,CMDLINE
AND A
SBC HL,DE
RET Z
LD A,L
LD (CMDLINE-1),A
CALL CMDMODE
LD C,Dss.Close
LD A,(BAT_FM)
RST #10
RET
BATLINE LD HL,BATBUFF
NBLINE CALL MOVWORD
JP C,ADDBAT
LD A,B
LD (BAT_LEN),A
PUSH HL
EX DE,HL
LD DE,CMDLINE
AND A
SBC HL,DE
LD A,L
LD (CMDLINE-1),A
CALL CMDMODE
LD DE,CMDLINE
POP HL
JP NBLINE
MOVWORD LD A,(BAT_LEN)
LD B,A
M00WORD LD A,(HL)
LD (DE),A
CP #20
JR C,M01WORD
INC HL
INC DE
DJNZ M00WORD
SCF
RET
M01WORD LD A,(HL)
CP #20
RET NC
INC HL
DJNZ M01WORD
;R08
PUSH DE
CALL READBAT
POP DE
LD HL,BATBUFF
LD A,(BAT_LEN)
LD B,A
OR A
JR NZ,M01WORD
SCF
;R08
RET
READBAT LD HL,BATBUFF
LD DE,128
LD C,Dss.Read
LD A,(BAT_FM)
RST #10
LD A,E
LD (BAT_LEN),A
RET
CMDMODE XOR A
LD (POSIT),A
CALL EVALCMD ;R05
LD IX,CMDLINE-2
LD HL,CMDLINE
LD A,(HL)
CP "@"
JR NZ,NOALPHA
DEC HL
DEC (HL)
JR Z,NOEC
LD C,(HL)
INC HL
LD B,0
LD D,H
LD E,L
INC HL
LDIR
JR NOEC
NOALPHA LD A,(ECHOFLG)
OR A
JR NZ,NOEC
LD DE,CMDLINE
CALL PRINT_S
CALL CRLF
LD A,(CMDLINE-1)
OR A
RET Z
CALL CRLF
CALL COMPBAT
RET
NOEC LD A,(CMDLINE-1)
OR A
RET Z
CALL COMPBAT
RET
COMPBAT LD HL,CMDLINE
DEC HL
LD C,(HL)
LD B,0
INC HL
COMP00B LD A,(HL)
CP " "
JR NZ,COMP01B
INC HL
DEC C
JR NZ,COMP00B
RET
COMP01B LD D,H
LD E,L
ADD HL,BC
LD (HL),0
SBC HL,BC
LD A,C
EX AF,AF'
LD A,#20
CPIR
JR NZ,COMPB05
INC C
COMPB05 EX AF,AF'
SUB C
LD C,A
LD HL,BATLIST
JP COMP004
INIT LD A,(IX-1)
LD (TASKX),A
PUSH IX
CALL CRLF
CALL GETPATH
POP IX
RET
CONSOLE:
CALL CRLF
RE_: CALL GETXY
CALL GETPATH
; CALL VERS
LD HL,CMDLINE
LD DE,CMDLINE+1
LD (HL),0
LD BC,#7F
LDIR
CALL INPUT
CALL CRLF
LD A,(CMDLINE-1)
OR A
JP Z,RE_
CALL CRLF
CALL COMP
JP RE_
GETXY LD C,Dss.Cursor
RST #10
JP LOCAT
INPUT XOR A
LD (POSIT),A
LD (SHIFT),A
LD (LEN_NEW),A
LD IX,CMDLINE-2
CALL CEDIT
CALL RES_CUR
RET
COMP: CALL EVALCMD ;R05
LD HL,CMDLINE
DEC HL
LD C,(HL)
LD B,0
INC HL
COMP00 LD A,(HL)
CP " "
JR NZ,COMP01
INC HL
DEC C
JR NZ,COMP00
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,#20
CPIR
JR NZ,COMP005
INC C
COMP005 EX AF,AF'
SUB C
LD C,A
LD HL,CMDLIST
COMP004 PUSH BC
PUSH DE
COMP000 LD A,(DE)
CP 'a'
JP C,COMP001
CP '{'
JP NC,COMP001
SUB #20
COMP001 CP (HL)
JP NZ,COMP002
INC HL
INC DE
DEC C
JP NZ,COMP000
XOR A
CP (HL)
JP 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)
COMP002 XOR A
LD C,#FF
.loop: CPI ;!FIXIT CPIR
JP NZ,.loop
INC HL
INC HL
POP DE
POP BC
LD A,(HL)
OR A
JP NZ,COMP004
LD H,D ;CMDLINE
LD L,E
LD B,(HL)
INC HL
LD C,(HL)
INC HL
LD A,(HL)
OR A
JR NZ,RUN_EXT
LD A,":"
CP C
JR NZ,RUN_EXT
LD A,B
CP "a"
JR C,NOUP
CP "{"
JR NC,NOUP
AND #5F
NOUP SUB "A"
LD C,Dss.ChDisk
RST #10
JP C,ERROR
JP GETPATH
SAVEHL DW 0
RUN_EXT EX DE,HL
LD (SAVEHL),HL
LD BC,Dss.EX_Path.GET_TYPE*256 + Dss.EX_Path
LD DE,EXTBF
RST #10
LD HL,(SAVEHL)
JR C,RUN_EXE
BIT 1,A
JR Z,NON_EXT
LD DE,EXTBF
LD HL,BATBF
LD B,3
CALL COMPARE
LD HL,(SAVEHL)
JR Z,RUN_BAT
JP RUN_EXE
NON_EXT LD BC,0*256+Dss.Exec
RST #10
;R10
CALL Restore_Screen
;R10
RET NC
LD HL,(SAVEHL)
CP 3
JP NZ,EXEERR
PUSH HL
LD A,(CMDLINE-1)
LD B,A
EXF000 LD A,(HL)
CP "!"
JR C,EXF001
INC HL
DJNZ EXF000
EXF001
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"
; LD HL,(SAVEHL)
POP HL
JP RUN_BAT
RUN_EXE:
LD BC,0*256 + Dss.Exec
RST ToDSS
;R10
CALL Restore_Screen
;R10
RET NC
EXEERR CP 5
JP NC,ERROR
LD DE,0 ;BAD COMMAND OR FILENAME
JP ERR_MSG
RUN_BAT CALL BATCH
JP C,EXEERR
RET
BATLIST DZ 'PAUSE' : DW CPAUSE
DZ 'REM' : DW CREM
CMDLIST DZ 'CD' : DW CCHDIR
DZ 'CHDIR' : DW CCHDIR
DZ 'CLS' : DW CLS
DZ 'DATE' : DW CDATE
DZ 'DEL' : DW CDELET
DZ 'DIR' : DW DIR
DZ 'ECHO' : DW CECHO
DZ 'ERASE' : DW CDELET
DZ 'EXIT' : DW CEXIT
DZ 'HELP' : DW HELP
DZ 'MD' : DW CMKDIR
DZ 'MKDIR' : DW CMKDIR
DZ 'PATH' : DW CPATH
DZ 'REN' : DW CRENAM
DZ 'RENAME' : DW CRENAM
DZ 'RD' : DW CRMDIR
DZ 'RMDIR' : DW CRMDIR
DZ 'SET' : DW CSET
DZ 'TIME' : DW CTIME
DZ 'VERSION' : DW VERS
DZ 'VER' : DW VERS
DB #00
CLS LD DE,#0000
LD HL,#2050
LD BC,7*256+Dss.Clear
LD A," "
RST #10
LD DE,#0000
JP LOCAT
CRLF LD A,#0D
CALL PRINTX
LD A,#0A
JP PRINTX
CDATE EX DE,HL
LD DE,DTA
LD C,Dss.GSwitch
RST #10
LD DE,DTA
LD A,(DE)
OR A
JR Z,NOSETD
CALL STR2DEC
JR C,ILLEG
XOR A
CP H
JR NZ,ILLEG
LD A,31
CP L
JR C,ILLEG
LD B,L
PUSH BC
CALL STR2DEC
POP BC
JR C,ILLEG
XOR A
CP H
JR NZ,ILLEG
LD A,12
CP L
JR C,ILLEG
LD C,L
PUSH BC
CALL STR2DEC
PUSH HL
LD C,Dss.SysTime
RST #10
POP IX
POP DE
LD C,Dss.SetTime
RST #10
NOSETD LD C,Dss.SysTime
RST #10
PUSH IX
PUSH DE
LD A,D
LD HL,PRM1
CALL PUTB
LD A,"-"
LD (HL),A
INC HL
POP DE
LD A,E
CALL PUTB
LD A,"-"
LD (HL),A
INC HL
PUSH HL
POP IX
POP HL
CALL PDIGIT
LD DE,DATEMSG
JP MESSAGE
ILLEG LD DE,ILLGMSG
CALL MESSAGE
RET
CTIME EX DE,HL
LD DE,DTA
LD C,Dss.GSwitch
RST #10
LD DE,DTA
LD A,(DE)
OR A
JR Z,NOSETT
CALL STR2DEC
JR C,ILLEG
XOR A
CP H
JR NZ,ILLEG
LD A,23
CP L
JR C,ILLEG
LD B,L
PUSH BC
CALL STR2DEC
POP BC
JR C,ILLEG
XOR A
CP H
JR NZ,ILLEG
LD A,59
CP L
JR C,ILLEG
LD C,L
PUSH BC
CALL STR2DEC
POP BC
JR C,ILLEG
XOR A
CP H
JR NZ,ILLEG
LD A,59
CP L
JR C,ILLEG
PUSH BC
LD A,L
PUSH AF
LD C,Dss.SysTime
RST #10
POP BC
POP HL
LD C,Dss.SetTime
RST #10
NOSETT LD C,Dss.SysTime
RST #10
PUSH BC
PUSH HL
LD A,H
LD HL,PRM1
CALL PUTB
LD A,":"
LD (HL),A
INC HL
POP DE
LD A,E
CALL PUTB
LD A,":"
LD (HL),A
INC HL
POP AF
CALL PUTB
XOR A
LD (HL),A
LD DE,TIMEMSG
JP MESSAGE
CPAUSE LD DE,PAUSMSG
CALL MESSAGE
LD C,Dss.WaitKey
RST #10
RET
;R09
PATHSTR DB "PATH=",0
CPATH LD A,(DE)
OR A
JP Z,PRNEPATH
INC DE
CP 9
JR Z,CPATH
CP "!"
JR C,CPATH
DEC DE
EX DE,HL
DEC HL
LD (HL),"="
DEC HL
LD (HL),"H"
DEC HL
LD (HL),"T"
DEC HL
LD (HL),"A"
DEC HL
LD (HL),"P"
LD BC,2*256+Dss.Environ
RST #10
CALL C,ERROR
RET
PRNEPATH
LD DE,DTA
LD HL,PATHSTR
LD BC,1*256+Dss.Environ
RST #10
JP C,ERROR
LD HL,PATHSTR
LD C,Dss.PChars
RST #10
LD HL,DTA
LD C,Dss.PChars
RST #10
CALL CRLF
RET
;R09
CSET LD A,(DE)
OR A
JP Z,PRNENVIR
INC DE ;R08
CP 9 ;R08
JR Z,CSET ;R08
CP "!" ;R08
JR C,CSET ;R08
DEC DE ;R08
EX DE,HL
LD BC,2*256+Dss.Environ
RST #10
CALL C,ERROR
RET
PRNENVIR
LD HL,DTA
LD BC,0*256+Dss.Environ
RST #10
LD HL,DTA
PRNENVX LD C,Dss.PChars
RST #10
LD A,CR
LD C,Dss.PutChar
RST #10
LD A,LF
LD C,Dss.PutChar
RST #10
LD A,(HL)
OR A
JR NZ,PRNENVX
RET
CECHO EX DE,HL
LD A,(HL)
OR A
JR Z,ECHO_F
EX DE,HL
PUSH DE
LD B,3
LD HL,ECHOON
CALL COMPARE
POP DE
JR Z,ECHO_FS
PUSH DE
LD B,4
LD HL,ECHOOFF
CALL COMPARE
POP HL
JR Z,ECHO_FR
;R03 REMOVE R01
LD C,Dss.PChars
RST #10
JP CRLF
ECHO_F LD A,(ECHOFLG)
OR A
LD DE,ON__MSG
JR Z,ECHON
LD DE,OFF_MSG
ECHON CALL FMESAGE
LD DE,PRM1
CALL PUTPRM
LD DE,ECHOMSG
CALL MESSAGE
RET
ECHO_FS XOR A
LD (ECHOFLG),A
RET
ECHO_FR LD A,#FF
LD (ECHOFLG),A
RET
;R04
EVALCMD
XOR A
LD HL,CMDLINE-1
LD C,(HL)
LD B,A
INC HL
ADD HL,BC
LD (HL),A
SBC HL,BC
LD DE,TMPLINE
CALL EVALSTR
LD HL,TMPLINE
LD DE,CMDLINE
LD BC,#00FF
MOVLBAK LD A,(HL)
LDI
INC B
OR A
JR NZ,MOVLBAK
DEC B
LD A,B
LD (CMDLINE-1),A
AND A
RET
; HL - STRING WITH %VAR%
EVALSTR
;R04 LD DE,DTA
VARLOOP
LD A,(HL)
CP "%"
JR Z,TVARIABLE
VARL1 LDI
OR A
JR NZ,VARLOOP
LD BC,0
LD (TVAR_PNT),BC
;R04 LD HL,DTA
;R04
RET
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
;R06
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
;R06
NULL DB 0 ;R07
;R01
TVAR_PNT
DW 0
TVARIABLE
LD BC,(TVAR_PNT)
LD A,B
OR C
LD A,"%"
LD (TVAR_PNT),DE
JR NZ,TVAR1 ;R06
INC HL ;R06
LD A,(HL) ;R06
CP "9"+1 ;R06
JR C,TVAR0 ;R06
TVAR2 LD A,"%" ;R06 > "9"
DEC HL ;R06
JP VARL1 ;R06
TVAR0 CP "0" ;R06
JR C,TVAR2 ;R06 < "0"
; BATCH PARAM %0, %1, %2 ...
INC HL ;R06
PUSH HL
LD (TVAR_PNT),BC
SUB "0"
ADD A,A
LD C,A
LD HL,BAT_PRM_ARRAY
ADD HL,BC
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
OR H
JR Z,NOBTP ;NO BATCH PARM
MVBTP LD A,(HL)
LDI
OR A
JR NZ,MVBTP
DEC DE
NOBTP POP HL
JP VARLOOP ;R06
;R06
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
LD E,C
LD H,B
LD L,C
INC HL
LD BC,1*256+Dss.Environ
RST #10
TNOVAR POP HL
INC HL
LD BC,0
LD (TVAR_PNT),BC
JP VARLOOP
;R01
COMPARE LD A,(DE)
CP #61
JP C,COM001
CP #7B
JP NC,COM001
SUB #20
COM001 CP (HL)
RET NZ
INC HL
INC DE
DJNZ COMPARE
RET
CREM RET
CCHDIR EX DE,HL
LD DE,DTA
LD C,Dss.GSwitch
RST #10
XOR A
LD HL,DTA
CP (HL)
JR NZ,YP
LD (HL),"."
INC HL
LD (HL),"."
INC HL
LD (HL),0
DEC HL
DEC HL
YP LD C,Dss.ChDir
RST #10
CALL C,ERROR
CALL GETPATH
RET
CMKDIR EX DE,HL
LD DE,DTA
LD C,Dss.GSwitch
RST #10
LD HL,DTA
LD C,Dss.MkDir
RST #10
CALL C,ERROR
RET
CRMDIR EX DE,HL
LD DE,DTA
LD C,Dss.GSwitch
RST #10
LD HL,DTA
LD C,Dss.RmDir
RST #10
CALL C,ERROR
RET
CDELET EX DE,HL
LD DE,DTA
LD C,Dss.GSwitch
RST #10
LD HL,DTA
LD C,Dss.Delete
RST #10
CALL C,ERROR
RET
CRENAM EX DE,HL
LD DE,DTA
LD C,Dss.GSwitch
RST #10
LD DE,DTA+128
LD C,Dss.GSwitch
RST #10
LD HL,DTA
LD DE,DTA+128
LD C,Dss.Rename
RST #10
CALL C,ERROR
RET
ERROR LD E,A
LD D,0
JP ERR_MSG
DIR LD HL,0
LD (FILES),HL
LD (S_LOW),HL
LD (S_HIGH),HL
EX DE,HL
LD A,(HL)
OR A
JR NZ,YPS
LD HL,ALLFS
YPS LD DE,DTA
LD C,Dss.GSwitch
RST #10
LD HL,DTA
LD DE,DTA
LD A,#37
LD BC,0*256+Dss.F_First
RST #10
JP C,ERROR
LD A,(PATHF)
LD (PRM1+0),A
LD A,":"
LD (PRM1+1),A
LD A,0
LD (PRM1+2),A
LD HL,SER_NUM
LD DE,PRM2
CALL PUTPRM
CALL GETPATH
LD HL,PATHF
LD DE,PRM3
CALL PUTPRM
LD DE,DIR1MSG
CALL MESSAGE
; CALL CRLF
; CALL CRLF
DIRNEX LD HL,DTA
LD DE,33
ADD HL,DE
CALL PNAME
LD IX,DTA
LD A,(IX+32)
AND #10
JP NZ,NODADD
LD HL,(FILES)
INC HL
LD (FILES),HL
LD E,(IX+30)
LD D,(IX+31)
LD HL,(S_HIGH)
EXX
LD E,(IX+28)
LD D,(IX+29)
LD HL,(S_LOW)
CALL ADDXXX
LD (S_LOW),HL
EXX
LD (S_HIGH),HL
NODADD LD DE,DTA
LD C,Dss.F_Next
RST #10
JR NC,DIRNEX
CALL ORDERS
RET
ORDERS LD HL,(FILES)
LD IX,PRM1
CALL PDIGIT
LD HL,(S_LOW)
EXX
LD HL,(S_HIGH)
EXX
CALL MAKE_LN
LD HL,L32BIT_+9
LD A,(HL)
CP #20
JR NZ,ALR2
LD A,#30
LD (HL),A
ALR2 LD DE,SIZEBFF
LD HL,L32BIT_;; +1
LD A,(HL)
LDI
CP " "
JR Z,NOPO1
LD A,"."
NOPO1 LD (DE),A
INC DE
LDI
LDI
LD A,(HL)
LDI
CP " "
JR Z,NOPO2
LD A,"."
NOPO2 LD (DE),A
INC DE
LDI
LDI
LD A,(HL)
LDI
CP " "
JR Z,NOPO3
LD A,"."
NOPO3 LD (DE),A
INC DE
LDI
LDI
LDI
LD HL,SIZEBFF
LD DE,PRM2
CALL PUTPRM
LD DE,DIR2MSG
JP MESSAGE
;HL':HL + DE':DE
ADDXXX ADD HL,DE
EXX
ADC HL,DE
EXX
RET
FILES DW 0
S_LOW DW 0
S_HIGH DW 0
;12345678 123 1 234 567 890 "
; SIZE
PNAME LD BC,8
LD DE,PRM1
LDIR
XOR A
LD (DE),A
LD DE,PRM2
LDI
LDI
LDI
LD (DE),A
LD IX,DTA
CALL PRNSIZE
CALL PRNDATE
CALL PRNTIME
LD DE,DIR3MSG
JP MESSAGE
PRINTB LD A,(HL)
PUSH BC
CALL PRINTX
POP BC
INC HL
DJNZ PRINTB
RET
;------------------
PUTB LD C,#2F
PUTB1 INC C
SUB 10
JP NC,PUTB1
ADD A,10
ADD A,#30
PUSH AF
LD A,C
LD (HL),A
INC HL
POP AF
LD (HL),A
INC HL
RET
PRNB LD C,#2F
PRNB1 INC C
SUB 10
JP NC,PRNB1
ADD A,10
ADD A,#30
PUSH AF
LD A,C
CALL PRINTX
POP AF
JP PRINTX
STR2DEC LD HL,0
STRLOOP LD A,(DE)
INC DE
OR A
RET Z
CP "-"
RET Z
CP ":"
RET Z
LD B,H
LD C,L
ADD HL,HL
ADD HL,HL
ADD HL,BC
ADD HL,HL
CALL ATODEC
RET C
ADD A,L
LD L,A
JR NC,STRLOOP
INC H
JR STRLOOP
ATODEC CP "0"
RET C
CP ":"
CCF
RET C
SUB "0"
RET
PDIGIT LD DE,10000
LD A,#C8
LD (RET_Z),A
CALL DIG
LD DE,1000
CALL DIG
LD DE,100
CALL DIG
LD DE,10
CALL DIG
LD A,L
ADD A,#30
; !FIXIT
LD (IX+0),A
INC IX
LD (IX+0),0
; ­  íâ®:
; LD (IX+0),A
; LD (IX+1),0
RET
DIG XOR A
DIG1 INC A
SBC HL,DE
JR NC,DIG1
ADD HL,DE
DEC A
RET_Z RET Z
ADD A,#30
LD (IX+0),A
INC IX
; LD A,0
XOR A
LD (RET_Z),A
RET
PRNSIZE LD A,(IX+32)
LD HL,DIRIDD
AND #10
JP NZ,PRZ
LD L,(IX+28)
LD H,(IX+29)
EXX
LD L,(IX+30)
LD H,(IX+31)
EXX
PUSH IX
CALL MAKE_LN
LD HL,L32BIT_+9
LD A,(HL)
CP #20
JR NZ,ALR
LD A,#30
LD (HL),A
ALR LD DE,SIZEBFF
LD HL,L32BIT_;; +1
LDI
LD A," "
LD (DE),A
INC DE
LDI
LDI
LDI
LD (DE),A
INC DE
LDI
LDI
LDI
LD (DE),A
INC DE
LDI
LDI
LDI
LD HL,SIZEBFF
POP IX
PRZ LD DE,PRM3
JP PUTPRM
PRNDATE LD B,(IX+25)
LD C,(IX+24)
LD HL,SIZEBFF
CALL DATE
LD (HL),0
LD HL,SIZEBFF
LD DE,PRM4
LD A,(HL)
CP "0"
JP NZ,PUTPRM
LD (HL),#20
JP PUTPRM
PRNTIME LD B,(IX+22)
LD C,(IX+23)
LD HL,SIZEBFF
CALL TIME
LD (HL),0
LD HL,SIZEBFF
LD DE,PRM5
LD A,(HL)
CP "0"
JP NZ,PUTPRM
LD (HL),#20
JP PUTPRM
TIME
SRL C
RR B
SRL C
RR B
SRL C
RR B
SRL B
SRL B
LD A,C
CALL NUMB
LD (HL),":"
INC HL
LD A,B
JP NUMB
DATE
LD A,C
AND #1F
PUSH BC
CALL NUMB
LD (HL),"."
INC HL
POP BC
LD A,C
SRL B
RLA
RLA
RLA
RLA
AND #0F
CALL NUMB
LD (HL),"."
INC HL
LD A,B
ADD A,#50
CP 100
JP C,NUMB
SUB100 SUB 100
CP 100
JP C,NUMB
JR SUB100
NUMB LD C,#2F
NUMB1 INC C
SUB 10
JP NC,NUMB1
ADD A,10
ADD A,#30
LD (HL),C
INC HL
LD (HL),A
INC HL
RET
MAKE_LN LD IX,L32BIT_
EXX
LD DE,#3B9A ; 1000000000
EXX
LD DE,#CA00
CALL GET_DIG
EXX
LD DE,#05F5 ; 100000000
EXX
LD DE,#E100
CALL GET_DIG
EXX
LD DE,#0098 ; 10000000
EXX
LD DE,#9680
CALL GET_DIG
EXX
LD DE,#000F ; 1000000
EXX
LD DE,#4240
CALL GET_DIG
EXX
LD DE,#0001 ; 100000
EXX
LD DE,#86A0
CALL GET_DIG
EXX
LD DE,#0000 ; 10000
EXX
LD DE,#2710
CALL GET_DIG
EXX
LD DE,#0000 ; 1000
EXX
LD DE,#03E8
CALL GET_DIG
EXX
LD DE,#0000 ; 100
EXX
LD DE,#0064
CALL GET_DIG
EXX
LD DE,#0000 ; 10
EXX
LD DE,#000A
CALL GET_DIG
LD A,L ; 1
ADD A,#30
LD (IX+0),A
INC IX
LD HL,L32BIT_
LD DE,#2030
KILLZ LD A,(HL)
CP E
JR NZ,KILLZ2
LD (HL),D
INC HL
JP KILLZ
KILLZ2 LD HL,L32BIT_+9
LD A,(HL)
CP D
RET NZ
LD (HL),E
RET
; HL:HL - DE:DE
GET_DIG XOR A
INC_DG INC A
SBC HL,DE
EXX
SBC HL,DE
EXX
JP NC,INC_DG
ADD HL,DE
EXX
ADC HL,DE
EXX
DEC A
ADD A,#30
LD (IX+0),A
INC IX
RET
L32BIT_ DB "0000000000"
DIRIDD DB "<DIR> ",0
SIZEBFF DB "0 000 000 000",0,0
;-------------------
VERS LD C,Dss.Version
RST #10
PUSH BC
LD A,D
LD HL,PRM1
CALL GETnoZERO
LD A,"."
LD (HL),A
INC HL
LD A,E
CALL GETnoZERO
LD A,"."
LD (HL),A
INC HL
POP BC
LD A,C
CALL GETnoZERO
XOR A
LD (HL),A
LD DE,VERSMSG
JP MESSAGE
GETnoZERO:
LD B,#2F
.loop: INC B
SUB 10
JR NC,.loop
ADD A,10+"0"
LD C,A
LD A,"0"
CP B
LD A,C
JR Z,.mdec
LD (HL),B
INC HL
.mdec: LD (HL),A
INC HL
SCF
RET
GETyesZERO:
LD B,#2F
.loop: INC B
SUB 10
JR NC,.loop
ADD A,10
LD (HL),B
INC HL
RET Z
ADD A,"0"
LD (HL),A
INC HL
RET
HELP LD DE,HELPMSG
CALL MESSAGE
RET
CEXIT LD A,(TASKX)
DEC A
DEC A
RET Z
POP HL
QUIT LD B,0
LD C,Dss.Exit
RST #10
RET
ERR_MSG INC DE
LD HL,ERR0
LD BC,ERR1-ERR0
CALL LCPIR
CALL PRINTZ
CALL CRLF
JP CRLF
MESSAGE CALL FMESAGE
CALL PRINTZ
CALL GETXY
RET
FMESAGE INC DE
LD HL,MSG0
LD BC,MSG1-MSG0
LCPIR XOR A
CPIR
RET PO
RET NZ
DEC DE
LD A,D
OR E
JP NZ,LCPIR
RET
PUTPRM LD BC,15
PUTPRMA LD A,(HL)
LDI
RET PO
OR A
JR NZ,PUTPRMA
RET
PRINTZ LD A,(HL)
INC HL
OR A
RET Z
CP "%"
JR NZ,PRINTZ2
LD A,(HL)
INC HL
SUB "1"
PUSH HL
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,PRM1
ADD HL,BC
LD C,Dss.PChars
RST #10
POP HL
JR PRINTZ
PRINTZ2 LD C,Dss.PutChar
RST #10
JP PRINTZ
ROOT DB "C:",#5C,0
ALLFS DB "*.*",0
SER_NUM DB "C37F-73AB",0
EXTBF DS 4
BATBF DB "BAT"
ECHOON DB "ON",0
ECHOOFF DB "OFF",0
DIR1MSG EQU 0
VERSMSG EQU 1
DATEMSG EQU 2
TIMEMSG EQU 3
PAUSMSG EQU 4
ILLGMSG EQU 5
ECHOMSG EQU 6
ON__MSG EQU 7
OFF_MSG EQU 8
DIR2MSG EQU 9
DIR3MSG EQU 10
HELPMSG EQU 11
MSG0 DB 0
DB "Volume in drive %1 has no label",CR,LF ; !FIXIT
DB "Volume Serial number is %2",CR,LF
DB "Directory of %3",CR,LF,CR,LF,0
DB "Estex DSS: Version %1",CR,LF,0 ;R02
DB "Current date: %1",CR,LF,0
DB "Current time: %1",CR,LF,0
DB "Press any key to continue . . .",CR,LF,0
DB "Invalid parametr",CR,LF,0
DB "Echo is %1",CR,LF,0
DB "on",0
DB "off",0
DB " %1 file(s) %2 bytes",CR,LF,CR,LF,0
; FILENAME EXT SIZE DATE TIME
DB "%1 %2 %3 %4 %5",CR,LF,0
DB "COMMANDS:",CR,LF,CR,LF
DB "CD DEL HELP RD SET "
DB " ",CR,LF
DB "CHDIR DIR MD REN TIME "
DB " ",CR,LF
DB "CLS ERASE MKDIR RENAME VER "
DB " ",CR,LF
DB "DATE EXIT PATH RMDIR VERSION "
DB " ",CR,LF
DB 0
MSG1
ERR0 DB #00
DB "Bad command or file name",0
DB "Invalid function",0
DB "Invalid drive number",0
DB "File not found",0
DB "Path not found",0
DB "Invalid handle",0
DB "Extended error 6",0
DB "File exist",0
DB "File read only",0
DB "Root overflow",0
DB "No free space",0
DB "Directory not empty",0
DB "Can't delete current directory",0
DB "Invalid media",0
DB "Unknown operation",0 ;R02
DB "Directory exist",0
DB "Invalid filename",0
DB "Invalid EXE-file",0
DB "Not supported EXE-file",0
DB "Access denied",0
DB "Not ready",0
DB "Seek error",0
DB "Sector not found",0
DB "CRC error",0
DB "Write protect",0
DB "Read error",0
DB "Write error",0
DB "Drive failure",0
DB "Extended error 28",0
DB "Extended error 29",0
DB "No free memory",0
DB "Invalid memory block",0
DB "Extended error 32",0
DB "Extended error 33",0
DB "Extended error 34",0
DB "35",0
DB "36",0
DB "37",0
DB "38",0
DB "39",0
DB "40",0
DB "41",0
DB "42",0
DB "43",0
DB "44",0
DB "45",0
DB "46",0
DB "47",0
DB "48",0
DB "49",0
DB "50"
DB 0
ERR1
PRM1 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM2 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM3 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM4 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM5 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM6 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM7 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM8 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM9 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DTA ;DEFS 256,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PATHF ;DEFS 256,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
BAT_FM DB 0
BAT_LEN DB 0
ECHOFLG DB 0
PATHLEN DB 0
PATH ;DEFS 40,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0
GETPATH: LD C,2
RST #10
LD HL,PATHF
ADD A,"A"
LD (HL),A
INC HL
LD (HL),":"
INC HL
LD C,30
RST #10
LD HL,PATHF
LD DE,PATH
LDI
LDI
LDI
PUSH HL
XOR A
LD BC,34
CPIR
JP NZ,LONGP
LD A,34
SUB C
LD C,A
POP HL
LDIR
JR PHLEN
LONGP CPIR
LD A,"."
LD (DE),A
INC DE
LD (DE),A
INC DE
LD (DE),A
INC DE
LD BC,31
AND A
SBC HL,BC
LDIR
POP HL
PHLEN LD HL,PATH
LD BC,40
XOR A
CPIR
LD A,39
SUB C
LD (PATHLEN),A
LD C,A
INC C
INC C
LD A,80
SUB C
LD (WINDOW),A
RET
PRINT_B LD C,A
PRINTBB PUSH BC
CALL PRINTX
POP BC
LD A,C
DJNZ PRINTBB
RET
TEMPXY DW 0
CR_ LD C,Dss.Cursor
RST #10
LD E,0
JP LOCAT
LF_ LD C,Dss.Cursor
RST #10
LD A,D
CP #1F
JP Z,LFF
INC D
JP LOCAT
LFF PUSH HL
PUSH DE
LD BC,#018A
LD DE,#0020
EI
HALT
DI
RST ToBIOS
LD DE,#1F00
CALL LOCAT
LD A,#20
LD BC,#5082
RST ToBIOS
EI
POP DE
CALL LOCAT
POP HL
RET
PRINTX CP #20
JP NC,CHAR
CP #0D
JP Z,CR_
CP #0A
JP Z,LF_
CHAR PUSH BC
LD BC,#0182
RST ToBIOS
POP BC
RET
LOCAT LD (TEMPXY),DE
LD C,Dss.Locate
RST #10
RET
;PRINTX LD C,Dss.PutChar
; RST #10
; RET
CEDIT PUSH IX
POP HL
INC HL
INC HL
LD (ETXS),HL
XOR A
LD (POSIT),A
LD (SHIFT),A
EDIT1 LD DE,(ETXS)
CALL PRINT_S
CALL KEY
CP 13
RET Z
LD HL,EDIT1
PUSH HL
AND A
LD HL,#5400
SBC HL,DE
JP Z,BACK
AND A
LD HL,#5600
SBC HL,DE
JP Z,FORW
CP #08
JP Z,DELET
CP #20
RET C
EX AF,AF'
LD A,(IX+1)
CP (IX+0)
CCF
RET C
LD A,(IX+1)
LD E,A
LD D,0
LD HL,(ETXS)
ADD HL,DE
LD A,(POSIT)
LD E,A
LD A,(IX+1)
SUB E
JR Z,ADD_SM
LD B,D
LD C,A
LD D,H
LD E,L
DEC HL
LDDR
EX DE,HL
ADD_SM EX AF,AF'
LD (HL),A
LD A,(POSIT)
INC A
LD (POSIT),A
LD (MAIN_X),A
INC (IX+1)
LD HL,(ETXE)
INC HL
LD (ETXE),HL
LD HL,SHIFT
SUB (HL)
CP (IX-1)
RET C
LD A,(STEP)
ADD A,(HL)
LD (HL),A
; CALL PAGE
RET
BACK LD A,(POSIT)
OR A
RET Z ;JP Z,BCK
DEC A
LD (POSIT),A
LD (MAIN_X),A
INC A
LD HL,SHIFT
SUB (HL)
RET NZ
LD A,(STEP)
LD E,A
LD A,(HL)
SUB E
LD (HL),A
; CALL PAGE
RET
FORW LD A,(POSIT)
CP (IX+1)
RET Z ; JP Z,FRD
INC A
LD (POSIT),A
LD (MAIN_X),A
LD HL,SHIFT
SUB (HL)
CP (IX-1)
RET C
LD A,(STEP)
ADD A,(HL)
LD (HL),A
; CALL PAGE
RET
DELET LD A,(POSIT)
OR A
RET Z ; JP Z,LINKSTR
LD HL,(ETXS)
LD E,A
LD D,0
ADD HL,DE
LD A,(IX+1)
SUB E
JR Z,SUB_SM
LD B,D
LD C,A
LD D,H
LD E,L
DEC DE
LDIR
SUB_SM XOR A
DEC HL
LD (HL),A
LD A,(POSIT)
DEC A
LD (POSIT),A
LD (MAIN_X),A
DEC (IX+1)
LD HL,(ETXE)
DEC HL
LD (ETXE),HL
LD HL,SHIFT
INC A
SUB (HL)
RET NZ
LD A,(STEP)
LD E,A
LD A,(HL)
SUB E
LD (HL),A
; CALL PAGE
RET
KEY ;RES 5,(IY+1)
LD A,(SHIFT)
LD E,A
LD A,(POSIT)
SUB E
INC A
LD HL,PATHLEN
ADD A,(HL)
LD (_X+1),A
LD A,(POSIT)
CP (IX+1)
JP C,KEY0
LD A,#20
LD (_A+1),A
JP KEY1
KEY0 LD E,A
LD D,0
LD HL,(ETXS)
ADD HL,DE
LD A,(HL)
LD (_A+1),A
KEY1 CALL CURSORF
EI
HALT
LD C,Dss.ScanKey
RST #10
JP Z,KEY1
RET
CURSORX DB #00
CURSORF LD A,05
DEC A
LD (CURSORF+1),A
RET NZ
LD A,05
LD (CURSORF+1),A
LD DE,(TEMPXY)
_X LD E,#00
CALL LOCAT
LD A,(CURSORX)
XOR #FF
LD (CURSORX),A
LD A,"_"
JR NZ,YEPCUR
_A LD A,#20
YEPCUR CALL PRINTX
EI
RET
RES_CUR LD A,(CURSORX)
OR A
RET Z
XOR #FF
LD (CURSORX),A
LD DE,(TEMPXY)
LD A,(_X+1)
LD E,A
CALL LOCAT
LD A,(_A+1)
JP PRINTX
PRINT_S PUSH DE
CALL GETXY ;;;
LD DE,(TEMPXY)
LD E,0
CALL LOCAT
LD HL,PATH
CALL PRINTZ
LD A,">"
CALL PRINTX
POP DE
EX DE,HL
SH LD BC,#0000
ADD HL,BC
LD A,(SHIFT)
LD C,A
LD A,(IX+1)
SUB C
JP Z,EMT_STR
LD B,A
LD A,(IX-1)
SUB B
JR NC,PR_S
LD B,(IX-1)
PR_S PUSH BC
LD C,#86
RST ToBIOS
POP BC
EMT_STR LD A,(IX-1)
SUB B
EI
RET Z
LD B,A
LD C,#82
LD A,#20
RST ToBIOS
EI
RET
SHIFT EQU SH+1
GET_CMD LD D,XH
LD E,XL
EX DE,HL
LD E,(HL)
INC HL
LD D,0
EX DE,HL
ADD HL,DE
LD (HL),0
NEXTPRM EX DE,HL
SKIPSP LD A,(HL)
INC HL
CP " "
RET C
JR Z,SKIPSP
DEC HL
CP "/"
JR NZ,PROCESS
LD DE,BUFFER
LD C,Dss.GSwitch
RST #10
PUSH AF
EX DE,HL ;SAVE HL IN DE
LD HL,BUFFER
INC HL
CALL ISWITCH
POP AF
JP NC,NEXTPRM
XOR A
RET
PROCESS LD DE,CMDLINE
LD BC,#00FF
NLDI LD A,(HL)
LDI
INC B
CP " "
JR NC,NLDI
DEC B
LD A,B
LD (CMDLINE-1),A
LD A,(RUNMODE)
OR #40 ;PROCESS
LD (RUNMODE),A
XOR A
RET
ISWITCH LD A,(HL)
CP "a"
JR C,NUP
CP "{"
JR NC,NUP
SUB #20
NUP
PR000 CP "P"
JR NZ,PR001
LD A,(RUNMODE)
OR #80 ;PRIMARY CONSOLE
LD (RUNMODE),A
RET
PR001 CP "S"
JR NZ,PR002
LD A,(RUNMODE)
OR #20 ;SECONDARY CONSOLE
LD (RUNMODE),A
PR002 CP "C"
JR NZ,PR003
LD A,(RUNMODE)
OR #10 ;RUN BATCH FILE
LD (RUNMODE),A
PR003 RET
TASKX DB 0
RUNMODE DB 0
STEP DB 8
MAIN_X DB 0
LEN_OLD DB #00
POSIT DB #00
ETXS DW 0
ETXE DW 0
; +0 - Size buffer
; +1 - Amount simbols
; -1 - Scroll Window
WINDOW DB #50
BUFFERC DB #FF
LEN_NEW DB #00
CMDLINE ;DEFS #100,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
TMPLINE DS 256
BATNAME DB "system.bat",0
PRMLINE DS 256
BUFFER:
BAT_BUFFER.size EQU 128
BATBUFF: BLOCK BAT_BUFFER.size+1,0
;
OUTEND
;
;[End]