Google
 

Trailing-Edge - PDP-10 Archives - klad_sources - klad.sources/cnvrtm.mac
There are no other files named cnvrtm.mac in the archive.
SUBTTL	CONTROL SEQUENCE

BEGIN:
LOAD:
START:
CONVRT:	SETZM	MONCTL
	PGMINT			;INITIALIZE PROGRAM
	MOVE	[INCHWL $TTCHR]
	MOVEM	$TTUSR
	SETZM	ERRFLG
	SETZM	SWTEXR

	MOVEI	[ASCIZ?TYPE /H<CR> FOR HELP?]
	SKIPN	ONCEF#
	PNTAL
	SETOM	ONCEF

CMD:	SETZM	HELPF
	SETZM	SUPA10#
	SETZM	KSMICF#
	SETZM	FLAG8#
	SETZM	KMCFLG#
	SETZM	FLAG11#
	SETZM	FILEXT#
	SETZM	MICROF#
	SETZM	MNOLST#
	SETZM	BLKCNT#
	SETZM	OUTCNT#
	SETZM	POINTX#
	SETZM	NOERRP#
	SETZM	DX20F#
	SETZM	SAVFLG#
	SETZM	CONSW
	MOVEI	[ASCIZ/
FILE: /]
	PNTAL

	GO	FILSPC		;GET FILE NAME
	JRST	CMDERR		;ERROR

	SKIPE	HELPF#
	JRST	HELP		;HELP MESSAGE

	SKIPE	KMCFLG
	JRST	CNVKMC		;KMC11 FILE

	SKIPE	DX20F
	JRST	CNVDX		;DX20 FILE

	SKIPE	FLAG8
	JRST	CNVRT8		;PDP-8 FILE

	SKIPE	FLAG11
	JRST	CNVT11		;PDP-11 FILE

	SKIPE	KSMICF
	JRST	KSMCNV		;KS-10 MICRO-CODE CONVERSION

	SKIPE	MICROF
	JRST	MICCNV		;MICRO-CODE CONVERSION

	SKIPE	SAVFLG
	JRST	SAVCNV		;CONVERT '.A10' BACK TO '.SAV'

	JRST	RIMTB		;CONVERT SAV TO ASCII
CMDERR:	MOVEI	[ASCIZ/
???/]
	PNTAL
	SKIPE	USER
	CLRBFI			;CLEAR INPUT
	JRST	CMD

;*MISCELLANEOUS PARAMETERS
S

MONCTL:	0
MONFLG:	-1
RETURN:	0
SWTEXR:	0
ERRFLG:	0
PNTNAM:	PAREA3
PNTEXT:	PAREA4

REENTR:	DROPDV
	SETZM	SWTEXR
	JRST	C11DON		;CLOSE FILES

PGMNAM:	ASCIZ?
CONVRT - DECSYSTEM DIAGNOSTIC ASCIIZER CONVERSION PROGRAM [DDQDG]
?
;*FILE NAME SPECIFICATION
S

FILSPC:	SETZB	3,SLASHF#
TTSXB:	SETZM	1
	MOVE	2,[POINT 6,1]
TTSXB1:	TTICHR			;GET INPUT
	JRST	.-1
	CAIN	0,15
	JRST	TSXBX		;CR, TERMINATE
	CAIN	0,"."
	JRST	TDOT		;NAME.EXT DELIMITER
	CAIN	0,"/"
	JRST	SLASHX		;SLASH, CONTROL CHAR FOLLOWING
	CAIL	0,"A"+40
	CAILE	0,"Z"+40
	CAIA
	SUBI	0,40		;CONVERT TO UPPER-CASE
	SKIPE	SLASHF		;SLASH FLAG SET ?
	JRST	OPTION		;YES, GO SET OPTION
	CAIL	0,"0"
	CAILE	0,"Z"
	RTN			;ERROR, NOT ALPHA-NUMERIC
	TRC	0,40		;CONVERT TO SIXBIT
	TRNE	1,77
	RTN			;ERROR, TOO MANY CHARS
	IDPB	0,2		;PUT INTO WORD
	JRST	TTSXB1		;REPEAT

TSXBX:	AOS	(P)		;RETURN +1
	SKIPE	3
	MOVEM	1,FILEXT	;SIXBIT WORD IN FILE EXTENSION
	SKIPN	3
	MOVEM	1,FILNAM#	;SIXBIT WORD IN FILE NAME
	RTN
TDOT:	SETOM	3
	MOVEM	1,FILNAM
	JRST	TTSXB

SLASHX:	SETOM	SLASHF		;SLASH, SET FLAG
	JRST	TTSXB1		;GO GET CONTROL CHAR

OPTION:	SETZB	4,HELPF
	CAIN	0,"H"
	SETOB	4,HELPF		;/H, HELP MESSAGE
	CAIN	0,"8"
	SETOB	4,FLAG8		;/8, PDP-8 FILE
	CAIN	0,"E"
	SETOB	4,FLAG11	;/E, PDP-11 FILE
	CAIN	0,"T"
	SETO	4,		;/T, PDP-10 FILE - DEFAULT
	CAIN	0,"A"		;/A, PDP-10 FILE - SUPER A10
	SETOB	4,SUPA10
	CAIN	0,"S"
	SETOB	4,SAVFLG	;/S, PDP-10 '.A10' BACK TO '.SAV'
	CAIN	0,"X"
	SETOB	4,DX20F		;/X, DX20 FILE
	CAIN	0,"K"
	SETOB	4,KSMICF	;/K, KS-10 MICRO-CODE
	CAIN	0,"M"
	SETOB	4,MICROF	;/M, MICRO CODE & LISTING
	CAIN	0,"R"
	GO	MICNLST		;/R, RAM MICRO CODE, NO LISTING
	CAIN	0,"C"
	SETOB	4,KMCFLG	;/C, KMC11 MICROCODE
	CAIN	0,"N"
	SETOB	4,NOERRP	;/N, DON'T PRINT ERRORS ON TTY
	SETZM	SLASHF
	JUMPN	4,TTSXB1	;4 SET, OK
	RTN			;NO, CONTROL CHAR ERROR

HELP:	MOVEI	HLPMSG		;OUTPUT HELP MESSAGE
	PNTAL
	SKIPE	USER
	CLRBFI
	JRST	CMD

MICNLST:SETOB	4,MICROF
	SETOM	MNOLST
	RTN
HLPMSG:	ASCIZ?
 COMMANDS TERMINATE WITH <CR>
 COMMAND IS FILE.EXT/SWITCH
PDP-10 'EXT' DEFAULT IS 'SAV'
PDP-11 'EXT' DEFAULT IS 'BIN'
PDP-8  'EXT' DEFAULT IS 'BIN'
DX20   'EXT' DEFAULT IS 'BIN'
KMC11  'EXT' DEFAULT IS 'BIN'
MICRO  'EXT' DEFAULT IS 'MCR'
COMMAND		FUNCTION
-------		--------
FILE		PDP-10 SAVE FILE TO ASCII '.A10' CONVERSION
FILE/T		" DEFAULT
FILE/A		PDP-10 SAVE FILE TO "SUPER" '.A10' CONVERSION
FILE/S		PDP-10 '.A10' FILE BACK TO '.SAV' CONVERSION
FILE/E		PDP-11 BINARY FILE TO ASCII '.A11' CONVERSION
FILE/8		PDP-8 BINARY FILE TO ASCII '.A8' CONVERSION
FILE/X		DX20 BINARY FILE TO ASCII '.ADX' CONVERSION
FILE/C		KMC11 BINARY FILE TO ASCII '.KMC' CONVERSION
FILE/K		KS-10 MICRO-CODE LISTING TO '.RAM' CONVERSION
FILE/M		MICRO-CODE LISTING TO ASCII '.RAM' CONVERSION
FILE/R		MICRO RAM FILE ONLY, NO LISTING
/N		DON'T PRINT MICRO CODE ERRORS
/H		THIS MESSAGE
?
;*SETUP INPUT AND OUTPUT
S

ININIT:	OPEN	IN,INBLK	;OPEN INPUT
	JRST	ERR7		;NOT AVAILABLE

	MOVEI	0		;ASCII
	SKIPE	KSMICF		;KS-10 ?
	MOVEI	13		;YES, IMAGE BINARY OUTPUT
	SKIPE	SAVFLG		;.A10 TO .SAV ?
	MOVEI	13		;YES, IMAGE BINARY OUTPUT
	MOVEM	OUTBLK

	OPEN	OUT,OUTBLK	;OPEN OUTPUT
	JRST	ERR8		;NOT AVAILABLE

	MOVE	JOBFF
	MOVEM	SVJBFF#		;SAVE FOR RECLAIM

	INBUF	IN,^D10		;SETUP 10 INPUT BUFFERS
	OUTBUF	OUT,^D10	;SETUP 10 OUTPUT BUFFERS

	LOOKUP	IN,INNAM	;INITIALIZE INPUT FILE
	JRST	ERR10		;NOT FOUND

	MOVE	INNAME+1
	ANDI	700000
	HRRM	OUTNAM+1
	MOVE	INNAME+2
	AND	[37,,-1]
	MOVEM	OUTNAM+2
	MOVE	INNAME+4
	MOVEM	OUTNAM+4

	ENTER	OUT,OUTNM	;INITIALIZE OUTPUT FILE
	JRST	ERR9		;NO ROOM
	RTN
INBLK:	13			;IMAGE BINARY, 36 BIT BYTES
	SIXBIT/DSK/		;FROM DISK
	IBF			;HEADER
IBF:	BLOCK	3

OUTBLK:	0			;ASCII
	SIXBIT/DSK/		;TO DISK
	OBF,,0			;HEADER
OBF:	BLOCK	3

INNAM:	6
	0
INNAME:	SIXBIT/NAME/		;UPDATED ON SPECIFICATION
	SIXBIT/EXT/		;UPDATED ON SPECIFICATION
	BLOCK	5

OUTNM:	6
	0
OUTNAM:	SIXBIT/NAME/		;UPDATED ON SPECIFICATION
	SIXBIT/EXT/		;UPDATED ON SPECIFICATION
	BLOCK	5
SUBTTL	TEN CONVERT SECTION

;*FIND START ADDRESS AND LENGTH
S

RIMTB:	MOVE	FILNAM		;INITIALIZE FILE NAMES
	MOVEM	INNAME
	MOVEM	OUTNAM
	MOVE	[SIXBIT/SAV/]
	SKIPE	FILEXT
	MOVE	FILEXT
	MOVEM	INNAME+1
	MOVE	[SIXBIT/A10/]
	MOVEM	OUTNAM+1
	MOVEI	13		;INPUT IMAGE BINARY, 36 BIT BYTES
	MOVEM	INBLK
	GO	ININIT		;INITIALIZE I/O
	MOVSI	(JRST)
	MOVEM	XFERWD#
	GO	RINP		;GET FIRST BUFFER
	JRST	ERR1		;FILE OF ZERO LENGTH
	JUMPGE	CHR,ERR2	;FIRST WD MUST BE POINTER
	MOVEI	T2,^D126(CHR)
	MOVEI	T3,137		;FIRST POINTER MUST BE ABOVE XXX
	CAMGE	T2,T3
	JRST	ERR3		;NO, ERROR
	MOVE	T1,IBF+1
	MOVEI	T3,JOBSA
	GO	RMS1		;GET 'JOBSA'
	JRST	ERR3
	HRRM	CHR,XFERWD	;SAVE AS TRANSFER WORD
	MOVE	T1,IBF+1
	MOVEI	T3,JOBFF
	GO	RMS1		;GET 'JOBFF'
	JRST	ERR3
	HRRZM	CHR,LENGTH#	;SAVE AS LENGTH OF PROGRAM
	MOVE	T1,IBF+1
	MOVEI	T3,JOBVER
	GO	RMS1		;GET 'JOBVER'
	SETZ	CHR,		;NO VERSION, USE 0.0
	MOVEM	CHR,FILVER#	;SAVE FOR FILE IDENTIFICATION

	GO	FILEID		;IDENTIFY OUTPUT FILE
;*OUTPUT 10 CORE ZEROING BLOCK
;*CORE IS ZEROED FROM 'JOBSA' TO 'JOBFF'
S

RIMTB1:	HRRZ	T1,XFERWD		;GENERATE ZERO WORD COUNT
	HRRZ	T2,LENGTH
	CAILE	T1,<^D1024*^D256>-1
	JRST	ERR12			;DOESN'T FIT
	CAILE	T2,<^D1024*^D256>-1
	JRST	ERR12
	PUT	T1
	ANDI	T1,177777		;STRIP TO 16 BITS
	MOVEM	T1,B11ADR		;SETUP START ADDRESS
	GET	T1
	PUT	T1
	LSH	T1,-^D8
	ANDI	T1,777400		;GET BITS 18 & 19
	AOS	T1			;ONE DATA WORD
	MOVEM	T1,B11CNT
	GET	T1
	SUB	T2,T1			;NOW HAVE ZERO COUNT
	MOVEI	T1,<^D1024*^D64>-1
	MOVEI	CNT,B11DAT
	CAIG	T2,<^D1024*^D64>-1
	JRST	RIMZ1			;ONE ZERO WORD
	MOVEM	T1,(CNT)
	AOS	B11CNT
	AOS	CNT
	SUB	T2,T1
	CAIG	T2,<^D1024*^D64>-1
	JRST	RIMZ1			;TWO ZERO WORDS
	MOVEM	T1,(CNT)
	AOS	B11CNT
	AOS	CNT
	SUB	T2,T1
	CAIG	T2,<^D1024*^D64>-1
	JRST	RIMZ1			;THREE ZERO WORDS
	MOVEM	T1,(CNT)		;FOUR ZERO WORDS
	AOS	B11CNT
	AOS	CNT
	SUB	T2,T1
RIMZ1:	MOVEM	T2,(CNT)		;LAST ZERO WORD

	GO	PUTZSP		;LINE STARTS WITH "Z" & "SPACE"

	GO	C11CNV		;ASCIIZE & OUTPUT
;*OUTPUT 10 DATA WORD BLOCKS
S

RIMTB2:	LDB	CHR,IBF+1	;GET POINTER
	HRRZM	CHR,POINTA#
	HLROM	CHR,COUNT#
	MOVNS	COUNT		;NUMBER OF WORDS THIS BLOCK

RIMTB3:	SKIPN	T1,COUNT	;ANY WORDS LEFT IN BLOCK ?
	JRST	RIMTB4		;NONE
	SETZM	CHKSM#
	CAIL	T1,BLKSZ
	MOVEI	T1,BLKSZ
	MOVN	T2,T1		;T1 HAS # OF WORDS TO GO OUT
	MOVEM	T1,BLKSIZ#	;NUMBER OF WORDS IN THIS BLOCK
	ADDM	T2,COUNT	;ADJUST COUNT

	SKIPE	SUPA10
	JRST	SUPTB3		;SUPER A10

	HRRZ	CHR,POINTA
	MOVEM	CHR,POINTX#	;SAVE BLOCK ADDRESS
	ADDM	T1,POINTA	;SET POINTA FOR NEXT TIME
	GO	SETIOW		;INITIALIZE OUTPUT BLOCK

RIMTB5:	SOJL	T1,RIMTB6	;FINISHED THIS BLOCK ?
	GO	RINP		;GET DATA WORD
	JRST	ERR4		;EOF (ILLEGAL)

	GO	PUTRTB		;PUT IN OUTPUT BLOCK

	JRST	RIMTB5
RIMTB6:	GO	PUTTSP		;LINE STARTS WITH "T" & "SPACE"

	GO	C11CNV		;ASCIIZE & OUTPUT

	JRST	RIMTB3		;DO NEXT BLOCK

;*OUTPUT TRANSFER BLOCK
S

RIMTB7:	SKIPE	SUPA10
	JRST	SUPTB7		;SUPER A10

	HRRZ	XFERWD		;GET START ADDRESS
	ANDI	177777
	MOVEM	B11ADR
	HRRZ	XFERWD
	LSH	-^D8
	ANDI	777400
	MOVEM	B11CNT		;START AS 0 WORD COUNT

	GO	PUTTSP
	GO	C11CNV
	JRST	C11DON		;COMPLETED

PUTRTB:	LDB	[POINT 4,CHR,3]
	MOVEM	B11DAT+2(CNT)	;PUT BITS 0-3 IN 11 STOR WORD 2
	LDB	[POINT 16,CHR,19]
	MOVEM	B11DAT+1(CNT)	;PUT BITS 4-19 IN 11 STOR WORD 1
	LDB	[POINT 16,CHR,35]
	MOVEM	B11DAT(CNT)	;PUT BITS 20-35 IN 11 STOR WORD 0

	MOVEI	3
	ADDM	CNT		;INCREMENT STOR COUNT
	ADDM	B11CNT		;3 11 WORDS PER 10 WORD
	RTN
;*GET NEW POINTER
S

RIMTB4:	GO	RINP
	JRST	RIMTB7		;EOF
	JUMPL	CHR,RIMTB2	;POINTER WORD
	CAME	CHR,XFERWD	;IS IT FINAL JRST XXX
	JRST	ERR5		;NO, ERROR
	JRST	RIMTB7		;YES, OUTPUT IT

;*JOBSA/JOBFF/JOBVER SEARCH ROUTINE
S

RMS2:	SUB	T1,T4		;(IBF+1)+N
	AOJ	T1,
RMS1:	LDB	CHR,T1		;GET POINTER
	HRRZ	T2,CHR		;X
	CAMLE	T2,T3		;THIS POINTER PAST REQ DATA ?
	RTN			;YES
	HLRO	T4,CHR		;-N
	SUB	T2,T4		;X+N IN T2
	CAMGE	T2,T3		;THIS POINTER POINT TO REQ DATA ?
	JRST	RMS2		;NO, GET NEXT POINTER
	SUBI	T3,(CHR)	;YES, HOW FAR FROM POINTER ?
	ADD	T1,T3		;INCREMENT POINTER
	LDB	CHR,T1		;GET REQ DATA
	AOS	(P)
	RTN

;*SETIOW, SET I/O POINTER WORD
S

SETIOW:	AOS	CHR		;CHANGE POINTER TO BLK ADDRESS
	PUT	CHR
	ANDI	CHR,177777	;STRIP TO 16 BITS
	MOVEM	CHR,B11ADR	;SETUP 1ST START ADDRESS, LOW 16 BITS
	GET	CHR
	LSH	CHR,-^D8	;GET ADDRESS BITS 18 & 19
	ANDI	CHR,777400
	MOVEM	CHR,B11CNT	;SAVE IN HI-BYTE OF WORD COUNT
	SETZM	CNT		;CLEAR WORD COUNTER
	RTN
;*SUPER '.A10' CONVERSION

SUPTB3:	HRRZ	CHR,POINTA
	MOVEM	CHR,POINTX	;SAVE BLOCK ADDRESS
	AOS	POINTX
	ADDM	T1,POINTA	;SET POINTER FOR NEXT TIME

	GO	PUTASP		;LINE STARTS WITH "A" & SPACE

	MOVE	CHR,BLKSIZ	;NUMBER OF WORDS IN THIS BLOCK
	LDB	0,[POINT 2,POINTX,19]
	DPB	0,[POINT 2,CHR,27]

	ADDM	CHR,CHKSM
	GO	PUT		;OUTPUT BLOCK SIZE
	GO	PUTCMA

	MOVE	CHR,POINTX
	ANDI	CHR,177777
	ADDM	CHR,CHKSM	;OUTPUT BLOCK ADDRESS

SUPTB5:	GO	PUT		;OUTPUT
	GO	PUTCMA
	SOJL	T1,SUPTB6	;FINISHED THIS BLOCK ?
	GO	RINP		;GET DATA WORD
	JRST	ERR4		;EOF (ILLEGAL)
	ADDM	CHR,CHKSM	;CHECKSUM
	JRST	SUPTB5		;REPEAT
SUPTB6:	MOVN	CHR,CHKSM
	ANDI	CHR,177777
	GO	PUT		;OUTPUT CHECKSUM
	GO	PUTCRF
	JRST	RIMTB3

SUPTB7:	GO	PUTASP
	SETZ	CHR,
	LDB	0,[POINT 2,XFERWD,19]
	DPB	0,[POINT 2,CHR,27]
	MOVEM	CHR,CHKSM
	GO	PUT		;OUTPUT WORD COUNT
	GO	PUTCMA
	HRRZ	CHR,XFERWD
	ANDI	CHR,177777
	ADDM	CHR,CHKSM
	GO	PUT		;OUTPUT TRANSFER WORD
	GO	PUTCMA

	MOVN	CHR,CHKSM
	ANDI	CHR,177777
	GO	PUT		;OUTPUT CHECKSUM
	GO	PUTCRF
	JRST	C11DON		;COMPLETED
;*CONVERSION COMPLETION FILE CLOSEOUT ROUTINE
S

C11DON:	GO	FILEOF		;PUT "EOF" ON OUTPUT FILE
	OUTPUT	OUT,
	CLOSE	IN,
	CLOSE	OUT,
	RELEAS	IN,
	RELEAS	OUT,
	MOVE	SVJBFF		;RECLAIM BUFFER SPACE
	MOVEM	JOBFF
	MOVEI	[ASCIZ/
CONVERTING COMPLETED, INPUT BLOCKS = /]
	PNTAL
	MOVE	BLKCNT
	PNTDEC
	MOVEI	[ASCIZ/, OUTPUT BLOCKS = /]
	PNTAL
	MOVE	OUTCNT
	PNTDEC
	MOVEI	CRLF2
	PNTAL
	EXIT

;*MISCELANEOUS ROUTINES
S

PUT1:	SOSG	OBF+2		;ADVANCE BYTE COUNTER
	JRST	PUTBF		;FULL
	IDPB	CHR,OBF+1	;DEPOSIT CHARACTER
	RTN

PUTBF:	AOS	OUTCNT
	OUT	OUT,		;DUMP BUFFER
	JRST	PUT1+2		;NO ERRORS, JUMP BACK
	JRST	ERR6		;ERROR

PUTCMA:	MOVEI	CHR,","
	GO	PUT1
	RTN
PUTCRF:	MOVEI	CHR,15
	GO	PUT1
	MOVEI	CHR,12
	GO	PUT1
	RTN

PUTASP:	MOVEI	CHR,"A"		;LINE STARTS WITH "A" & "SPACE"
	JRST	PUTTSP+1

PUTTSP:	MOVEI	CHR,"T"		;LINE STARTS WITH "T" & "SPACE"
	GO	PUT1
	MOVEI	CHR," "
	GO	PUT1
	RTN

PUTZSP:	MOVEI	CHR,"Z"		;LINE STARTS WITH "Z" & "SPACE"
	JRST	PUTTSP+1

PUTS11:	TLNN	CHR1,777700
	JRST	.+4		;SUPPRESS 2 LEADING ZERO OITS
	TLNN	CHR1,770000
	JRST	.+4		;SUPPRESS 1 LEADING ZERO OIT
	RTN

	SOS	CNT
	LSH	CHR1,6
	SOS	CNT
	LSH	CHR1,6
	RTN
;*PDP-10 SUPER A10 OUTPUT ROUTINE

PUT:	MOVEI	CNT,6		;6 CHARS PER WORD
	MOVE	CHR1,CHR
	GO	PUTSUP		;SUPPRESS LEADING ZEROS

PUTX:	SETZM	CHR
	ROTC	CHR,6		;PUT CHAR RIGHT JUSTIFIED IN CHR

	CAIN	CHR,0
	JRST	PUTZR0		;SUPPRESS OTHER ZEROS

	CAIN	CHR,77
	JRST	PUTONE		;SUPPRESS ONES

	CAIN	CHR,75		;LEAVE 75 ALONE
	JRST	.+6
	CAIN	CHR,76
	JRST	.+4		;LEAVE 76 ALONE
	CAIN	CHR,77
	JRST	.+2		;LEAVE 77 ALONE
	TRO	CHR,100		;SET BIT 7
PUTX1:	GO	PUT1		;GO PUT IN BUFFER
	SOJG	CNT,PUTX	;ALL CHARS DONE ?
	RTN			;YES
PUTSUP:	TDNN	CHR1,[-1,,777700]
	JRST	PUTS5		;SUPPRESS 5 LEADING ZERO OITS
	TDNN	CHR1,[-1,,770000]
	JRST	PUTS4		;SUPPRESS 4 LEADING ZERO OITS
	TLNN	CHR1,-1
	JRST	PUTS3		;SUPPRESS 3 LEADING ZERO OITS
	TLNN	CHR1,777700
	JRST	PUTS2		;SUPPRESS 2 LEADING ZERO OITS
	TLNN	CHR1,770000
	JRST	PUTS1		;SUPPRESS 1 LEADING ZERO OIT
	RTN

PUTS5:	SOS	CNT
	LSH	CHR1,6
PUTS4:	SOS	CNT
	LSH	CHR1,6
PUTS3:	SOS	CNT
	LSH	CHR1,6
PUTS2:	SOS	CNT
	LSH	CHR1,6
PUTS1:	SOS	CNT
	LSH	CHR1,6
	RTN
;*PUTZR0, SUPPRESS MULTIPLE 00 OITS

PUTZR0:	SETZM	PUTZRC#
	CAIN	CNT,1
	JRST	PUTZR1
	CAIN	CNT,2
	JRST	PUTZR2
	CAIN	CNT,3
	JRST	PUTZR3
	CAIN	CNT,4
	JRST	PUTZR4
	JRST	PUTZR5

PUTZR5:	TDNN	CHR1,[-1,,770000]
	AOS	PUTZRC
PUTZR4:	TLNN	CHR1,-1
	AOS	PUTZRC
PUTZR3:	TLNN	CHR1,777700
	AOS	PUTZRC
PUTZR2:	TLNN	CHR1,770000
	AOS	PUTZRC
PUTZR1:	SUB	CNT,PUTZRC
	MOVE	CHR,PUTZRC
	IMULI	CHR,6
	LSH	CHR1,(CHR)
	MOVE	CHR,PUTZRC
	TRO	CHR,60
	JRST	PUTX1

;*	"0" = 00
;*	"1" = 0000
;*	"2" = 000000
;*	"3" = 00000000
;*	"4" = 0000000000
;*PUTONE, SUPPRESS MULTIPLE 77 OITS

PUTONE:	SETCMM	CHR1
	SETZM	PUTONC#
	CAIN	CNT,1
	JRST	PUTON1
	CAIN	CNT,2
	JRST	PUTON2
	CAIN	CNT,3
	JRST	PUTON3
	CAIN	CNT,4
	JRST	PUTON4
	CAIN	CNT,5
	JRST	PUTON5

PUTON6:	TDNN	CHR1,[-1,,777700]
	AOS	PUTONC
PUTON5:	TDNN	CHR1,[-1,,770000]
	AOS	PUTONC
PUTON4:	TLNN	CHR1,-1
	AOS	PUTONC
PUTON3:	TLNN	CHR1,777700
	AOS	PUTONC
PUTON2:	TLNN	CHR1,770000
	AOS	PUTONC
PUTON1:	SUB	CNT,PUTONC
	MOVE	CHR,PUTONC
	IMULI	CHR,6
	SETCMM	CHR1
	LSH	CHR1,(CHR)
	MOVE	CHR,PUTONC
	ADDI	CHR,"5"
	JRST	PUTX1

;*	"5" = 77
;*	"6" = 7777
;*	"7" = 777777
;*	"8" = 77777777
;*	"9" = 7777777777
;*	":" = 777777777777
SUBTTL	ERROR ROUTINES

ERR1:	MOVEI	[ASCIZ/
FILE OF ZERO LENGTH/]
	JRST	ERRX
ERR2:	MOVEI	[ASCIZ/
FIRST WORD MUST BE POINTER/]
	JRST	ERRX
ERR3:	MOVEI	[ASCIZ/
INITIAL POINTER ERROR/]
	JRST	ERRX
ERR4:	MOVEI	[ASCIZ/
ILLEGAL EOF/]
	JRST	ERRX
ERR5:	MOVEI	[ASCIZ/
POINTER ERROR/]
	JRST	ERRX
ERR6:	MOVEI	[ASCIZ/
ERROR ON OUTPUT/]
	JRST	ERRX
ERR7:	MOVEI	[ASCIZ/
INPUT NOT AVAILABLE/]
	JRST	ERRX
ERR8:	MOVEI	[ASCIZ/
OUTPUT OPEN ERROR/]
	JRST	ERRX
ERR9:	MOVEI	[ASCIZ/
NO OUTPUT ROOM/]
	JRST	ERRX
ERR10:	MOVEI	[ASCIZ/
INPUT FILE NOT FOUND/]
	JRST	ERRX
ERR11:	MOVEI	[ASCIZ/
RIM10 FORMAT ERROR/]
	JRST	ERRX
ERR12:	MOVEI	[ASCIZ/
OVER 256K ERROR/]
	JRST	ERRX

ERRX:	SETOM	MONCTL
	PNTALF
	MOVEI	CRLF
	PNTALF
	EXIT