.TITLE RTJUST .IDENT /V01/ .SBTTL DESCRIPTION ; ; ; COMPONENT: RTJUST ; ; DATE: 27-JUN-79 ; ; AUTHOR: GR JOHNSON ; BATTELLE NORTHWEST ; P O BOX 999 ; RICHLAND WA 99352 ; ; SOURCE: MACRO-11 ; ; CALLER: FORTRAN IV-PLUS ; ; CALLING SEQUENCE: ; ; CALL RTJUST(STRING,[ILEN]) ; ; STRING = VARIABLE OR ARRAY CONTAINING STRING TO BE JUSTIFIED. ; ; NLEN = OPTIONAL ARGUMENT SPECIFYING THE LENGTH OF THE ; STRING TO BE JUSTIFIED. IF THE ARGUMENT IS NOT ; SUPPLIED THE STRING IS SCANNED UNTIL AN ASCII NULL ; CHARACTER IS ENCOUNTERED. ; ; ; DESCRIPTION: ; ; "RTJUST" RIGHT JUSTIFIES AN ASCII STRING. THE RIGHT MARGIN OF THE ; JUSTIFIED STRING IS OPTIONALLY SPECIFIED BY THE "ILEN" PARAMETER. IF ILEN ; IS NOT SUPPLIED JUSTIFICATION IS CONTROLLED BY THE OCCURANCE OF AN ASCII ; NULL STRING TERMINATOR. ; ; EXAMPLES: ; ; STR1: 'ABC ' ; STR2: 'ABC ' ; ; CALL RTJUST(STR1) ; CALL RTJUST(STR2,4) ; ; STR1: ' ABC' ; STR2: ' ABC ' ; ; .SBTTL ENTRY POINT -- RIGHT-JUSTIFY ASCII STRING ; ; .PSECT ; ; RTJUST:: ; ; MOV 2(R5),R2 ; STRING ADDRESS TO R2 (OLD STRING) CLR R0 ; CLEAR R0 (ILEN) CMPB #2,(R5) ; AT LEAST TWO ARGUMENTS? BNE 2$ ; NO, GO SCAN STRING FOR ILEN TST 4(R5) ; NULL ARGUMENT? BEQ 2$ ; YES, GO SCAN STRING FOR ILEN MOV @4(R5),R0 ; ILEN TO R0 ADD R0,R2 ; R2 POINTS PAST STRING BR 4$ ; SKIP SCAN FOR ILEN ; ; SCAN STRING FOR ILEN 2$: TSTB (R2)+ ; END-OF-STRING? BEQ 4$ ; YES, GO SCAN PAST TRAILING CHARACTERS INC R0 ; NO, INCREMENT RIGHT-MARGIN COUNT BR 2$ ; AND CONTINUE TO SCAN ; ; SCAN PAST TRAILING CHARACTERS 4$: TST R0 ; ILEN=0? BLE RTN ; YES, RETURN MOV R2,R1 ; STRING ADDRESS TO R1 (NEW STRING) CLR R3 ; CLEAR TRAILING CHARACTER COUNT 6$: DEC R2 ; DECREMENT STRING POINTER CMPB #177,(R2) ; PRINTABLE CHARACTER? BEQ 10$ ; NO, GO INCREMENT TRAIL COUNT CMPB #040,(R2) ; PRINTABLE CHARACTER? BLT 12$ ; YES, GO JUSTIFY 10$: INC R3 ; INCREMENT TRAILING CHARACTER COUNT SOB R0,6$ ; CONTINUE SCAN BR RTN ; NOTHING TO JUSTIFY, RETURN TO CALLER ; ; JUSTIFY 12$: TST R3 ; ANY TRAILING CHARACTERS? BLE RTN ; NO, RETURN TO CALLER 14$: MOVB (R2),-(R1) ; COPY OLD STRING TO NEW DEC R2 ; DECREMENT OLD STRING POINTER SOB R0,14$ ; UNTIL EXHAUSTING OLD STRING 16$: MOVB #040,-(R1) ; PAD NEW STRING WITH SPACES SOB R3,16$ ; UNTIL FILLED ; RTN: RTS PC ; RETURN TO CALLER .END ;