.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