.TITLE MRC5.. CHARACTER PROCEDURES IN MACRO ; .IDENT /MRC5../ ; .PAGE .SBTTL . DELETE A CHARACTER WITHIN A STRING ; ; R$DELC:: ;DELETE A CHARACTER IN A STRING ; ; ENTRY CONDITIONS ; R1 -> STRING ADDRESS ; R2 -> CHARACTER POSITION TO DELETE ; ; EXIT CONDITIONS ; ERROREXIT IF INVAILD CONDITIONS ; TST -2(R1) ;IS STRING WRITE PROTECTED BLE 70$ ;J IF STRING WRITE PROTECTED TST @R1 ;ARE THERE ANY CHARACTERS IN THE STRING BLE 70$ ;J IF NO CHARACTERS IN STRING TST R2 ;IS DELETE CHARACTER POSITION VALID BLE 70$ ;J IF POSITION BEFORE START OF STRING CMP @R1,R2 ;CHECK IF BEYOND STRING END BLT 70$ ;J IF BEYOND STRING END BEQ 50$ ;J IF LAST CHARACTER TO DELETE ; SAVE R3,R4 ;SAVE REGISTERS R3,R4 MOV R1,R3 ;HOLD ADDRESS OF STRING START ADD #2,R3 ;OFFSET TO BYPASS THE LENGTH WORD + 1 CHAR ADD R2,R3 ;R3 POINTS TO THE CHARACTER POSITION ONE ;CHARACTERS PLACE PAST THE CHARACTER TO ;BE DELETED MOV @R1,R4 ;HOLD NUMBER OF CHARACTERS IN THE STRING SUB R2,R4 ;HOLD A COUNT OF THE NUMBER OF CHARACTERS ;THAT ARE REQUIRED TO BE MOVED DOWN THE STRING ; 20$: MOVB @R3,-(R3) ;GET CHAR, DEC POINTER, LOAD CHARACTER ADD #2,R3 ;INCREMENT TO NEXT CHARACTER TO SHIFT SOB R4,20$ ;LOOP TILL ALL CHARACTERS MOVED DOWN STRING ; 40$: UNSAVE R3,R4 ;RESTORE REGISTERS ; 50$: DEC @R1 ;REDUCE LENGTH OF STRING ; 60$: EXITSUCCESS ;EXIT TO CALLING ROUTINE ; 70$: EXITERROR ;EXIT TO CALLING ROUTINE ; .END ;