.TITLE MR21.. STRING PROCEDURES IN MACRO .IDENT /MR21../ ; ; ; ; ; .SBTTL NUMERIC TIDY PROCEDURE ; ; R$NTDY:: ;PROCEDURE TO TIDY A NUMERIC STRING ; ; ENTRY POINTS ; (+0) REMOVE LEADING ZEROS AND SIGN IF IT IS A PLUS ; (+2) CONVERT LEADING ZEROS TO SPACES ; (+4) REMOVE SIGN CHARACTER IF IT IS A PLUS ; ; ENTRY CONDITIONS ; R0 -> NUMERIC STRING ; ; EXIT CONDITIONS ; R0 -> TIDIED NUMERIC STRING ; BR 10$ ;ENTRY +0 BR 20$ ;ENTRY +2 BR 30$ ;ENTRY +4 ; 10$: SAVE R1,R2 ;SAVE REGISTERS MOV R0,R1 ;HOLD STRING ADDRESS MOV #2,R2 ;POSITION OF FIRST POSSIBLE LEADING ZERO 12$: CMP @R1,R2 ;HAS STRING BEEN REDUCED TO ONE NUMERIC BLE 14$ ;J IF ONLY SIGN AN ONE NUMERIC CMPB 3(R1),#'0 ;IS THIS A LEADING ZERO BNE 14$ ;J IF NOT LEADING ZERO CALL R$DELC ;DELETE LEADING ZERO CHARACTER BR 12$ ;LOOP TILL TIDY STRING ; 14$: CALL 30$ ;REMOVE PLUS SIGN BR 60$ ;EXIT ; ; 20$: SAVE R1,R2 ;PROTECT REGISTERS MOV R0,R2 ;HOLD STRING ADDRESS ADD #3,R2 ;HOLD ADDRESS OF FIRST CHARACTER MOV @R0,R1 ;LOOP COUNTER (LENGTH OF STRING) DEC R1 ;REMOVE ONE CHAR FOR CORRECT COUNT ; 22$: CMP @R2,#'0 ;IS THIS A LEADING ZERO BNE 24$ ;J IF NOT MOVB #40,(R2)+ ;REPLACE ZERO WITH A SPACE SOB R1,22$ ;PROCESS UP TO 4 CHARACTERS 24$: BR 60$ ;EXIT ; 30$: CMPB 2(R0),#'+ ;IS THIS A POSITIVE VALUE BNE 32$ ;J IF NO A POSITIVE VALUE CALL R$SHL ;DELETE PLUS SIGN BY SHIFTING STRING ;ONE PLACE LEFT 32$: RETURN ;GO BACK TO CALLING PROGRAM ; 60$: UNSAVE R1,R2 ;RESTORE ALL USED REGISTERS RETURN ;GO BACK HOME ; ; ; .END ; ;