.LIST TTM .TITLE FORMAT ; CALL FORMAT(N,ISZ,IBUF) ; WHERE ; N NUMBER OF CHARACTERS IN CURRENT LINE, CONTINUALY UPDATED ; BYE SUBROUTINE. SHOULD BE 0 FIRST TIME CALLED. ; ISZ BUFFER SIZE(IN BYTES) ; IBUF BUFFER POINTER ; FORMAT:: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV @4(R5),R0 ;BUFFER SIZE MOV 6(R5),R3 ;BUFFER POINTER MOV R3,R4 MOV @2(R5),R1 ;GET LINE SIZE BLE 20$ 10$: MOVB (R3)+,(R4)+ DEC R1 ;DEC. WORD COUNT DEC R0 ;DEC BUFFER SIZE BLE 30$ ;END OF BUFFER TST R1 ;ARE THERE MORE CHARACTERS IN LINE? BGT 10$ ;YES 15$: BIT #1,R3 ;TEST IF WORD BOUNDRY BEQ 20$ ;YES TSTB (R3)+ ;MAKE IT WORD BOUNDRY DEC R0 ;ARE WE STILL IN BUFFER? BLE 30$ ;NO, WE RETURN 20$: MOV (R3)+,R1 ;GET NEW LINE CNT BNE 25$ ;CHECK FOR 0 COUNT DEC R0 DEC R0 BLE 30$ BR 20$ 25$: TSTB -(R4) ;CHECK IF LAST BYTE LF CMPB #14,(R3) BNE 27$ INC IREC 27$: CMPB #12,(R4)+ BEQ 10$ ;YES, NO NEED TO ADD CR/LF MOVB #15,(R4)+ MOVB #12,(R4)+ DEC R0 DEC R0 BLE 30$ BR 10$ ;30$: SUB R4,R3 ; ADD R3,R0 ;40$: CLRB (R4)+ ; SOB R0,40$ 30$: SUB R3,R4 ADD R4,@4(R5) ;SHOW NEW BUFFER SIZE MOV R1,@2(R5) ;UPDATE CALLERS LINE CNT MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN .CSECT DUMDUM IREC: .WORD 0 .END