.TITLE MR04.. STRING PROCEDURES IN MACRO ; .IDENT /MR04../ ; .PAGE .SBTTL . CHARACTER DELETE WITHIN A STRING ; ; R$DELETE:: ; ; ENTRY CONDITIONS ; ; R1 -> STRING TO PROCESS ; R2 = START POSITION WHERE DELETING IS TO START ; R3 = NUMBER OF CHARACTERS TO DELETE ; ; SAVE R1,R2,R3,R4 ;SAVE REGISTERS TST R2 ;IS CHARACTER POSITION IN STRING BLE 50$ ;J IF POSITION BEFORE START OF STRING CMP @R1,R2 ;IS START POSITION WITHIN STRING BLT 50$ ;J IF BEYOND END OF STRING ; ADD R2,R3 ;HOLD LAST CHARACTER POSITION +1 DEC R3 ;HOLD LAST CHARACTER POSITION CMP R3,@R1 ;DOES LAST CHARACTER POSITION EXTEND ;BEYOND STRING LENGTH BLT 10$ ;J IF LENGTH WITHIN STRING MOV @R1,R3 ;TAKE THE DEFAULT OF MAX STRING LENGTH 10$: SUB R2,R3 ;HOLD COUNT ON NUMBER OF CHARS TO DELETE INC R3 ;CORRECT FOR LAST CHARACTER OPTION BLE 50$ ;J IF NO WORK TO PERFORM ; MOV @R1,R4 ;HOLD COUNT OF TOTAL NUMBER OF CHARS SUB R3,R4 ;HOLD COUNT OF NUMBER OF CHARS TO MOVE SUB R3,@R1 ;REDUCE STRING LENGTH BY DEL CHAR CNT BEQ 50$ ;J IF LENGTH NOW ZERO CHARACTERS INC R2 ;ADD 1 FOR RELATIVE POSITION CORRECTION ADD R1,R2 ;MAKE ADDRESS ABSOLUTE ADD R2,R3 ;GET RELATIVE POS OF DOWN SHIFT CHARS ; 20$: MOVB (R3)+,(R2)+ ;COPY END CHARS TO COMPRESS STRING SOB R4,20$ ;LOOP TILL ALL CHARS COPPIED ACROSS ; 50$: UNSAVE R1,R2,R3,R4 ;RESTORE REGISTERS RETURN ; ; .END ; ;