CDX/CMDPARSE.ASM

106 lines
1.5 KiB
NASM

; HL - exe-prefix
; IX - pointers at work buffers
EX_COMMAND_LINE:
INC HL
.NEXTPR: LD DE,ARGCBUF
LD BC,Dss.EX_Path.GSWITCH
RST ToDSS
PUSH AF
PUSH HL
LD A,(ARGCBUF)
OR A
JR Z,.EOCL ;end of command line
CP "-"
JR Z,.ITCKEY
CP "/"
JR Z,.ITCKEY
LD HL,ARGCBUF
LD E,(IX+0)
LD D,(IX+1)
INC IX
INC IX
LD A,D
OR E
JR Z,.CL_FAILURE
;LD A,1
;LD (NAME_FLG),A
.MOVNAME: LD A,(HL)
LDI
OR A
JR NZ,.MOVNAME
;
.EOCL: POP HL
POP AF
JR NC,.NEXTPR
RET
;
.CL_FAILURE: POP HL
POP AF
RET
.ITCKEY: LD A,(ARGCBUF+1)
CP "5"
JR NC,.HELP
CP "1"
JR NC,.number
; ERROR
LD HL,ARGCBUF+1
CALL PUTVAR
LD A,MSG_UNK_DEVICE_NUMBER
CALL MESSAGE
LD A,1
LD (STOPMODE),A
JR .EOCL
;
.number: SUB '1'
OR #C0
;
PUSH IX
PUSH AF
CALL RESTORE_STATE
XOR A
LD (RESTORE_STATE.set_par),A
POP AF
LD (CDDRIVE),A
LD C,BIOS.DRV_DETECT
RST ToBIOS
POP IX
JR NC,.EOCL
;
CP BIOS.Error.ATAPI.UnitAttention
JR NZ,.error
;
LD A,(CDDRIVE)
PUSH IX
CALL SAVE_MEDIA_CHANGED
POP IX
JR NC,.EOCL
;
.error: LD HL,ARGCBUF+1
CALL PUTVAR
LD A,MSG_NO_CDROM
CALL MESSAGE
LD A,1
LD (STOPMODE),A
SCF
JR .CL_FAILURE
;
.HELP: LD A,MSG_USAGE
CALL MESSAGE
LD A,1
LD (STOPMODE),A
JR .EOCL
; MAS_CD:
; ;LD A,MASTER
; ;LD (CDDRIVE),A
; JR EOCL
; SLA_CD:
; ;LD A,SLAVE
; ;LD (CDDRIVE),A
; JR EOCL