*
* CONCAT: File concatination utility
*
* Copyright 1983-2005 Dave Dunfield
* All rights reserved.
*
	ORG	OSRAM
*
CONCAT	CMPA	#'?'		QUERY?
	BNE	QUAL		NO, LOOK FOR QUALIFIERS
	SSR	25
	FCCZ	'Use: CONCAT[/QUIET] <destination> <source1> [<source2>] ...'
	RTS
* PARSE FOR COMMAND QUALIFIERS
QUAL	LDA	,Y		GET CHAR FROM COMMAND LINE
	CMPA	#'/'		IS IT A QUALIFIER?
	BNE	MAIN		NO, CONTINUE WITH MAIN PROGRAM
	LEAX	QTABLE,PCR	POINT TO QUALIFIER TABLE
	SSR	18		LOOK IT UP
	CMPB	#QMAX		IS IT IN RANGE
	BHS	QERR		IF SO, IT'S INVALID
	LEAX	QFLAGS,PCR	POINT TO QUALIFIER FLAGS
	CLR	B,X		SET THE FLAG
	BRA	QUAL		LOOK FOR ANOTHER QUALIFIER
QERR	SSR	24		DISPLAY MESSAGE
	FCCZ	/Invalid qualifier: '/
	LDA	,Y+		GET CHARACTER
DSQU1	SSR	33		DISPLAY
	LDA	,Y+		GET NEXT CHAR
	BEQ	GOABO		NULL IS DELIMITER
	CMPA	#'/'		START OF ANOTHER QUALIFIER?
	BEQ	GOABO		IF SO, QUIT
	CMPA	#' '		SPACE?
	BEQ	GOABO		IF SO, QUIT
	CMPA	#$0D		END OF LINE?
	BNE	DSQU1		NO, KEEP DUMPING
GOABO	SSR	25		DISPLAY MESSAGE
	FCB	$27,0		CHARACTERS TO DISPLAY
	LDA	#1		INVALID OPERAND RETURN CODE
	LBRA	ABORT
* OPEN OUTPUT FILE
MAIN	SSR	10		GET FILENAME
	BNE	ABORT		ERROR
	LDU	#OUTFIL		PT TO FILE POINTER
	SSR	56		OPEN OUTPUT FILE TO WRITE
	BNE	ABORT		ERROR
* OPEN INPUT FILE
OPENIN	SSR	10
	BNE	ABORT1
	LDX	#RAM
	SSR	53
	BNE	ABORT
	LDA	#$FF
	STA	,X+		INCASE EXACTLY ONE BLOCK
* WRITE TO OUTPUT
	LDX	#RAM
WR1	LDA	,X+
	BMI	WR2
	TFR	A,B
	SSR	61
	CMPB	#$0D
	BNE	WR1
	LDD	LINECT
	ADDD	#1
	STD	LINECT
	BRA	WR1
WR2	SSR	4
	BNE	OPENIN
	LDA	QUIET
	BEQ	QUI1
	SSR	24
	FCCZ	'Total of '
	LDD	LINECT
	SSR	26
	SSR	25
	FCCZ	' lines written to output file.'
QUI1	CLRA
ABORT1	PSHS	A,CC
	SSR	57
	PULS	A,CC
ABORT	SSR	0
* QUALIFIER TABLE
QTABLE	FCB	$82
	FCC	'/QUIET'
	FCB	$80		END OF TABLE
QMAX	EQU	1
* QUALIFIER FLAGS
QFLAGS	EQU	*
QUIET	FCB	$FF
* LOCAL RAM STORAGE
LINECT	FDB	0
OUTFIL	RMB	522		OUTPUT BUFFER
RAM	EQU	*
