	.TITLE	.PCK
/
/  26 JUN 78 (002; PDH) DEBUG
/  26 JUN 78 - PAUL HENDERSON
/
/  ROUTINE TO PACK CHARACTERS, AS THEY ARE SUPPLIED, INTO 5/7
/  ASCII.  IF A LINE TERMINATOR (CR OR ALT MODE) IS ENCOUNTERED
/  THIS FACT IS NOTED IN THE INFORMATION RETURNED.
/
/  *** NOTE ***  THE ROUTINE MUST BE SET UP BY THE APPROPRIATE
/		CALL TO 'PCK.IN', OR DISASTER MAY BE PERPETRATED!
/
/  CALLING SEQUENCES:
/
/  1) TO INITIALIZE -
/
/	LAC	(ADDRESS OF BUFFER TO RECEIVE PACKED CHARACTERS
/	JMS*	PCK.IN
/	(RETURN)
/
/  2) TO PACK A CHARACTER -
/
/	LAC	CHARACTER
/	JMS*	.PCK
/	(RETURN)		/ LINK = 1 IF TERMINATOR SINCE LAST SETUP
/				/ AC = NUMBER OF WORDS PACKED
/				/ MQ = NUMBER OF CHARACTERS PACKED
 
INC=ISZ			/ INCREMENT A POSITIVE COUNTER
IDX=ISZ			/ INDEX A POINTER
SET=ISZ			/ SET A FLAG NON-ZERO
 
	.GLOBL	PCK.IN
 
PCK.IN	XX
	DAC	WPNT		/ SAVE LINE BUFFER ADDRESS IN WORKING POINTER
	LAC	(..1
	DAC	SWING		/ SET UP PACKING ROUTINE
	DZM	TERMIN		/ CLEAR 'LINE TERMINATOR PACKED' FLAG
	DZM	CCOUNT		/ ZERO CHARACTER COUNTER
	DZM	WCOUNT		/ AND WORD COUNTER
	JMP*	PCK.IN
 
WPNT;TERMIN;CCOUNT;WCOUNT
	.EJECT
	.GLOBL	.PCK
 
.PCK	XX
	AND	(177		/ ENSURE 7 BITS ONLY
	SAD	(15
	SKP
	SAD	(175
	SET	TERMIN		/ SET FLAG IF CR OR ALT MODE
	JMP*	SWING		/ PACK THE CHARACTER
 
SWING	..1
	INC	CCOUNT		/ INCREMENT CHARACTER COUNTER
	LAC	TERMIN		/ IF WE HAVE PACKED A LINE TERMINATOR
	SZA!CLL		/ SET LINK
	STL
	LAC	CCOUNT		/ EXIT WITH CHARACTER COUNT IN MQ
	LMQ
	LAC	WCOUNT		/ WORD COUNT IN AC, AND
	JMP*	.PCK		/ LINE TERMINATOR FLAG IN LINK.
 
..1	INC	WCOUNT		/ INCREMENT WORD COUNTER
	ALSS	13
	DAC*	WPNT
	JMS	SWING
 
..2	ALSS	4
	XOR*	WPNT
	DAC*	WPNT
	JMS	SWING
 
..3	CLQ!LRSS 3
	XOR*	WPNT
	DAC*	WPNT
	IDX	WPNT		/ INDEXTO NEXT WORD
	INC	WCOUNT		/ COUNT THE WORD
	LACQ			/ RETRIEVE FINAL 3 BITS OF 3RD CHARACTER
	DAC*	WPNT
	JMS	SWING
 
..4	ALSS	10
	XOR*	WPNT
	DAC*	WPNT
	JMS	SWING
 
..5	CLL!RAL
	XOR*	WPNT
	DAC*	WPNT
	IDX	WPNT		/ INDEX POINTER FOR NEXT PAIR, BUT
	JMS	SWING		/ WORD COUNTER WILL BE INCREMENTED ONLY
	JMP	..1		/ IF ANOTHER CHARACTER IS PACKED.
 
	.END
