; ; ROUTINE TO REPLACE ASCII TO BINARY CONVERSION ROUTINE SUPPLIED IN ; SYSLIB, EXCEPT THIS ONE SHOULD WORK IN A PURE CODE ENVIRONMENT ; (A RESIDENT LIBRARY). ; ; 2-JUN-77 LARRY SIMPSON ; ; DECLARE ENTRY POINTS .GLOBL $CDTB $COTB ; ; ON ENTRY: ; R0 CONTAINS ADDRESS OF ASCII STRING ; ON EXIT: ; R0 POINTS TO NEXT CHAR AFTER CONVERTED STRING ; R1 HAS UNSIGNED BINARY VALUE ; R2 HAS TERMINATING CHAR ; ; .WORD 0 ;THIS IS TO MAKE ENTRY POINTS THE SAME $CDTB: MOV R5,-(SP) ;SAVE FOR SCRATCH MOV #71,-(SP) ;SAVE UPPER CHARACTER '9' MOV #10.,R2 ;NUMBER BASE (DECIMAL) BR CONCOM $COTB: MOV R5,-(SP) ;SAVE FOR SCRATCH MOV #67,-(SP) ;UPPER CHAR IS '7' MOV #10,R2 ;NUMBER BASE (OCTAL) CONCOM: CLR R1 ;START WITH ANSWER 0 2$: MOVB (R0)+,R5 ;GET LEADING CHAR -> R5 CMPB #40,R5 ;IS IT A SPACE? BEQ 2$ ;IF SO, GET NEXT CHAR CMPB #HT,R5 ;IS IT HORIZONTAL TAB BEQ 2$ ;IF SO, ALSO SKIP 4$: CMPB (SP),R5 ;COMPARE UPPER ASCII CHAR WITH GIVEN BLO 3$ ;IF OUT OF RANGE, END OF CONVERSION CMPB #60,R5 ;NOW CHECK LOWER LIMIT BHI 3$ ;IF OUT, END MUL R2,R1 ;MULTIPLY PREVIOUS ANSWER BY BASE SUB #60,R5 ;MAKE ASCII -> VALUE ADD R5,R1 ;AND ADD IT IN MOVB (R0)+,R5 ;GET NEXT CHAR -> R5 BR 4$ ;AND CONTINUE CONVERSION 3$: MOV R5,R2 ;TERMINATING CHAR -> R2 TST (SP)+ ;POP UPPER CHAR MOV (SP)+,R5 ;RESTORE R5 RTS PC .END