.TITLE FMTFFW .IDENT /V7.01/ ;+ ; ; FMTFFW ; ; THIS ROUTINE IS A GENERAL FORMATTING ROUTINE WHICH GIVES A ; PADDED FIELD OF A SPECIFIED WIDTH. IF THE FIELD DOES NOT ; FIT IN THE SPECIFIED NUMBER OF PLACES, THE FIELD IS FILLED ; WITH ASTERISKS. THE ADDRESS OF A ROUTINE IS PROVIDED TO ; PRODUCE THE ACTUAL FORMAT. THIS ROUTINE THEN RIGHT-JUSTIFIES ; IT IN THE SPECIFIED FIELD. ; TO BE USED WITH FM.CHG, FM.CPU, FM.CON AND FM.QIO ONLY. ; ; INPUTS: ; R0 BUFFER ADDRESS ; R1 ADDRESS OF 2-WORD INPUT NUMBER ; R2 FIELD WIDTH ; R3 ADDRESS OF USER FORMATTING ROUTINE ; ; OUTPUTS: ; R0 UPDATED ; R1,R2 USED ; ; VERSION: V7 OCTOBER 1981 ; ; STEVE THOMPSON ; SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA ; NY 14853 ; ; REVISION HISTORY ; ---------------- ; ; SMT821 23-APR-82 CHANGED ENTRY POINT NAMES OF ACCOUNTING ; SUPPORT ROUTINES (SEE MODIFY.TXT) ; ;- BUFSIZ = 40. ; SIZE OF INTERNAL BUFFER (SHOULD BE BIG ; ENOUGH FOR ALL REQUESTS) BUF: .BLKB BUFSIZ ; INTERNAL FORMATTING BUFFER .EVEN FM.FFW::TST R2 ; VALID FIELD WIDTH SPECIFIED? BLE 60$ ; IF LE NO, RETURN MOV R0,-(SP) ; SAVE BUFFER ADDRESS MOV R2,-(SP) ; SAVE FIELD WIDTH MOV #BUF,R0 ; SET NEW BUFFER CALL (R3) ; CALL USER-SUPPLIED FORMATTING ROUTINE SUB #BUF,R0 ; CALCULATE SIZE OF THE FIELD MOV R0,R1 ; COPY IT TO R1 MOV (SP)+,R2 ; RESTORE FIELD WIDTH MOV (SP)+,R0 ; RESTORE BUFFER POINTER CMP R1,R2 ; SPECIFIED FIELD WIDTH TOO SMALL? BLE 20$ ; IF LE NO 10$: MOVB #'*,(R0)+ ; YES, INSERT AN ASTERISK DEC R2 ; ANY MORE FIELD POSITIONS LEFT BGT 10$ ; IF GT YES, LOOP RTS PC ; ELSE RETURN 20$: SUB R1,R2 ; CALCULATE SPACE FILL REQUIRED BEQ 40$ ; IF EQ NONE 30$: MOVB #40,(R0)+ ; INSERT A SPACE DEC R2 ; ANY MORE SPACE FILL? BGT 30$ ; IF GT YES, LOOP 40$: MOV #BUF,R2 ; GET ADDRESS OF INTERNAL VERSION 50$: MOVB (R2)+,(R0)+ ; COPY A BYTE TO USER BUFFER DEC R1 ; ANY MORE TO COPY? BGT 50$ ; IF GT YES, LOOP 60$: RTS PC ; ELSE RETURN TO CALLER .END