/DECTAPE COPY PROGRAM.
/COPIES AND/OR COMPARES
/TWO DECTAPES.
/BY JOHN WILSON 09-MAR-84.
*0
	JMP	200		/LEAVE PAGE 0 CLEAR
*200
	CLA
	TAD	HEADER
	SAS
	JMP	.-2		/PRINT HDR & 1ST PROMPT
	JMS	GETNUM		/GET SOURCE UNIT #
	TAD	UNIT1		/SET UP FOR READ
	DCA	UNIT1
	TAD	PRMPT2
	SAS
	JMP	.-2		/PRINT 2ND PROMPT
	JMS	GETNUM		/GET DEST. UNIT #
	TAD	UNIT2R		/(READ)
	DCA	UNIT2R		/SAVE IT
	TAD	UNIT2R		/GET WORD BACK
	TAD	UNIT2W		/CONVERT TO WRITE
	DCA	UNIT2W		/SAVE IT
	TAD	PRMPT3
	SAS			/COPY OR COMPARE?
	JMP	.-2
	JMS	GETNUM		/GET RESPONSE
	DCA	COPFLG		/REMEMBER IT
/NOW WE'RE READY TO START
LOOP,	CLA
	TAD	KUNIT1
	DTXA			/READ A RECORD
	DTSF			/WAIT UNTIL DONE
	NOP
	DTRB			/GET FLAGS
	AND	K7776		/CLEAR DT FLAG
	SZA
	JMP	I ERR		/PRINT ERROR, DIE
	TAD	COPFLG		/WRITE TO DEST UNIT?
	SZA			/YES
	JMP	NOCOPY
	TAD	UNIT2W		/WRITE, UNIT 2
	DCA	UNIT2
	TAD	KBUF1
	DCA	UNIT2+2		/WRITE BUFFER #1
	TAD	KUNIT2
	DTXA			/WRITE THE RECORD
	DTSF
	NOP
	DTRB			/GET FLAGS
	AND	K7776
	SZA			/CONT IF NO ERROR
	JMP	I ERR
	TAD	KBUF2
	DCA	UNIT2+2		/NEXT READ GOES TO BUFFER #2
NOCOPY,	CLA
	TAD	UNIT2R
	DCA	UNIT2
	TAD	KUNIT2
	DTXA			/READ THE RECORD
	DTSF			/WAIT UNTIL DONE
	NOP
	DTRB			/GET FLAGS
	AND	K7776
	SZA
	JMP	I ERR
	JMS	I COMP		/COMPARE THE TWO RECORDS
	ISZ	UNIT1+1
	ISZ	UNIT2+1
	TAD	UNIT2+1
	TAD	M2703		/DONE THE WHOLE TAPE?
	SZA			/YES
	JMP	LOOP
	HLT			/EXIT
/
HEADER,	STR1
PRMPT2,	STR2
PRMPT3,	STR3
UNIT1,	20
	1
	BUFF1-1
UNIT2,	0
	1
	BUFF2-1
KUNIT1,	UNIT1
KUNIT2,	UNIT2
UNIT2R,	20
UNIT2W,	20
KBUF1,	BUFF1-1
KBUF2,	BUFF2-1
K7776,	7776
M2703,	-2703
COPFLG,	0
ERR,	ERROR
COMP,	CMPARE
/
GETNUM,	0
	CLA
	TAD	M2
	DCA	KB+1
	TAD	KKB
	DCA	KB+2
	TAD	KB
	KSR			/READ 2 CHARS
	TAD	LF
	TLS			/PRINT LF
	CLA
	TAD	KB+3		/GET CHAR
	RTR			/ROTATE 9-11 INTO 0-2
	RTR
	AND	K7000		/CLEAR OTHER BITS
	JMP	I GETNUM
/
M2,	-2
K7000,	7000
KB,	.+1
	0
	0
	0
	0
KKB,	KB+2
LF,	212
/
	PAGE
CMPARE,	0
	TAD	CKBUF1
	DCA	PTR1		/POINT AT BUFFER #1
	TAD	CKBUF2
	DCA	PTR2		/POINT AT BUFFER #2
	TAD	M201		/LENGTH OF RECORD
	DCA	CTR
CPLOOP,	TAD	I PTR1		/GET A WORD
	CIA			/NEGATE IT
	TAD	I PTR2		/ADD IN CORRESPONDING WORD
	SZA			/SKIP IF EQUAL
	JMP	NOTEQU		/PRINT ERROR
COMP1,	ISZ	PTR1		/INC PTRS
	ISZ	PTR2
	ISZ	CTR		/INC CTR
	JMP	CPLOOP		/LOOP IF NOT DONE
	JMP	I CMPARE	/RETURN
NOTEQU,	CLA
	TAD	KERR1		/PT. AT MESSAGE
	JMS	TYPE
	TAD	I BLOCK		/GET BLOCK #
	JMS	PROCT		/PRINT IT
	TAD	KERR2
	JMS	TYPE
	TAD	CTR		/GET WORD #
	TAD	K202		/CONVERT
	JMS	PROCT		/PRINT IT
	TAD	KERR3
	JMS	TYPE
	TAD	I PTR1
	JMS	PROCT		/PRINT SOURCE WORD
	TAD	KERR4
	JMS	TYPE
	TAD	I PTR2
	JMS	PROCT		/PRINT DEST. WORD
	TAD	CRLF
	JMS	TYPE		/PRINT CR/LF
	JMP	COMP1		/GO CHECK NEXT WORD
/
CKBUF1,	BUFF1
CKBUF2,	BUFF2
PTR1,	0
PTR2,	0
CTR,	0
M201,	-201
K202,	202
BLOCK,	UNIT1+1			/POINTS AT CURRENT BLOCK
KERR1,	ERR1			/POINTERS TO ERROR MESSAGES
KERR2,	ERR2
KERR3,	ERR3
KERR4,	ERR4
CRLF,	ERR5
/
TYPE,	0
	DCA	TPTR		/SAVE PTR
TLOOP,	TAD	I TPTR		/GET A CHAR
	SNA
	JMP	I TYPE		/RETURN IF 0
	TLS			/PRINT THE CHAR
	CLA
	ISZ	TPTR		/POINT AT NEXT CHAR
	JMP	TLOOP		/LOOP UNTIL 0
/
TPTR,	0
/
PROCT,	0
	DCA	PROCT1		/SAVE THE NUMBER
	TAD	PROCT1
	RTL
	RTL
	JMS	DIGIT		/1ST DIGIT
	TAD	PROCT1
	RTR
	RTR
	RTR
	JMS	DIGIT		/2ND DIGIT
	TAD	PROCT1
	RTR
	RAR
	JMS	DIGIT		/3RD DIGIT
	TAD	PROCT1
	JMS	DIGIT		/4TH DIGIT
	JMP	I PROCT		/RETURN
/
DIGIT,	0
	AND	K7		/MASK OUT AC0-AC8
	TAD	K260		/CONVERT TO ASCII
	TLS
	CLA
	JMP	I DIGIT
/
PROCT1,	0
K7,	7
K260,	"0
/
ERROR,	DCA	PROCT1		/SAVE STATUS REG.
	TAD	DTERR
	JMS	TYPE		/PRINT 'DECTAPE ERROR: '
	TAD	PROCT1		/GET ST. REG. B
	JMS	PROCT		/PRINT IT
	TAD	CRLF		/POINT AT CR/LF
	JMS	TYPE		/PRINT IT
	HLT			/DIE
/
DTERR,	ERR6
/
	PAGE
STR1,	-31
	.
	"D
	"E
	"C
	"T
	"A
	"P
	"E
	" 
	"C
	"O
	"P
	"Y
	215
	212
	"F
	"R
	"O
	"M
	" 
	"U
	"N
	"I
	"T
	"?
	" 
STR2,	-11
	.
	"T
	"O
	" 
	"U
	"N
	"I
	"T
	"?
	" 
STR3,	-36
	.
	"C
	"O
	"P
	"Y
	" 
	"(
	"0
	")
	" 
	"O
	"R
	" 
	"C
	"O
	"M
	"P
	"A
	"R
	"E
	" 
	"O
	"N
	"L
	"Y
	" 
	"(
	"1
	")
	"?
	" 
ERR1,	"*
	"*
	" 
	"B
	"L
	"O
	"C
	"K
	" 
	0
ERR2,	",
	" 
	"W
	"O
	"R
	"D
	" 
	0
ERR3,	":
	" 
	"E
	"X
	"P
	"E
	"C
	"T
	"E
	"D
	" 
	0
ERR4,	",
	" 
	"F
	"O
	"U
	"N
	"D
	" 
	0
ERR5,	215
	212
	0
ERR6,	"D
	"E
	"C
	"T
	"A
	"P
	"E
	" 
	"E
	"R
	"R
	"O
	"R
	":
	" 
	0
/
BUFF1=.
BUFF2=.+201
/
$
