.TITLE STRMOV ; SUBROUTINE STRMOV(S1,I1,N,S2,I2) ; ; THIS SUBROUTINE MOVES A STRING OF CHARACTERS FROM ONE ARRAY TO ANOTHER ; ; ; ARGUMENTS --- ; S1 - AN ARRAY CONTAINING THE STRING TO BE MOVED ; I1 - INTEGER SPECIFYING THE POSITION OF THE FIRST CHARACTER TO BE ; MOVED RELATIVE TO THE FIRST POSITION OF THE ARRAY ; N -- INTEGER WHOSE ABSOLUTE VALUE IS THE NUMBER OF ; CHARACTERS TO BE MOVED. IF NEGATIVE, THE RIGHT-MOST ; CHARACTER IS MOVED FIRST. ; S2 - THE RECEIVING ARRAY NAME ; I2 - INTEGER SPECIFYING THE POSITION OF THE FIRST CHARACTER IN S2 ; WHICH IS TO RECEIVE THE CHARACTERS FROM S1 ; ; .PSECT STRMOV::MOV @4(R5),R1 ;I1 BLE RETURN ;RETURN IF I1.LE.0 ADD 2(R5),R1 ;ADDRESS(S1(I1)) DEC R1 MOV @12(R5),R2 ;I2 BLE RETURN ;RETURN IF I2.LE.0 ADD 10(R5),R2 ;ADDRESS(S2(I2)) DEC R2 MOV @6(R5),R0 BEQ RETURN BPL PLOOP NEG R0 ADD R0,R1 ADD R0,R2 NLOOP: MOVB -(R1),-(R2) SOB R0,NLOOP RTS PC PLOOP: MOVB (R1)+,(R2)+ ;S2(I2+J-1)=S1(I1+J-1) SOB R0,PLOOP ;DO J=1,N RETURN: RTS PC .END