		MOV AH, 9
		MOV DX, OFFSET AMSG
		INT 21H
		XOR AX, AX
		MOV [FUNC], AL
		MOV SI, 80H
		CLD
		LODSB
		MOV CX, AX
		ADD CX, SI
		MOV DI, OFFSET INFN
		CALL GETFN
		JC CMDL0
		MOV AL, 1
		MOV [FUNC], AL
		MOV AX, [INFN]
		MOV DX, OFFSET DOTASM
		MOV BX, OFFSET DOTCOM
		CMP AX, 412FH
		JZ CMDASM
		CMP AX, 442FH
		JZ CMDDIS
		CMP AX, 542FH
		JZ CMDTR
		JMP CMDDET
CMDTR:		MOV AX, CX
		SUB AX, SI
		MOV [SI], AL
		XOR AL, AL
		MOV [FUNC], AL
		CALL ASM
		JC CMDTRE
		MOV SI, OFFSET OUTPUT
		MOV DI, OFFSET ELEMENT+1
		XOR AH, AH
		LODSB
		MOV CX, AX
		JCXZ CMDTR0
CMDTRL:		LODSB
		CALL HALX
		MOV AL, 20H
		STOSB
		LOOP CMDTRL
		MOV AX, 0A0DH
		STOSW
		MOV AX, DI
		SUB AX, OFFSET ELEMENT+1
		MOV [ELEMENT], AL
CMDTRE:		MOV SI, OFFSET ELEMENT
		CALL STOP
CMDTR0:		RET
CMDL0:		MOV AH, 9
		MOV DX, OFFSET USAGE
		INT 21H
		RET
CMDDIS:		MOV AL, 3
		MOV [FUNC], AL
		XCHG DX, BX
CMDASM:		MOV DI, OFFSET INFN
		CALL GETFN
		JC CMDL0
CMDDET:		MOV DI, OFFSET OUTFN
		CALL GETFN
		JNC CMDGOT
		MOV CX, 40H
		MOV SI, OFFSET INFN
		MOV DI, OFFSET OUTFN
		PUSH DI
	REPZ	MOVSB
		POP DI
		STC
		CALL ADDEXT
CMDGOT:		MOV SI, DX
		MOV DI, OFFSET INFN
		CLC
		CALL ADDEXT
		MOV SI, BX
		MOV DI, OFFSET OUTFN
		CLC
		CALL ADDEXT
		CALL OPENF
		JC CMDX
		MOV SI, OFFSET PROCM
		CALL STOP
		MOV SI, OFFSET INFN
		CALL OUTF
		MOV AL, [FUNC]
		CMP AL, 1
		JZ DOASM
		CALL DISF
		JMP SHORT OUTGEN
DOASM:		CALL ASMF
		MOV AX, [ERRS]
		OR AX, AX
		JNZ PERR
		INC BYTE PTR [FUNC]
		CALL ASMF
		MOV AX, [ERRS]
		OR AX, AX
		JNZ PERR
OUTGEN:		MOV SI, OFFSET OUTM
		CALL STOP
		MOV SI, OFFSET OUTFN
		CALL OUTF
PERR:		CALL CLOSF
		MOV CX, [ERRS]
		JCXZ NOERR
		MOV AH, 41H
		MOV DX, OFFSET OUTFN
		INT 21H
NOERR:		MOV AX, CX
		MOV DI, OFFSET ERRN
		CALL WDA
		MOV AH, 9
		MOV DX, OFFSET ERRF
		INT 21H
CMDX:		RET
