.TITLE CENTER - CENTER A STRING .IDENT /04MAY7/ ;12:57:00, SJS ; .ENTRY CENTER - CENTER A STRING ;+ ; C E N T E R ; ; PURPOSE: CENTER A STRING ; ; INTERFACE: CALLING SEQUENCE: (FORTRAN-CALLABLE SUBROUTINE) ; ; CALL CENTER (STRING,NBYTES) ; ; INPUT: STRING = ADDRESS OF CHARACTER STRING ; NBYTES(INTEGER) = NUMBER OF BYTES IN STRING ; ; METHOD: WILL CENTER A CHARACTER STRING BY LEFT ; JUSTIFYING IT AND COUNTING THE NUMBER ; OF RIGHT-MOST BLANKS, THE STRING IS ; THEN SHIFTED SO THAT AN EQUAL NUMBER OF ; BLANKS ARE ON EACH END OF THE STRING. ; ; LANGUAGE: MACRO-11 ;- ; REVISIONS: ; 01-JAN-75 RK WRITTEN ; 02-SEPT-76 SS DEFINE SPECIAL MACROS LOCALLY ; 20-JAN-77 NS REMOVE DEFINITIONS OF SPECIAL MACROS ; THESE MACROS ARE HANDLED BY THE PREFIX FILE ; 04-MAY-77 SJS UPDATED TO CONFORM TO STANDARDS ; .PAGE ; MACRO CALLS .MCALL PUSH,POP,CALL ; .ENABL LSB CENTER::PUSH MOV R5,R1 ;SAVE ARGUMENT POINTER MOV @4(R1),NBYTES ;STORE NUMBER OF BYTES BEQ DONE ;RETURN IF ZERO BYTE COUNT CALL LJUST <2(R1),NBYTES> ;LEFT JUSTIFY STRING CALL NCHAR <2(R1),NBYTES> ;NUMBER OF CHARS IN R0 TST R0 ;DO WE HAVE ANYTHING TO CENTER? BEQ DONE ;NO, RETURN CMP R0,NBYTES ;FULL STRING? BEQ DONE ;YES, RETURN MOV NBYTES,R5 ;COMPUTE # OF BLANKS ON END SUB R0,R5 CLR R4 ;COMPUTE HALF OF THAT DIV #2,R4 ADD R0,R4 ;COMPUTE NEW END OF STRING MOV R0,OLD ;STORE REGISTER VALUES FOR CALLS MOV R4,NEW 10$: CALL FETCH ;MOVE STRING CALL PUT DEC NEW DEC OLD BNE 10$ CMP NEW,#1 ;DO WE HAVE TO CLEAR? BLT DONE ;NO 20$: CALL PUT ;BLANK OUT GARBAGE DEC NEW BNE 20$ .DSABL LSB DONE: POP RETURN NBYTES: 0 OLD: 0 NEW: 0 HOLD: 0 .END