; ZCPR contains two minor but inconvenient bugs in the TYPE command.
; 1. Non-printing control codes increment the column count though
;    the cursor column on the console hasn't moved.  Also stray line
;    feeds (<LF> with no <CR>) reset the column count when in fact
;    only a line feed has been printed and the cursor is still
;    (one would hope) in the same column on the console.  In either
;    case all further TAB expansion untill the next <CR> will be
;    incorrect.
; 2. When TYPE pauses (in the page mode) waiting a key from the
;    terminal, the key when pressed will be echoed to the console
;    display before the file resumes typing.  This charecter isn't
;    counted in the column count so not only does it mess up the
;    screen bye echoing, it also causes the tab expansion to be off
;    untill the next <CR>.  This is not a problem if the charecter
;    typed to resume a paused output is a non-printing control code
;    or a <CR>.  (for thoes of us who like <space-bar> for --More--
;    I offer the following patches.)
;
;		Comments to: GRUPP@MIT-MC
;    
;--------------------------------------------------------------
;The following code should be added in section 3 after
;the CONIN: sub-routine.
;
NOECHO:
	PUSH	D	;Get char from CON: with no echo
	MVI	C,6	;Set up for direct CON I/O
	MVI	E,0FFH	;
	CALL	BDOSB
	POP	D
	CPI	0	;Con stat, 0 = no char
	JRZ	NOECHO	;Loop till we get a char
	RET
;
;--------------------------------------------------------------
;In Section 5D (TYPE Command) the code from:
; "OUTPUT CHAR TO CON: OR LST: DEVICE WITH TABULATION" to:
; "CONTINUE PROCESSING" should be replaced with the following;
;
;
; OUTPUT CHAR TO CON: OR LST: DEVICE WITH TABULATION
;
	CPI	CR		;Is char <CR> ?
	JRNZ	NOCR		;No
	MVI	B,0		;Yes... reset tab count.
NOCR:
	CPI	' '		;Is char control code ?
	JRC	NOPRT		;Yes... non printing don't bump count
	INR	B		;else increment char count
NOPRT:
	CPI	TAB		;Tab ?
	JRZ	LTAB		;Yes... expand.
	CALL	LCOUT		;Output char (or control char)
	JR	TYPE2L
LTAB:
	MVI	A,' '		;<SP>
	CALL	LCOUT
	INR	B		;Incr col count
	MOV	A,B
	ANI	7
	JRNZ	LTAB
;
; CONTINUE PROCESSING
;
;--------------------------------------------------------------
;The marked change should be made in the PGFLG: routine. ---------------|
;									|
;									|
PGFLG	EQU	$+1		;POINTER TO IN-THE-CODE BUFFER PGFLG	|
	MVI	A,0		;0 MAY BE CHANGED BY PGFLG EQUATE	|
	CPI	PGDFLG		;PAGE DEFAULT OVERRIDE OPTION WANTED?	|
;									|
	IF	PGDFLT		;IF PAGING IS DEFAULT			|
	JRZ	PGBAK		;  PGDFLG MEANS NO PAGING, PLEASE	|
	ELSE			;IF PAGING NOT DEFAULT			|
	JRNZ	PGBAK		;  PGDFLG MEANS PLEASE PAGINATE		|
	ENDIF								|
;									|
	CALL	NOECHO		;get char to continue... but,	<<<-----|
				;DON'T mess up screen with it.	<<<-----|
	CPI	'C'-'@' 	;^C
	JZ	RSTCPR		;RESTART CPR
;
;
;--------------------------------------------------------------

