.TITLE SUCCESSOR FUNCTION .PSECT SUCCESSOR .GLOBL LEN SUCC:: JSR PC,LEN ;GET LENTH OF STRING OKLEN: MOV 2(R5),R1 ;GET POINTER TO FIRST CHARACTER ADD R1,R0 ;GET POINTER PAST LAST CHARACTER CLR R2 ;ASSUME NUMERIC TO START NEXT: MOVB -(R0),R3 ;GET NEXT CHARACTER TO TEST CMP R0,R1 ;TEST FOR DONE BLT DONE CMPB R3,#'0 ;IS IT A NUMERAL? BLT SPACE ;NO CMPB R3,#'9 ;PERHAPS... BGT ALFTST ;BUT NOT REALLY. BEQ NUMCAR ;DOES IT CARRY? INCB (R0) ;NOPE, ADD AWAY SAFELY CLR R0 RTS PC ;AND RETURN NUMCAR: MOVB #'0,(R0) ;RESET TO ZERO CLR R2 ;SET NUMERIC FLAG BR NEXT ;AND GO DO THE CARRY ALFTST: CMPB R3,#'A ;IS IT ALPHA? BLT SPACE ;NOPE CMPB R3,#'Z ;PERHAPS... BGT SPACE ;BUT NOT REALLY. BEQ ALFCAR ;YES! DOES IT CARRY? INCB (R0) ;NO, ADD AWAY SAFELY, CLR R0 RTS PC ;AND RETURN ALFCAR: MOVB #'A,(R0) ;RESET TO 'A' INC R2 ;SET MODE TO ALPHA BR NEXT ;AND GO ADD THE CARRY SPACE: TST R2 ;WHAT WAS LAST MODE? BEQ LSTNUM ;IT WAS NUMERIC MOVB #'A,(R0) ;INITALIZE TO 'A' CLR R0 RTS PC ;AND GO HOME LSTNUM: MOVB #'1,(R0) ;INITALIZE TO '1' DONE: CLR R0 ;ZETO ERROR RETURN RTS PC .END