.TITLE CONCAT .IDENT /V01/ .SBTTL DESCRIPTION ; ; ; COMPONENT: CONCAT ; ; DATE: 30-MAY-79 ; ; AUTHOR: GR JOHNSON ; BATTELLE NORTHWEST ; P O BOX 999 ; RICHLAND WA 99352 ; ; SOURCE: MACRO-11 ; ; CALLER: FORTRAN IV-PLUS ; ; CALLING SEQUENCE: ; ; CALL CONCAT(STRING,STR1,STR2,...,STRN) ; ; STRING = VARIABLE OR ARRAY TO RECEIVE THE CONCATENATED ; ASCII STRING. THE RESULTING STRING WILL BE ; TERMINATED BY AN ASCII NULL CHARACTER. ; ; STR1,STR2,...,STRN ; ; = ASCII STRINGS TO BE CONCATENATED. ANY NUMBER OF ; STRINGS MAY BE CONCATENATED IN A SINGLE CALL TO ; CONCAT. EACH STRING MUST BE TERMINATED BY AN ; ASCII NULL CHARACTER. ; ; ; DESCRIPTION: ; ; "CONCAT" CONCATENATES ANY NUMBER OF ASCII STRINGS INTO A SINGLE ; STRING. EACH STRING TO BE CONCATENATED MUST BE TERMINATED BY AN ASCII ; NULL CHARACTER. ; ; EXAMPLES: ; ; CALL CONCAT(IBUF,'THIS IS ','AN ASCII',' STRING') ; CALL CONCAT(FILNAM,DEVICE,'FILENAME.',EXTENSION) ; ; IBUF=THIS IS AN ASCII STRING ; FILNAM=DB1:FILENAME.DAT ; ; .SBTTL ENTRY POINT -- CONCATENATE STRINGS ; ; .PSECT ; ; CONCAT:: ; ; MOVB (R5)+,R4 ; ARGUMENT COUNT TO R4 INC R5 ; R5 POINTS TO ADDR OF OUTPUT BUFFER MOV (R5)+,R1 ; OUTPUT BUFFER ADDRESS TO R1 CLR R0 ; CLEAR CHARACTER COUNT BR 6$ ; R5 POINTS TO FIRST INPUT STRING ; 2$: MOV (R5)+,R2 ; ADDRESS OF INPUT STRING TO R2 4$: TSTB (R2) ; END-OF-STRING? BEQ 6$ ; YES, GO LOOK FOR ANOTHER INPUT STRING MOVB (R2)+,(R1)+ ; NO, MOVE STRING CHARACTER BY CHARACTER INC R0 ; INCREMENT CHARACTER COUNT BR 4$ ; AND GO MOVE ANOTHER CHARACTER 6$: SOB R4,2$ ; CONCATENATE ANOTHER STRING? CLRB (R1) ; NO, SET OUTPUT EOS MARK RTS PC ; AND RETURN (R0 = LENGTH) .END ;