.TITLE LJUST - LEFT JUSTIFY .IDENT /03MAY7/ ;14:50:00 LV ; .ENTRY LJUST - LEFT JUSTIFY ;+ ; L J U S T ; ; PURPOSE: LEFT JUSTIFY A STRING OF CHARACTERS ; ; INTERFACE: CALLING SEQUENCE: (FORTRAN-CALLABLE SUBROUTINE) ; CALL LJUST(STRING,NBYTES) ; ; INPUT: STRING = ADDRESS OF CHARACTER STRING ; NBYTES(INTEGER) = NUMBER OF BYTES IN STRING ; ; METHOD: WILL LEFT JUSTIFY A CHARACTER STRING BY DELETING ; THE LEFT-MOST BLANKS AND SHIFTING UNTIL THE LEFT-MOST ; CHARACTER IS NON-BLANK. NOTE THAT NULL CHARACTERS ; ARE NOT TREATED AS BLANKS, ALTHOUGH THEY ARE PRINTED ; AS SUCH. THIS ALLOWS THE JUSTIFICATION TO BE BIASED ; WITH NULLS. THE LIBRARY ROUTINE BLKFIL MAY BE USED ; TO PREVENT UNINTENTIONAL BIASING OF THIS NATURE. ; ; LANGUAGE: MACRO-11 ; ;- ; REVISIONS: ; JAN-75 RK WRITTEN ; 02-SEP-76 SS REMOVE REQUIREMENT FOR NON-STANDARD MACROS ; 20-JAN-77 NS REMOVE LOCAL DEFINITIONS OF NON-STANDARD MACROS. ; THIS WILL BE HANDLED BY THE PREFIX FILE. ; 03-MAY-77 LV UPDATED TO CONFORM TO STANDARDS ; ; MACROS .MCALL PUSH,POP ; LJUST:: PUSH MOV 2(R5),R0 ;ADDRESS OF STRING MOV @4(R5),R1 ;NUMBER OF BYTES BLE DONE ;RETURN IF LOW BYTE COUNT 10$: CMPB (R0)+,#40 ;IS THIS BYTE A BLANK? BNE 20$ ;NO, START SHIFTING SOB R1,10$ ;YES, KEEP SQUEEZING BLANKS BR DONE ;RETURN IF NO NON-BLANKS IN STRING 20$: DEC R0 ;POINT TO 1ST NON-BLANK CMP 2(R5),R0 ;WERE THERE ANY BLANKS? BEQ DONE ;NO, NO JUSTIFICATION IS NECESSARY MOV R1,R3 ;SAVE # OF NON-BLANK BYTES MOV 2(R5),R2 ;ADDRESS OF BEGINNING OF STRING 30$: MOVB (R0)+,(R2)+ ;COPY STRING SOB R1,30$ MOV @4(R5),R1 ;NUMBER OF BYTES IN STRING SUB R3,R1 ;R1=NUMBER OF BYTES TO CLEAR 40$: MOVB #40,(R2)+ ;CLEAR GARBAGE SOB R1,40$ DONE: POP RETURN .END