.TITLE PWSTRG - WRITE STRING .IDENT /790717/ .GLOBL P$FPAD,P$FPUT ; PARMS ; 1. POINTER TO FILE BLOCK ; 2. POINTER TO STRING ; 3. LENGTH OF STRING ; 4. WIDTH OF FIELD ; REGISTER USAGE ; R0 - SCRATCH ; R1 -> FILE BLOCK ; R2 - HOLDS PAD CHAR TO P$FPAD ; R3 - SIZE OF BUFFER VARIABLE ; R4 - NOT USED ; CALLS: P$FPUT,P$FPAD ; RASH ASSUMPTION: P$FPUT DOES NOT DISTURB R2,R3 ; $$$027:: MOV 8.(SP),R1 ;POINTER TO FILE BLOCK MOV (SP)+,6(SP) ;PUSH DOWN RETURN ADDRESS ; MOV (SP)+,R0 ;GET WIDTH OF FIELD BGT 1$ ;IF > 0, BRANCH ; MOV (SP),R0 ;MAKE IT SAME AS LENGTH 1$: SUB (SP),R0 ;WIDTH NOW IS # OF BLANKS FOR PADDING BGE 4$ ADD R0,(SP) ;LENGTH IS NOW FIELD WIDTH 4$: MOV R2,-(SP) ;SAVE R2 MOV #' ,R2 ; PAD CHAR IS BLANK JSR PC,P$FPAD ;OUTPUT TRAILING BLANKS (IF ANY) MOV (SP)+,R2 ;RESTORE R2 MOV (SP)+,R0 ;GET LENGTH BLT 2$ ;IF LENGTH <= 0, SKIP STRING OUTPUT ; MOV R3,-(SP) ;SAVE R3 MOV R0,R3 3$: MOVB @2(SP),@(R1) ;MOVE A CHAR INC 2(SP) ;BUMP POINTER MOV #1,R0 ;AND PUT JSR PC,P$FPUT SOB R3,3$ MOV (SP)+,R3 ;RESTORE R3 ; 2$: TST (SP)+ ;POP STRING PTR RTS PC .END