.TITLE CATBX
.IDENT /V1.0/
;
; THIS IS THE SYSLIB MODULE CATB MODIFIED TO WORK IN A SUPERVISOR
; LIBRARY. THE REASON THE ORIGINAL SYSLIB ROUTINE DID NOT WORK IS
; BECAUSE IT USED A 'JSR R5,$SAVRG' CALL TO SAVE THE REGISTER BUT
; SUPERVISOR MODE LIBRARIES DO NOT ALLOW 'JSR R5,XXX' CALLS ONLY
; 'JSR PC,XXX' CALLS ARE ALLOWED. THIS ROUTINE WAS DISASSEMBLED
; FROM SYSLIB, MODIFIED THEN REASSEMBLED.
;
; LAST EDIT: 6-NOV-1987 14:37:39 
;
; MODIFIED BY:	PETER STADICK
;		CARGILL INC.
;		P.O. DRAWER AR
;		RESERVE,LA 70084
;
; EDIT HISTORY:	CREATED NOV-87 PJS
;

.PSECT CLUNK,RO,I,LCL,REL
$CDTB::	
	MOV #12,R2	; CONVERT DECIMAL TO BINARY ENTRY POINT
	BR 10$
;$COTB::
	MOV #10,R2	; CONVERT OCTAL TO BINARY ENTRY POINT
10$:	MOV R3,-(SP)	; SAVE REGISTERS
	MOV R4,-(SP)
	MOV R5,-(SP)
	CLR R1		; CLEAR RESULT REGISTER
20$:	MOVB (R0)+,R5	; GET FIRST VALUE
	CMPB #40,R5	; INGORE LEADING ZEROS 
	BEQ 20$
	CMPB #11,R5	; INGORE LEADING TABS
	BEQ 20$
50$:	SUB #60,R5	; CONVERT TO BINARY
	CMPB R5,R2	; CHECK FOR LEGAL DIGIT
	BCC 30$		; NOT ALLOWED THE JUMP AND FINISH
	MOV R0,R4	; MULTIPLY AND ADD TO RESULT
	MOV R2,R0
	JSR PC,$MUL
	MOV R4,R0
	ADD R5,R1
	MOVB (R0)+,R5	; GET NEXT DIGIT
	BR 50$		; LOOP
30$:	MOVB -1(R0),R2	; PUT TERMINATING CHARACTER IN R2
	MOV (SP)+,R5	; RESTORE REGISTERS
	MOV (SP)+,R4
	MOV (SP)+,R3
	RTS PC
	.END
