	.TITLE	DISPLAY VFE formatted-output routines

	.ENABLE	SUPPRESSION

	.LIBRARY	'VFELIB'

	.PSECT	CODE,EXE,NOWRT
	.PAGE
	.SBTTL	ASCII - Display in ASCII format
ASCII::
	BSBW	SETUP
	BLBS	R0,100$
	BRW	900$
100$:
	MOVL	#8,R1
	BSBW	ALIGN
	MOVB	#^A/ /,R9
200$:
	MOVL	PARA2,R3
	BSBW	NUMOUT
	ADDL2	LC6496,PARA2
	MOVL	LC0812,R8
	MOVB	#^A/ /,(R6)+
	BRB	350$
300$:
	MOVB	#^A/|/,(R6)+
350$:
	MOVL	#8,R7
400$:
	SOBGEQ	R10,600$
	MOVB	(R4)+,R9
	CMPB	R9,#32
	BLSS	500$
	CMPB	R9,#127
	BNEQ	600$
500$:
	MOVB	#^A/./,R9
600$:
	MOVB	R9,(R6)+
	SOBGTR	R5,700$
	BRB	800$
700$:
	SOBGTR	R7,400$
	SOBGTR	R8,300$
800$:
	SUBL2	#OUT_BUFF,R6
	OUTPUT	R6,OUT_BUFF
	CMPB	STOP,#0
	BNEQ	900$
	ADDL2	#1,R5
	SOBGTR	R5,870$
	BSBW	COMPNXT
	BLBC	R0,900$
870$:
	BRW	200$
900$:
	RSB
	.PAGE
	.SBTTL	EBCDIC - Display in EBCDIC format
EBCDIC::
	BSBW	SETUP
	BLBS	R0,100$
	BRW	900$
100$:
	MOVL	#8,R1
	BSBW	ALIGN
	MOVL	#^X40,R9
200$:
	MOVL	PARA2,R3
	BSBW	NUMOUT
	ADDL2	LC6496,PARA2
	MOVL	LC0812,R8
	MOVB	#^A/ /,(R6)+
	BRB	350$
300$:
	MOVB	#^A/|/,(R6)+
350$:
	MOVL	#8,R7
400$:
	SOBGEQ	R10,600$
	MOVZBL	(R4)+,R9
600$:
	MOVB	EBCTBL[R9],(R6)+
	SOBGTR	R5,700$
	BRB	800$
700$:
	SOBGTR	R7,400$
	SOBGTR	R8,300$
800$:
	SUBL2	#OUT_BUFF,R6
	OUTPUT	R6,OUT_BUFF
	CMPB	STOP,#0
	BNEQ	900$
	ADDL2	#1,R5
	SOBGTR	R5,870$
	BSBW	COMPNXT
	BLBC	R0,900$
870$:
	BRW	200$
900$:
	RSB
	.PAGE
	.SBTTL	IBYTE - Display in integer byte format
IBYTE::
	BSBW	SETUP
	BLBS	R0,100$
	BRW	900$
100$:
	MOVL	PARA1,PARA2
200$:
	MOVL	PARA2,R3
	BSBW	NUMOUT
	ADDL2	LC1624,PARA2
	MOVL	LC1624,R7
	MOVB	#^A/ /,(R6)+
300$:
	CLRQ	R9
	MOVB	#^A/ /,R11
	CVTBL	(R4)+,R8
	BGEQ	400$
	TSTB	SGNFLG
	BNEQ	360$
	MOVZBL	R8,R8
	BRW	400$
360$:
	MOVB	#^A/-/,R11
	MNEGL	R8,R8
400$:
	INCL	R10
	EDIV	#10,R8,R8,-(SP)
	BNEQ	400$
	SUBL3	R10,#3,R9
	BLEQ	550$
500$:
	MOVB	#^A/ /,(R6)+
	SOBGTR	R9,500$
550$:
	MOVB	R11,(R6)+
600$:
	ADDL3	#^A/0/,(SP)+,R3
	MOVB	R3,(R6)+
	SOBGTR	R10,600$
	SOBGTR	R5,700$
	BRB	800$
700$:
	SOBGTR	R7,300$
800$:
	SUBL2	#OUT_BUFF,R6
	OUTPUT	R6,OUT_BUFF
	CMPB	STOP,#0
	BNEQ	900$
	ADDL2	#1,R5
	SOBGTR	R5,870$
	BSBW	COMPNXT
	BLBC	R0,900$
870$:
	BRW	200$
900$:
	RSB
	.PAGE
	.SBTTL	IWLDSP - Display in int word/lword fmt
IWLDSP::
	BSBW	SETUP
	BLBS	R0,50$
	BRW	980$
50$:
	MOVL	#SS$_NORMAL,SVSTAT
	TSTB	RMSFLG
	BEQL	100$
	CMPL	R5,DSPCNT
	BGEQ	100$
	BSBW	INVPARA
	BRW	980$
100$:
	MOVL	PARA1,PARA2
	CLRL	R6
	EDIV	DSPCNT,R5,R5,R6
	TSTB	RMSFLG
	BEQL	110$
	ADDL2	R6,REM
	BRB	200$
110$:
	MOVL	R6,OVERFL
	BEQL	120$
	INCL	R5
	SUBL3	R6,DSPCNT,OVERFL
120$:
	TSTL	REM
	BLEQ	200$
	CLRL	NXTBCT
	MOVL	SVSTAT,R0
	BLBC	R0,140$
	DIVL3	#512,CURBCT,R1
	ADDL2	CURBLK,R1
	MULL3	#512,BUFFCT,R2
	BSBW	READINT
	MOVL	R0,SVSTAT
	BLBS	R0,200$
140$:
	TSTL	OVERFL
	BLEQ	200$
	SOBGTR	R5,200$
	BRW	920$
200$:
	MOVL	PARA2,R3
	BSBW	NUMOUT
	ADDL2	WLINC,PARA2		; 16 or 32 dep on width
	MOVL	WLCNT,R7		; WLPARM*2 if wide display
300$:
	CLRQ	R9
	MOVB	#^A/ /,R11
	CMPL	WLPARM,#4
	BEQL	340$
	CVTWL	(R4)+,R8
	BGEQ	400$
	TSTB	SGNFLG
	BNEQ	360$
	MOVZWL	R8,R8
	BRB	400$
340$:
	MOVL	(R4)+,R8
	BGEQ	400$
	TSTB	SGNFLG
	BEQL	400$
360$:
	MOVB	#^A/-/,R11
	MNEGL	R8,R8
400$:
	INCL	R10
	EDIV	#10,R8,R8,-(SP)
	BNEQ	400$
	SUBL3	R10,WLPOSN,R9
500$:
	MOVB	#^A/ /,(R6)+
	SOBGTR	R9,500$
	MOVB	R11,(R6)+
600$:
	ADDL3	#^A/0/,(SP)+,R3
	MOVB	R3,(R6)+
	SOBGTR	R10,600$
	SOBGTR	R5,700$
	BRB	800$
700$:
	SOBGTR	R7,300$
800$:
	SUBL2	#OUT_BUFF,R6
	OUTPUT	R6,OUT_BUFF
	TSTB	STOP
	BEQL	810$
	BRW	900$
810$:
	ADDL2	#1,R5
	SOBGTR	R5,815$
	BRB	820$
815$:
	BRW	200$
820$:
	TSTB	RMSFLG
	BEQL	830$
	BSBW	COMPNXT
	BLBC	R0,825$
	BRW	100$
825$:
	BRW	980$
830$:
	MOVL	SVSTAT,R0
	BLBS	R0,840$
	TSTB	TAPFLG
	BNEQ	835$
	CMPL	NXTBCT,#512
	BGEQ	840$
835$:
	BRW	920$
840$:
	CMPL	REM,OVERFL
	BGTR	845$
	BRW	900$
845$:
	MOVL	CURBCT,R6
	MOVC3	NXTBCT,BUFF(R6),BUFF
	MOVL	NXTBCT,CURBCT
	MOVL	#1,R1
	TSTB	TAPFLG
	BNEQ	850$
	DIVL3	#512,R6,R1
850$:
	ADDL2	R1,CURBLK
	BSBW	BLOCK
	CLRL	LPTR
	MNEGL	#1,RECPTR
	MOVL	#1,R0
	MOVL	OVERFL,PARA1
	MOVAL	BUFF,R4
	ADDL2	PARA1,R4
	CMPL	REM,CURBCT
	BGTR	860$
	SUBL3	PARA1,REM,R5
	CLRL	REM
	BRB	880$
860$:
	SUBL2	CURBCT,REM
	SUBL3	PARA1,CURBCT,R5
880$:
	BRW	100$
900$:
	TSTL	REM
	BLEQ	980$
	BRB	950$
920$:
	TSTB	TAPFLG
	BEQL	930$
	CMPL	R0,#SS$_ENDOFFILE
	BEQL	940$
930$:
	BSBW	ERROUT
	BRB	950$
940$:
	OUTMSGC	EOF
950$:
	BSBW	BACKSPACE
980$:
	RSB
	.PAGE
	.SBTTL	HEX - Display in hexadecimal format
HEX::
	BSBW	SETUP
	BLBS	R0,100$
	BRW	900$
100$:
	MOVL	#4,R1
	BSBW	ALIGN
200$:
	MOVL	PARA2,R3
	BSBW	NUMOUT
	ADDL2	LC3248,PARA2
	MOVL	LC0812,R8
300$:
	MOVL	#4,R7
	MOVB	#^A/ /,(R6)+
400$:
	SOBGEQ	R10,500$
	EXTZV	#4,#4,(R4),R9
	MOVB	HEXD[R9],(R6)+
	EXTZV	#0,#4,(R4)+,R9
	MOVB	HEXD[R9],(R6)+
	BRB	600$
500$:
	MOVW	#^A/  /,(R6)+
600$:
	SOBGTR	R5,700$
	BRB	800$
700$:
	SOBGTR	R7,400$
	SOBGTR	R8,300$
800$:
	SUBL2	#OUT_BUFF,R6
	OUTPUT	R6,OUT_BUFF
	CMPB	STOP,#0
	BNEQ	900$
	ADDL2	#1,R5
	SOBGTR	R5,870$
	BSBW	COMPNXT
	BLBC	R0,900$
870$:
	BRW	200$
900$:
	RSB
	.PAGE
	.SBTTL	BINARY - Display in binary format
BINARY::
	BSBW	SETUP
	BLBS	R0,100$
	BRW	900$
100$:
	MOVL	PARA1,PARA2
200$:
	MOVL	PARA2,R3
	BSBW	NUMOUT
	ADDL2	LC0812,PARA2
	MOVL	LC0812,R8
300$:
	MOVL	#7,R7
	MOVB	(R4)+,R10
	MOVB	#^A/ /,(R6)+
400$:
	EXTZV	R7,#1,R10,R9
	ADDB3	#^A/0/,R9,(R6)+
	SOBGEQ	R7,400$
	SOBGTR	R5,700$
	BRB	800$
700$:
	SOBGTR	R8,300$
800$:
	SUBL2	#OUT_BUFF,R6
	OUTPUT	R6,OUT_BUFF
	CMPB	STOP,#0
	BNEQ	900$
	ADDL2	#1,R5
	SOBGTR	R5,870$
	BSBW	COMPNXT
	BLBC	R0,900$
870$:
	BRW	200$
900$:
	RSB
	.PAGE
	.SBTTL	MULTI - Display combination alpha/hex
MULTI::
	BSBW	SETUP
	BLBS	R0,100$
	BRW	900$
100$:
	MOVL	#4,R1
	BSBW	ALIGN
200$:
	MOVL	PARA2,R3
	BSBW	NUMOUT
	ADDL2	LC3248,PARA2
	MOVQ	R4,R4R5S
	MOVL	R10,R9R10S
	MOVL	#1,R11
	BRB	280$
250$:
	MOVC3	#5,SP5,OUT_BUFF
	MOVAL	OUT_BUFF+5,R6
	MOVQ	R4R5S,R4
	MOVL	R9R10S,R10
280$:
	MOVL	LC0812,R8
300$:
	MOVL	#4,R7
	MOVB	#^A/ /,(R6)+
400$:
	SOBGEQ	R10,500$
	BLBC	R11,450$
	MOVB	#^A/ /,(R6)+
	MOVB	(R4)+,R9
	TSTB	EBCFLG
	BNEQ	440$
	CMPB	R9,#32
	BLSS	420$
	CMPB	R9,#127
	BNEQ	430$
420$:
	MOVB	#^A/./,R9
430$:
	MOVB	R9,(R6)+
	BRB	600$
440$:
	MOVB	EBCTBL[R9],(R6)+
	BRB	600$
450$:
	EXTZV	#4,#4,(R4),R9
	MOVB	HEXD[R9],(R6)+
	EXTZV	#0,#4,(R4)+,R9
	MOVB	HEXD[R9],(R6)+
	BRB	600$
500$:
	MOVW	#^A/  /,(R6)+
600$:
	SOBGTR	R5,700$
	BRB	800$
700$:
	SOBGTR	R7,400$
	SOBGTR	R8,300$
800$:
	SUBL2	#OUT_BUFF,R6
	OUTPUT	R6,OUT_BUFF
	SOBGEQ	R11,830$
	BRB	850$
830$:
	BRW	250$
850$:
	TSTB	STOP
	BNEQ	900$
	INCL	R5
	SOBGTR	R5,870$
	BSBW	COMPNXT
	BLBC	R0,900$
870$:
	BRW	200$
900$:
	RSB
	.PAGE
	.SBTTL	DATE - Display in system date format
DATE::
	BSBW	SETUP
	BLBS	R0,100$
	BRW	900$
100$:
	TSTL	REM
	BLEQ	110$
	BSBW	INVPARA
	BRW	900$
110$:
	DIVL2	DSPCNT,R5
120$:
	MOVL	PARA1,R3
	BSBW	NUMOUT
	ADDL2	#8,PARA1
	MOVB	#^A/ /,(R6)+
	TSTL	4(R4)
	BGTR	200$
	BLSS	150$
	TSTL	(R4)
	BNEQ	200$
150$:
	PUSHR	#^M<R4,R5>
	MOVC3	#IVTL,IVT,(R6)
	POPR	#^M<R4,R5>
	ADDL2	#IVTL,R6
	BRB	300$
200$:
	MOVL	#30,OUTDSCV
	MOVL	R6,OUTDSCV+4
	$ASCTIM_S  TIMLEN=OUTDSCV,TIMBUF=OUTDSCV,TIMADR=(R4)
	BLBS	R0,250$
	BSBW	ERROUT
	BRW	900$
250$:
	CVTWL	OUTDSCV,R1
	ADDL2	R1,R6
300$:
	ADDL2	#8,R4
	SUBL2	#OUT_BUFF,R6
	OUTPUT	R6,OUT_BUFF
	TSTB	STOP
	BNEQ	900$
	SOBGTR	R5,800$
	BRB	900$
800$:
	BRW	120$
900$:
	RSB
	.PAGE
	.SBTTL	RECORD - Display sequential records
RECORD::
	MOVB	HEXFLG,HEXSAV
	TSTB	RMSFLG
	BEQL	40$
	CLRB	HEXFLG
	BRW	110$
40$:
	TSTB	SEQFLG
	BEQL	50$
	BSBW	ZEROBLK
	BLBS	R0,100$
50$:
	OUTMSG	#NSFL,NSF
	BRW	900$
100$:
	ADDL3	#1,CURBCT,EOFBYTE
	SUBL3	CURBLK,EFBLK,R1
	BLSS	104$
	MULL2	#512,R1
	CMPL	R1,CURBCT
	BGEQ	106$
	ADDL3	R1,FFBYTE,EOFBYTE
	BGTR	106$
104$:
	OUTMSGC	EOF
	BRW	900$
106$:
	CMPL	PARA1,CURBCT
	BGEQ	112$
110$:
	TSTL	PARA2
	BNEQ	114$
112$:
	BSBW	INVPARA
	MNEGL	#1,RECPTR
	BRW	900$
114$:
	ADDL3	RSIZE,VFCSIZE,MAXREC
	MOVL	#132,RECWID
	TSTW	TERMON
	BEQL	115$
	MOVL	TERMWD,RECWID
115$:
	TSTL	PARA1
	BLSS	116$
	BRW	180$
116$:
	TSTL	PARA2
	BGTR	118$
	MOVL	RECCNT,PARA2
118$:
	MOVL	RECPTR,PARA1
	TSTB	RMSFLG
	BEQL	120$
	BRW	180$
120$:
	TSTL	PARA1
	BLSS	122$
	CMPL	RECPTR,CURBCT
	BLEQ	126$
122$:
	TSTB	VFLAG
	BNEQ	128$
	CLRL	PARA1
	TSTB	NOSPNFLG
	BNEQ	126$
	SUBL3	#1,CURBLK,R2
	MULL2	#512,R2
	CLRL	R3
	MOVL	MAXREC,R1
	BLBC	R1,124$
	INCL	R1
124$:
	EDIV	R1,R2,R0,R3
	TSTL	R3
	BEQL	126$
	SUBL3	R3,MAXREC,PARA1
	CMPL	PARA1,CURBCT
	BLSS	126$
	BRW	160$
126$:
	BRW	180$
128$:
	CLRL	R4
	CMPL	CURBLK,#1
	BGTR	129$
	BRW	175$
129$:
	SUBL3	#2,EOFBYTE,R2
	DIVL3	#2,EOFBYTE,R3
130$:
	MOVZWL	BUFF(R4),R7
	MOVL	R4,R8
140$:
	CMPL	R7,MAXREC
	BGTR	150$
	ADDL2	#2,R7
	BLBC	R7,145$
	INCL	R7
145$:
	ADDL2	R7,R8
	CMPL	R8,R2
	BGEQ	170$
	MOVZWL	BUFF(R8),R7
	CMPL	R7,#^XFFFF
	BNEQ	140$
	BRB	170$
150$:
	ADDL2	#2,R4
	SOBGTR	R3,130$
160$:
	OUTMSG	#CNDL,CNDRSM
	BRW	900$
170$:
	MULL3	#7,MAXREC,R1
	DIVL2	#2,R1
	CMPL	R1,CURBCT
	BLEQ	175$
	OUTMSG	#LRLL,LRLMSG
175$:
	MOVL	R4,PARA1
180$:
	ADDL3	#BUFF,PARA1,R4
	SUBL3	PARA1,CURBCT,R5
	MOVL	PARA2,R8
	BGTR	185$
	MOVL	#1,R8
185$:
	MOVL	R8,RECCNT
	CLRL	HDRCNT
	CLRL	R2
	TSTB	HDRFLG
	BEQL	190$
	MOVL	VFCSIZE,R2
	CMPL	R2,#8
	BLEQ	190$
	MOVL	#8,R2
190$:
	MOVL	R2,VFCOUT
	SUBL3	#1,R2,VFCOUTM1
	SUBL3	R2,VFCSIZE,VFCSKIP
	TSTB	RMSFLG
	BNEQ	192$
	BRW	250$
192$:
	TSTL	PARA1
	BGTR	195$
	MOVL	CURBLK,PARA1
195$:
	CMPL	PARA1,CURBLK
	BEQL	230$
	SUBL3	#1,PARA1,R1
	CMPL	R1,CURBLK
	BEQL	210$
	BSBW	READ
	BLBS	R0,230$
	BRW	900$
;
;	Begin processing the next record here
;
200$:
	TSTB	RMSFLG
	BEQL	250$
210$:
	BSBW	NEXTRMS
	BLBS	R0,230$
	CMPL	R0,#RMS$_EOF
	BNEQ	220$
	OUTMSGC	EOF
	ADDL3	#1,CURBLK,RECPTR
220$:
	BRW	900$
230$:
	MOVAL	BUFF,R4
	MOVL	CURBCT,R5
	ADDL3	#1,CURBLK,RECPTR
	MOVL	CURBLK,R3
	BRB	300$
250$:
	BLBC	R4,260$
	INCL	R4
	DECL	R5
260$:
	TSTL	R5
	BGTR	280$
275$:
	BSBW	RECNXT
	BLBS	R0,280$
	BRW	900$
280$:
	SUBL3	#BUFF,R4,R3
	MOVL	R3,RECPTR
	CMPL	R3,EOFBYTE
	BLSS	300$
	OUTMSGC	EOF
	BRW	900$
300$:
	MOVAL	OUT_BUFF,R6
	TSTB	HDRFLG
	BEQL	315$
	MOVL	#6,HDRCNT
	BSBW	NUMOUT
315$:
	MOVL	VFCOUT,R10
	TSTB	RMSFLG
	BEQL	320$
	MOVL	CURBCT,R7
	BRW	400$
320$:
	TSTB	VFLAG
	BNEQ	330$
	MOVL	MAXREC,R7
	BRW	400$
330$:
	SUBL2	#2,R5
	MOVZWL	(R4)+,R7
	CMPL	R7,#^XFFFF
	BNEQ	350$
	TSTB	NOSPNFLG
	BEQL	340$
	CMPL	CURBLK,EFBLK
	BGEQ	340$
	CLRL	R5
	BRW	275$
340$:
	MOVC3	#7,EOF,(R6)
	ADDL2	#7,R6
	BRB	380$
350$:
	CMPL	R7,MAXREC
	BLEQ	400$
	MNEGL	#1,RECPTR
	MOVL	#80,OUTDSCV
	MOVL	R6,OUTDSCV+4
	$FAO_S	CTRSTR=MAXMSG,OUTLEN=OUTDSCV,OUTBUF=OUTDSCV,-
		P1=R7,P2=RSIZE
	CVTWL	OUTDSCV,R3
	ADDL2	R3,R6
380$:
	SUBL2	#OUT_BUFF,R6
	OUTMSG	R6,OUT_BUFF
	BRW	900$
400$:
	SUBL3	HDRCNT,RECWID,R9
	TSTB	HDRFLG
	BNEQ	410$
	TSTB	RMSFLG
	BNEQ	420$
	ADDL2	VFCSIZE,R4
	SUBL2	VFCSIZE,R5
	SUBL2	VFCSIZE,R7
	BLEQ	420$
	TSTL	R5
	BGTR	420$
	BRW	610$
410$:
	MOVB	#^A/ /,(R6)+
420$:
	TSTB	STOP
	BEQL	450$
	BRW	900$
450$:
	TSTL	R7
	BLEQ	460$
	TSTL	R5
	BGTR	480$
	TSTB	HDRFLG
	BNEQ	460$
	BSBW	RECNXT
	BLBS	R0,480$
	BRW	900$
460$:
	BRW	600$
480$:
	DECL	R7
	DECL	R5
	SOBGEQ	R10,482$
	BRW	490$
482$:
	CMPL	R10,VFCOUTM1
	BLSS	485$
	DECL	R6
	MOVB	#^A/</,(R6)+
485$:
	EXTZV	#4,#4,(R4),R3
	MOVB	HEXD[R3],(R6)+
	DECL	R9
	EXTZV	#0,#4,(R4)+,R3
	MOVB	HEXD[R3],(R6)+
	TSTL	R10
	BGTR	488$
	MOVB	#^A/>/,(R6)+
	MOVB	#^A/ /,(R6)+
	SUBL3	#OUT_BUFF,R6,HDRCNT
	SUBL2	#2,R9
	ADDL2	VFCSKIP,R4
	SUBL2	VFCSKIP,R5
	SUBL2	VFCSKIP,R7
488$:
	BRB	580$
490$:
	MOVZBL	(R4)+,R3
	TSTB	EBCFLG
	BEQL	491$
	MOVB	EBCTBL[R3],(R6)+
	BRB	580$
491$:
	TSTB	HDRFLG
	BNEQ	495$
	CMPB	R3,#^X09
	BNEQ	495$
	SUBL3	#OUT_BUFF,R6,R2
	CLRL	R3
	EDIV	#8,R2,R0,R1
	SUBL3	R1,#8,R3
492$:
	MOVB	#^A/ /,(R6)+
	SOBGTR	R3,493$
	BRB	580$
493$:
	SOBGTR	R9,492$
	BRB	600$
495$:
	CMPB	R3,#32
	BLSS	500$
	CMPB	R3,#127
	BNEQ	550$
500$:
	MOVB	#^A/./,R3
550$:
	MOVB	R3,(R6)+
580$:
	SOBGTR	R9,590$
	BRB	600$
590$:
	BRW	450$
600$:
	SUBL2	#OUT_BUFF,R6
	OUTPUT	R6,OUT_BUFF
	TSTL	R7
	BLEQ	750$
	TSTL	R5
	BGTR	700$
610$:
	BSBW	RECNXT
	BLBS	R0,700$
	BRB	900$
700$:
	TSTL	R9
	BGTR	720$
	SUBL3	HDRCNT,RECWID,R9
720$:
	SUBL3	R9,RECWID,R6
	BEQL	740$
	PUSHR	#^M<R4,R5>
	MOVC5	#0,OUT_BUFF,#^A/ /,R6,OUT_BUFF
	POPR	#^M<R4,R5>
740$:
	ADDL2	#OUT_BUFF,R6
	BRW	420$
750$:
	SOBGTR	R8,800$
	TSTB	RMSFLG
	BNEQ	900$
	SUBL3	#BUFF,R4,RECPTR
	BRB	900$
800$:
	BRW	200$
900$:
	MOVB	HEXSAV,HEXFLG
	RSB

RECNXT:
	DIVL3	#512,CURBCT,R1
	ADDL2	CURBLK,R1
	CMPL	R1,EFBLK
	BGTR	100$
	BLSS	200$
	TSTL	FFBYTE
	BGTR	200$
100$:
	OUTMSGC	EOF
	CLRL	R0
	BRB	900$
200$:
	MOVL	#1,PARA1
	BSBW	NEXT
	BLBC	R0,900$
	TSTB	HDRFLG
	BEQL	350$
	BSBW	BLOCK
350$:
	ADDL3	#1,CURBCT,EOFBYTE
	SUBL3	CURBLK,EFBLK,R1
	MULL2	#512,R1
	CMPL	R1,CURBCT
	BGEQ	400$
	ADDL3	R1,FFBYTE,EOFBYTE
400$:
	SUBL3	R5,#BUFF,R4
	ADDL2	CURBCT,R5
900$:
	RSB
	.PAGE
	.SBTTL	DIFF - Display differences with paste buffer
DIFF::
	TSTL	CURBCT
	BGTR	20$
	OUTMSGC	CBEMPTY
	BRW	900$
20$:
	TSTL	PBBCT
	BGTR	30$
	OUTMSGC	PBEMPTY
	BRW	900$
30$:
	BSBW	SETUP
	BLBS	R0,50$
	BRW	900$
50$:
	TSTL	REM
	BLEQ	100$
	BSBW	INVPARA
	BRW	900$
100$:
	MOVAL	PBUFF,R9
	CMPL	R5,PBBCT
	BLEQ	120$
	MOVL	#80,OUTDSC
	$FAO_S	CTRSTR=PBTRUNC,OUTLEN=OUTDSC,OUTBUF=OUTDSC,-
		P1=PBBCT
	OUTMSG	OUTDSC,OUT_BUFF
	MOVL	PBBCT,R5
120$:
	CMPC3	R5,(R4),(R9)
	CMPL	R0,#0
	BGTR	150$
	OUTMSG	#NDIFFL,NDIFF
	BRW	900$
150$:
	MOVL	#4,R1
	BSBW	ALIGN
200$:
	MOVB	#0,FLAG
	MOVL	PARA2,R3
	BSBW	NUMOUT
	ADDL2	LC3248,PARA2
	MOVQ	R4,R4R5S
	MOVQ	R9,R9R10S
	MOVL	#1,R11
	BRB	280$
250$:
	MOVC3	#5,PBOUT,OUT_BUFF
	MOVAL	OUT_BUFF+5,R6
	MOVQ	R4R5S,R4
	MOVQ	R9R10S,R9
280$:
	MOVL	LC0812,R8
300$:
	MOVL	#4,R7
	MOVB	#^A/ /,(R6)+
400$:
	SOBGEQ	R10,500$
	MOVL	R4,R3
	CMPB	(R4)+,(R9)+
	BNEQ	450$
	BLBS	R11,480$
	MOVW	#^A/../,(R6)+
	BRB	600$
450$:
	MOVB	#1,FLAG
	BLBS	R11,480$
	SUBL3	#1,R9,R3
480$:
	EXTZV	#4,#4,(R3),R1
	MOVB	HEXD[R1],(R6)+
	EXTZV	#0,#4,(R3),R1
	MOVB	HEXD[R1],(R6)+
	BRB	600$
500$:
	MOVW	#^A/  /,(R6)+
600$:
	SOBGTR	R5,700$
	BRB	800$
700$:
	SOBGTR	R7,400$
	SOBGTR	R8,300$
800$:
	CMPB	#0,FLAG
	BEQL	850$
	BLBS	R11,810$
	MOVB	#LF,(R6)+
810$:
	SUBL2	#OUT_BUFF,R6
	OUTPUT	R6,OUT_BUFF
	SOBGEQ	R11,830$
	BRB	850$
830$:
	BRW	250$
850$:
	CMPB	STOP,#0
	BNEQ	900$
	ADDL2	#1,R5
	SOBGTR	R5,870$
	BRB	900$
870$:
	BRW	200$
900$:
	RSB
	.PAGE
	.SBTTL	Miscellaneous utility routines

SETUP:
	TSTB	DPBFLG
	BNEQ	40$
	BSBW	ZEROBLK
	BLBS	R0,20$
	BRW	900$
20$:
	MOVL	CURBCT,DSPBCT
	ADDL3	#1,PARA2,R1
	BNEQ	50$
	DIVL3	DSPCNT,CURBCT,PARA2
	BRB	50$
40$:
	MOVL	PBBCT,DSPBCT
	BGTR	50$
	OUTMSGC	PBEMPTY
	CLRL	R0
	BRW	900$
50$:
	CMPL	PARA1,DSPBCT
	BGEQU	100$
	TSTL	PARA2
	BGTR	200$
100$:
	BSBW	INVPARA
	BRW	900$
200$:
	MOVAL	LC80,R4
	MOVL	#16,WLINC
	MOVL	WLPARM,WLCNT
	CMPL	TERMWD,#132
	BGEQ	250$
	TSTW	TERMON
	BNEQ	300$
250$:
	MULL2	#2,WLINC
	MULL2	#2,WLCNT
	MOVAL	LC132,R4
300$:
	MOVQ	(R4),LCBEGN
	MOVQ	8(R4),LCBEGN+8
	MULL2	DSPCNT,PARA2
	ADDL3	PARA1,PARA2,R3
	SUBL3	DSPBCT,R3,REM
	BLEQ	400$
	MOVL	DSPBCT,R3
400$:
	ADDL3	#BUFF,PARA1,R4
	TSTB	DPBFLG
	BNEQ	420$
	TSTB	NRFLAG
	BEQL	500$
	TSTL	REM
	BGTR	440$
	BRB	500$
420$:
	TSTL	REM
	BLEQ	450$
440$:
	BSBW	INVPARA
	BRB	900$
450$:
	OUTPUT	#PBCL,PBCON
	ADDL3	#PBUFF,PARA1,R4
500$:
	SUBL3	PARA1,R3,R5
	MOVL	#1,R0
900$:
	RSB

ALIGN:
	DIVL3	R1,PARA1,R3
	MULL2	R1,R3
	MOVL	R3,PARA2
	SUBL3	R3,PARA1,R10
	ADDL2	R10,R5
	RSB

COMPNXT:
	TSTL	REM
	BLEQ	120$
100$:
	MOVL	#1,PARA1
	BSBW	NEXT
	BLBC	R0,900$
	CMPL	CURBCT,DSPCNT
	BGEQ	140$
	TSTB	STOP
	BNEQ	120$
	TSTB	RMSFLG
	BNEQ	100$
120$:
	CLRL	R0
	BRB	900$
140$:
	BSBW	BLOCK
	MOVAL	BUFF,R4
	CLRL	PARA1
	CLRL	PARA2
	CLRL	R10
	CMPL	REM,CURBCT
	BGTR	200$
	MOVL	REM,R5
	CLRL	REM
	CMPL	R5,DSPCNT
	BGEQ	900$
	MOVL	DSPCNT,R5
	BRB	900$
200$:
	SUBL2	CURBCT,REM
	MOVL	CURBCT,R5
900$:
	RSB
	.PAGE
NUMOUT:
	PUSHR	#^M<R4,R5>
	CLRQ	R4
	MOVAL	OUT_BUFF,R6
	TSTB	TAPFLG
	BNEQ	100$
	TSTB	DPBFLG
	BNEQ	100$
	CMPL	CURBCT,#1000
	BGEQ	100$
	CMPL	R3,#1000
	BLSS	120$
100$:
	INCL	R5
120$:
	TSTB	HEXFLG
	BNEQ	200$
	BLBC	R5,150$
	EDIV	#10000,R3,R2,R3
	EDIV	#1000,R3,R2,R3
	ADDB3	R2,#^A/0/,(R6)+
150$:
	EDIV	#100,R3,R2,R3
	ADDB3	R2,#^A/0/,(R6)+
	EDIV	#10,R3,R2,R3
	ADDB3	R2,#^A/0/,(R6)+
	ADDB3	R3,#^A/0/,(R6)+
	BRB	300$
200$:
	BLBC	R5,250$
	EXTZV	#12,#4,R3,R2
	MOVB	HEXD[R2],(R6)+
250$:
	EXTZV	#8,#4,R3,R2
	MOVB	HEXD[R2],(R6)+
	EXTZV	#4,#4,R3,R2
	MOVB	HEXD[R2],(R6)+
	EXTZV	#0,#4,R3,R2
	MOVB	HEXD[R2],(R6)+
300$:
	MOVB	#^A/:/,(R6)+
	BLBS	R5,320$
	MOVB	#^A/ /,(R6)+
320$:
	POPR	#^M<R4,R5>
	RSB
	.PAGE
	.SBTTL	Data definitions

	.PSECT	DATA,WRT,NOEXE

LF=^X0A

NDIFF:	.ASCII	/No differences./
NDIFFL=.-NDIFF

NSF:	.ASCII	/File must be Block-SEQ or record access in order to use this command./
NSFL=.-NSF

CNDRSM:	.ASCII	/Can not determine record start address in this block/
CNDL=.-CNDRSM

LRLMSG:	.ASCII	/**Auto record locate is unpredictable with /
	.ASCII	/large V-length records**/
LRLL=.-LRLMSG

MAXMSG:	.ASCID	/**Record size of !UL exceeds maximum allowed (!UL)**/

IVT:	.ASCII	/Invalid date-time format/
IVTL=.-IVT

PBCON:	.ASCII	/      Paste buffer contents:/
PBCL=.-PBCON

PBTRUNC: .ASCID /Comparison truncated to paste buffer length (!UL bytes)/

HEXD::	.ASCII	/0123456789ABCDEF/

SP5:	.ASCII	/     /
PBOUT:	.ASCII	/*PB* /
EOF:	.ASCIC	/**EOF**/

EBCTBL:	.ASCII	/................/ ; HEX 00 - 0F
	.ASCII	/................/ ; HEX 10 - 1F
	.ASCII	/................/ ; HEX 20 - 2F
	.ASCII	/................/ ; HEX 30 - 3F
	.ASCII	/ .........[.<(+!/ ; HEX 40 - 4F
	.ASCII	/&.........]$*);^/ ; HEX 50 - 5F
	.ASCII	\-/........|,%_>?\ ; HEX 60 - 6F
	.ASCII	/.........`:#@'="/ ; HEX 70 - 7F
	.ASCII	/.abcdefghi....../ ; HEX 80 - 8F
	.ASCII 	/.jklmnopqr....../ ; HEX 90 - 9F
	.ASCII	/.~stuvwxyz....../ ; HEX A0 - AF
	.ASCII	/................/ ; HEX B0 - BF
	.ASCII	/{ABCDEFGHI....../ ; HEX C0 - CF
	.ASCII	/}JKLMNOPQR....../ ; HEX D0 - DF
	.ASCII	/\.STUVWXYZ....../ ; HEX E0 - EF
	.ASCII	/0123456789....../ ; HEX F0 - FF

LC80:	.LONG	64,32,16,8
LC132:	.LONG	96,48,24,12
LCBEGN:
LC6496:	.LONG	0
LC3248:	.LONG	0
LC1624:	.LONG	0
LC0812:	.LONG	0
OUTDSCV: .QUAD	0
DSPBCT:	.LONG	0
REM:	.LONG	0
;
; Used by IWLDSP
;
OVERFL: .LONG	0
SVSTAT: .LONG	0
DSPCNT:: .LONG	0
WLINC:	.LONG	0
WLCNT:	.LONG	0
WLPARM:: .LONG	0
WLPOSN:: .LONG	0
;
; Used by DIFF and MULTI
;
R4R5S:	.QUAD	0
R9R10S: .QUAD	0
FLAG:	.BYTE	0
;
; Used by RECORD
;
RECPTR:: .LONG	-1
RECCNT:	.LONG	1
HDRCNT:	.LONG	0
RECWID:	.LONG	0
VFCOUT:	.LONG	0
VFCOUTM1: .LONG	0
VFCSKIP: .LONG	0
MAXREC: .LONG	0
EOFBYTE: .LONG	0
HEXSAV:	.BYTE	0

	.END
