.TITLE	TSW
/
/  28 MAR 77 - PAUL HENDERSON
/
	.DEC
PP=7
CD=12		/ BATCH DEVICE
TT=13
	.OCT
IDX=ISZ
/
	.GLOBL	PACK,UNPACK
/
TSW	CAL	HINFPP		/ FIND OUT ABOUT OUTPUT DEVICE
	JMS	WTFOR
	EVPP
	AND	(77
	SAD	(10		/ MAKE SURE IT IS A PUNCH
	SKP
	JMP	NOPUN
	CAL	READCD		/ READ FIRST LINE OF INPUT
/
WAITCD	JMS	WTFOR		/ WAIT FOR LINE TO BE READ
	EVCD
	LAC	LINE
	AND	(7
	SAD	(2
	SKP
	JMP	DONE		/ END OF FILE IF NOT ASCII MODE
	LAC	(LINE+2
	DAC	UNPCK+1
	LAC	(IMAGE
	DAC	UNPCK+2		/ POINTERS FOR PACK & UNPACK
	DAC	PCK+1
UNPCK	JMS*	UNPACK
	0; 0
	SMA
	JMP	UNPCK
	CAL	READCD		/ READ NEXT LINE AS SOON AS BUFFER IS FREE
	.DEC
	LAW	-70
	PAL
	CLX
/
TLOOP	LAC	IMAGE+71,X	/ SEARCH BACKWARDS FOR NON-SPACE,
	.OCT			/ BEGINNING IN COLUMN 71 (DELETE SEQUENCE #'S)
	SAD	(40		/ SPACE?
	SKP
	SKP			/ NOT A SPACE.  FINISH OFF LINE
	AXS	-1
	SKP
	JMP	TLOOP		/ SPACE; MORE TO CHECK.
/
	LAW	15
	.DEC
	DAC	IMAGE+72,X	/ APPEND CARRIAGE RETURN IN PROPER PLACE
	.OCT
	LAC	(OLINE+2
	DAC	PCK+2
	JMS	WTFOR		/ WAIT FOR PUNCH
	EVPP
PCK	JMS*	PACK
	0; 0
	SMA
	JMP	PCK
	LAC	(OLINE
	TCA
	TAD	PCK+2
	ALSS	10
	XOR	(2		/ GENERATE PROPER HEADER WORD
	DAC	OLINE
	CAL	WRPP		/ PUNCH OUT MODIFIED LINE
	JMP	WAITCD
/
/  PROGRAM COMES HERE WHEN END OF INPUT FILE IS DETECTED.
/
DONE	JMS	WTFOR		/ WAIT FOR LAST PUNCH BUFFER
	EVPP
	CAL	CLOSE		/ CLOSE PUNCH TO GIVE SOME BLANK LEADER
	JMS	WTFOR
	EVPP
	CAL	(10		/ EXIT WHEN JOB HAS FINISHED
/
	.EJECT
/  SUBROUTINE TO WAIT FOR SPECIFIED EVENT VARIABLE, AND ISSUE ERROR
/  MESSAGE WHEN APPROPRIATE.
/
WTFOR	XX
	LAC*	WTFOR
	IDX	WTFOR		/ STEP PAST ARGUMENT
	DAC	WAITFR+1	/ INSERT ADDRESS INTO CPB
	CAL	WAITFR
	LAC*	WAITFR+1	/ GET EVENT VARIABLE
	SMA
	JMP*	WTFOR		/ GOOD EV.  RETURN.
/
IOERR	TCA			/ MAKE BAD EV POSITIVE
	CLQ!LRSS 11		/ SHIFT BAD EV TO UPPER HALF OF MQ
	LAC	(6		/ OCTAL TO ASCII CONVERSION
	LLSS	3		/ SHIFT IN FIRST DIGIT
	ALSS	4
	XOR	(6		/ CONVERSION FOR SECOND DIGIT
	LLSS	3
	ALSS	4
	XOR	(6		/ CONVERSION FOR 3RD DIGIT
	DAC	ERRB		/ PUT IN LINE BUFFER
	LACQ
	XOR	CR		/ APPEND CARRIAGE RETURN
	DAC	ERRB+1
	CAL	WRERR
EXIT	CAL	WTFRTT
	CAL	(10		/ EXIT AFTER ERROR ANNOUNCEMENT
/
/  COME HERE WHEN OUTPUT DEVICE IS NOT PUNCH TO ISSUE TERMINAL ERROR.
/
NOPUN	CAL	WRNOPP
	JMP	EXIT
/
	.EJECT
/  CPB'S, VARIABLES, AND LINE BUFFERS
/
HINFPP	3600;	EVPP;	PP
READCD	2600;	EVCD;	CD; 2; LINE; 120
WRPP	2700;	EVPP;	PP; 2; OLINE
WAITFR	20;	0
WTFRTT	20;	EVTT
CLOSE	3400;	EVPP;	PP
WRERR	2700;	EVTT;	TT; 2; ERRL
WRNOPP	2700;	EVTT;	TT; 2; NOPP
EVCD;EVPP 1
LINE	.BLOCK	42
	.ASCII	<0><0><0><0><15> ;CR=.-1
IMAGE	.BLOCK	125
OLINE	.BLOCK	40
/
NOPP	NP-.*400+2; 0; .ASCII 'OUTPUT DEVICE NOT PAPER PUNCH'<15> ;NP=.
ERRL	EL-.*400+2;EVTT; .ASCII '*** TSW I/O ERROR '
ERRB	.BLOCK	2;EL=.
	.END	TSW