.TITLE UTIL -- UTILITY ROUTINES .IDENT /1/ .MCALL IF,END,PUT$,ERR$P,ERR$S,STRMACS,IFB,ELSE STRMACS ; ; PUT ; ; ROUTINE TO DUMP A LINE TO THE OUTPUT FILE. ; CHECKS FOR PAGINATION ETC. ; ; ON ENTRY, R0 POINTS TO LAST BYTE IN BUFFER ; PUT:: IFB @OUT+F.NRBD+2,EQ,#'0 ;IF SKIPPING A LINE INC LINE ;BUMP LINE COUNT END CALL LPUT ;CALL INTERNAL PUT ROUTINE IF ,CS ;IF ERROR PERR: SEC ;SHOW SO PRTN: RETURN ;AND EXIT END INC LINE ;BUMP LINE ON PAGE COUNT IF LINE,GT,LINCNT ;IF PAGE IS FULL CALL NEWPAG ;OUTPUT A NEW PAGE ELSE CLC ;OTHERWISE SHOW NO ERRORS END BR PRTN ;AND RETURN ; ; NEWPAG ; ; ROUTINE TO ADVANCE TO A NEW PAGE ; NEWPAG:: CLR LINE ;START A NEW PAGE MOV OUT+F.NRBD+2,R0 ;GET BUFFER ADDRESS MOV #TITLE,R1 ;ADDRESS OF TITLE LINE MOV #LTITLE,R2 ;AND TITLE SIZE 10$: MOVB (R1)+,(R0)+ ;MOVE IT IN SOB R2,10$ ;AND LOOP INC PAGE ;INCREMENT PAGE COUNT MOV PAGE,R1 ;GET PAGE NUMBER CLR R2 ;SUPPRESS LEADING ZEROS CALL $CBDSG ;CONVERT TO PRINTABLES CALL LPUT ;PUT TITLE LINE MOVB #'0,@OUT+F.NRBD+2 ;SKIP A LINE ON NEXT PUT IF ,CC ;IF OK CALL LPUT ;SKIP THE LINE END RETURN ; ; ROUTINE TO ACTUALLY DO A PUT ; ; ON ENTRY, R0 POINTS JUST PAST END OF BUFFER ; LPUT: SUB OUT+F.NRBD+2,R0 ;FIND BUFFER SIZE MOV R0,OUT+F.NRBD ;AND UPDATE FDB PUT$ #OUT ;WRITE THE RECORD IF ,CS ;IF ERROR MOV R1,-(SP) ;SAVE REGISTER MOVB F.ERR(R0),R1 ;GET ERROR CODE NEG R1 ;... ERR$P #ERR,<%ERROR WRITING OUTPUT FILE : >,R1 ERR$P #ERR,<%%> MOV (SP)+,R1 ;RESTORE REGISTER LPERR: SEC ;SHOW ERROR LPRTN: RETURN ;AND RETURN END MOV OUT+F.NRBD+2,R0 ;GET BUFFER ADDRESS MOVB #' ,(R0)+ ;AND USE CR TYPE CARRIAGE CONTROL BR LPRTN ;AND RETURN .END