;COPYRIGHT GENERAL SCIENTIFIC CORPORATION ;ROCKVILLE, MD. ; ;THIS SOFTWARE MAY BE FREELY DISTRIBUTED BY DECUS FOR NON-COMMERCIAL PURPOSES ;SUBJECT TO GSC COPYRIGHT AND DECUS REGULATIONS. ; .TITLE GETNUM - Convert ASCII to binary, decimal ; ; ; This routine starts at the address in r1 ; and ignores spaces until it reaches a ; valid character. It will then convert ; to decimal until it reaches another space. ; The characters + and - are valid only at ; the beginning of the string ; ; R1 points to the input string ; R3 contains the number ; R2 used for scratch ; ASCBIN::CLR IFLG ;+/- FLAG ASCLOP: CMPB #' ,(R1) ;IS IT A SPACE?? BEQ ASCINC ;YES, IGNORE CMPB #'-,(R1) ;IS IT A MINUS?? BNE PLUS ;TRY A PLUS DEC IFLG ;SET A MINUS BR ASCINC ;AND CONTINUE PLUS: CMPB #'+,(R1) ;IS IT A PLUS?? BNE NUMB ;NO, TRY A NUMBER ASCINC: INC R1 ;NEXT CHARACTER BR ASCLOP ;AND TRY AGAIN ; ; ; We have a number ; ; NUMB: CLR R3 ;CLEAR RESULT 1$: MOVB (R1)+,R2 ;GET A BYTE SUB #'0,R2 ;CONVERT TO NUMBER BMI 10$ ;IF MINUS, WE ARE DONE CMP #9.,R2 ;> 9?? BLO 10$ ;YES -- EXIT ASL R3 ;RESULT TIMES 2 MOV R3,-(SP) ;AND SAVE IT ASL R3 ;RESULT TIMES 4 ASL R3 ;RESULT TIMES 8 ADD (SP)+,R3 ;RESULT * 8 + RESULT * 2 ADD R2,R3 ;ADD IN CURRENT COUNT BR 1$ ;AND CONTINUE 10$: TST IFLG ;IS IT MINUS BEQ RET ;NO NEG R3 ;MAKE IT A MINUS RET: RETURN IFLG: .WORD 0 ;+/- FLAG .END