.TITLE STREPL .IDENT /V01/ .ENABLE LC ; ; This routine replaces the contents of one string with another ; ; Author: V01 29-Jan-80 Phil Stephensen-Payne ; ; Calling Sequence: ; ; This subroutine is called via the standard FORTRAN calling sequence as:- ; ; CALL STREPL (STR1,STR2,LEN [,STATUS]) ; or ; STATUS = STREPL (STR1,STR2,LEN) ; ; Where:- ; STR1 = String to use for overwriting ; STR2 = String to be overwritten ; LEN = Length of string ; STATUS = Optional Error Return ; ; Errors Returned: ; ; STATUS = 0 if the operation was successful ; = -1 if a parameter error was detected ; ; External References: ; ; This module calls the subroutine PRMCHK ; STREPL:: MOV #4,R0 ; Four parameters CALL PRMCHK ; Check them BCS 40$ ; If CS parameter error - exit at once CLR R0 ; Initialise for success TST (R5)+ ; Remove parameter count MOV (R5)+,R2 ;GET ADDRESS OF INPUT MOV (R5)+,R1 ;GET ADDRESS OF OUTPUT MOVB @(R5)+,R3 ;GET NUMBER OF CHARACTERS BIC #177400,R3 ; Clear any sin extension BEQ 40$ ;IF EQ NONE - OMIT TRANSFER CMP R2,R1 ;R2 LOWER THAN R1? BEQ 40$ ;THE SAME - IGNORE COPY BLT 20$ ;IF LT - COPY BACKWARDS ; 10$: MOVB (R2)+,(R1)+ ;TRANSFER NEXT BYTE SOB R3,10$ ;TRY NEXT BYTE, IF ANY LEFT BR 40$ ;EXIT GRACEFULLY ; 20$: ADD R3,R1 ;SET TO END OF STRING ADD R3,R2 ;DITTO ; 30$: MOVB -(R2),-(R1) ;TRANSFER NEXT BYTE SOB R3,30$ ; 40$: RETURN .END