.TITLE LFJUST .IDENT /V01/ .SBTTL DESCRIPTION ; ; ; COMPONENT: LFJUST ; ; 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 LFJUST(STRING,[ILEN]) ; ; STRING = VARIABLE OR ARRAY CONTAINING STRING TO BE JUSTIFIED. ; ; ILEN = 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: ; ; "LFJUST" LEFT 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 LFJUST(STR1) ; CALL LFJUST(STR2,4) ; ; STR1: 'ABC ' ; STR2: 'A BC' ; ; .SBTTL ENTRY POINT -- LEFT-JUSTIFY ASCII STRING ; ; .PSECT ; ; LFJUST:: ; ; MOV 2(R5),R2 ; STRING ADDRESS TO R2 (OLD STRING) 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 BR 6$ ; SKIP SCAN FOR ILEN ; ; SCAN STRING FOR ILEN 2$: MOV R2,R1 ; STRING ADDRESS TO R1 CLR R0 ; CLEAR R0 (ILEN) 4$: TSTB (R1)+ ; END-OF-STRING? BEQ 6$ ; YES, GO SCAN PAST LEADING CHARACTERS INC R0 ; NO, INCREMENT RIGHT-MARGIN COUNT BR 4$ ; AND CONTINUE TO SCAN ; ; SCAN PAST LEADING CHARACTERS 6$: TST R0 ; ILEN=0? BLE RTN ; YES, RETURN MOV R2,R1 ; STRING ADDRESS TO R1 (NEW STRING) CLR R3 ; CLEAR LEADING CHARACTER COUNT 10$: CMPB #177,(R2) ; PRINTABLE CHARACTER? BEQ 12$ ; NO, GO INCREMENT LEAD COUNT CMPB #040,(R2) ; PRINTABLE CHARACTER? BLT 14$ ; YES, GO JUSTIFY 12$: INC R3 ; INCREMENT LEADING CHARACTER COUNT INC R2 ; INCREMENT STRING POINTER SOB R0,10$ ; CONTINUE SCAN BR RTN ; NOTHING TO JUSTIFY, RETURN TO CALLER ; ; JUSTIFY 14$: TST R3 ; ANY LEADING CHARACTERS? BLE RTN ; NO, RETURN TO CALLER 16$: TSTB (R2) ; END-OF-STRING? BNE .+6 ; MOVB #040,(R2) ; YES, FORCE SPACES INTO OLD STRING MOVB (R2)+,(R1)+ ; COPY OLD STRING TO NEW SOB R0,16$ ; UNTIL EXHAUSTING OLD STRING 20$: MOVB #040,(R1)+ ; PAD NEW STRING WITH SPACES SOB R3,20$ ; UNTIL FILLED ; RTN: RTS PC ; RETURN TO CALLER .END ;