;THIS FILE IS FOR PEOPLE WITH LARGE MAST.CAT FILES WHO WANT TO
;USE AN EXTERNAL SORT PROGRAM SUCH AS SUPERSORT RATHER THAN
;THE INTERNAL SORT IN CROSSREF.  IT HAS THE SINGLE FUNCTION
;OF READING MAST.CAT AND CREATING FROM IT A FILE 'TEMP.CAT'
;WHICH IS IN THE FORMAT FOR SORTING VIA SUPERSORT.  THE 'IGNORE'
;NAMES ARE DELETED AND ALL PERIODS ARE CHANGED INTO COMMAS
;AS PROPER SUPERSORT FIELD DELIMITERS.
;
VERSION	EQU	1		;FOR SIGNON
MODLEV	EQU	0
;
	MACLIB	SEQIO
;
BSIZE	EQU	20*1024		;DISK BUFFER SIZE (*2)
;MAKE AS LARGE AS POSSIBLE FOR YOUR SYSTEM, HERE THEY
;ARE 20K EACH, 40K TOTAL
FILERR	SET	EXIT		;DISK I/O ERROR VECTOR
;
	ORG	100H
	POP	H		;GET RETURN ADDRESS
	SHLD	EXIT+1
	LXI	SP,STACK
;
	CALL	ILPRT
	DB	CR,LF
	DB	'MAST.CAT translator program, V'
	DB	VERSION+'0', '.', MODLEV+'0'
	DB	CR,LF
	DB	'Reads MAST.CAT, writes TEMP.CAT.  Strips off IGNORE'
	DB	CR,LF
	DB	'names.  Changes all PERIODS to COMMAS for SUPERSORT.'
	DB	CR,LF,LF,0
;
;SEQIO DOES CHARACTER I/O FUNCTIONS
;SET UP THE FILES
;
	FILE	INFILE,MASTIN,,MAST,CAT,BSIZE
	FILE	OUTFILE,MASTOUT,,TEMP,CAT,BSIZE
;
;
;READ IN THE NAMES TO BE IGNORED (I.E. NOT
;CATALOGED) AND THROW THEM AWAY (DO NOT WRITE TO
;OUTPUT FILE.)  THEY ARE AT THE FRONT OF MAST CAT.
;THEY ARE SIMPLY A LIST OF FILENAME.FILETYPE (CR/LF)
;WITH THE FIRST HAVING A ( BEFORE IT, AND THE
;LAST HAVING A ) AFTER IT.
;
	GET	MASTIN	;GET THE LEADING '('
	JZ	NOMAST		;IF EOF
	CPI	'('
	JNZ	NOIGN
IGNRD	GET	MASTIN
	JZ	IGNEOF	;UNEXPECTED EOF
	CPI	')'
	JZ	IGNEND	;TABLE IS LOADED
	JMP	IGNRD
;
;GOT THE ')', IGNORE TO END OF THIS LINE
IGNEND	GET	MASTIN
	JZ	IGNEOF
	CPI	0AH
	JNZ	IGNEND	;DELETE CR/LF
;
LOOP:	GET	MASTIN		;READ INPUT
	JZ	ALLDONE		;THRU ON EOF
	CPI	'.'
	JNZ	LOOP1		;CHANGE PERIODS TO COMMAS
	MVI	A,','
LOOP1:	PUT	MASTOUT		;WRITE OUTPUT
	JMP	LOOP		;DO ENTIRE FILE
;
;ALL DONE - WRITE EOF TO OUTPUT, ASK IF MORE TO DO
;
ALLDONE	MVI	A,'Z'-40H 	;EOF CHAR
	PUT	MASTOUT
	FINIS	MASTOUT
	FINIS	MASTIN
;
	CALL	ILPRT
	DB	CR,LF,'FUNCTION COMPLETE',CR,LF,0
	JMP	EXIT
;
;INLINE PRINT SUBROUTINE
;
ILPRT	XTHL		;GET STARTING ADDR OF STRING TO HL
ILPLP	MOV	A,M
	PUSH	H
	PUT	CON
	POP	H
	INX	H
	MOV	A,M
	ORA	A
	JNZ	ILPLP
	INX	H
	XTHL		;RETURN ADDR TO TOP OF STACK 
	RET
;
CRLF:	CALL	ILPRT		;CARRIAGE RET - LINE FEED
	DB	CR,LF,0
	RET
;
;EXIT WITH ERROR MESSAGE
EREXIT	CALL	CRLF
	POP	D		;ADDRESS OF TEXT TO DE
	MVI	C,PRINT
	CALL	BDOS
EXIT	JMP	$-$		;TO CP/M RETURN ADDR
;
NOMAST	CALL	EREXIT
	DB	BEL,'++MISSING OR EMPTY MAST.CAT',0
NOIGN	CALL	EREXIT
	DB	BEL,'++NO IGNORE NAMES IN MAST.CAT',0
IGNEOF	CALL	EREXIT
	DB	BEL,'++EOF READING FOR IGNORE NAMES.'
	DB	0DH,0AH,'MAY BE MISSING ")" AFTER LAST NAME.',0
;
	DS	80	;LOTSA STACK SPACE (40 LEVELS)
STACK	EQU	$
;
BUFFERS	EQU	$		;USED BY SEQIO
MEMSIZE	EQU	BUFFERS+@NXTB
;
;BDOS/CBIOS EQUATES 
PRINT	EQU	9
BDOS	EQU	5

CR	EQU	0DH
LF	EQU	0AH
BEL	EQU	07H

	END	NEWCAT



