.TITLE MRC4.. CHARACTER PROCEDURES IN MACRO ; .IDENT /MRC4../ ; .PAGE .SBTTL . INSERT A CHARACTER AFTER NAMED POSITION ; R$INSC:: ;INSERT A CHARACTER IN A STRING ; ; ENTRY CONDITIONS ; ; R0 = CHARACTER TO INSERT ; R1 -> STRING ADDRESS ; R2 = CHARACTER POSITION ; ; EXIT CONDITIONS ; ; ERROREXIT IF INVALID CONDITIONS ; ; TST -2(R1) ;IS STRING WRITE PROTECTED BLE 62$ ;J IF STRING WRITE PROTECTED TST R2 ;IS INSERT POSITION VALID BLT 62$ ;J IF INVALID POSITION CMP @R1,R2 ;DOES INSERT POSITION EXTEND BEYOND STRING END BLT 62$ ;J IF INVALID POSITION ; SAVE R0,R2,R3,R4 ;SAVE REGISTERS ; CMP -2(R1),@R1 ;IS STRING FULL BLE 50$ ;J IF STRING FULL INC @R1 ;ADD ONE TO STRING LENGTH ; 50$: MOV R2,R3 ;HOLD RELATIVE POSITION OF INSERT CHAR-1 ADD #2,R3 ;OFFSET VALUE CORRECTION ADD R1,R3 ;CREATE ABSOLUTE ADDRESS OF INSERT CHAR ; 55$: MOVB @R3,R4 ;HOLD UPSHIFT CHARACTER MOVB R0,(R3)+ ;LOAD IN INSERT CHAR AND INCREMENT POINTER TO ;THE NEXT CHARACTER POSITION MOV R4,R0 ;HOLD NEXT OUTLOAD CHARACTER INC R2 ;INCREMENT LOAD OUT COUNTER CMP @R1,R2 ;HAVE ALL CHARACTERS BEEN MOVED BGT 55$ ;LOOP TILL ALL CHARACTERS HAVE BEEN MOVED ; 60$: UNSAVE R0,R2,R3,R4 ;RESTORE REGISTERS EXITSUCCESS ;BACK TO CALLING PROGRAM ; ; 62$: EXITERROR ;BACK TO CALLING PROGRAM ; .END ;