.TITLE LOGPB - PUT BYTE IN OUTPUT BUFFER .IDENT /01.00/ .LIST MEB ; ; AUTHOR: H. L. COLEMAN ; MILLIKEN AND COMPANY ; P. O. BOX 1926 ; MAIL STOP M-103 ; SPARTANBURG, S. C. 29304 ; (803)573-2556 ; ; VERSION: 01.00 ; ; DATE: 30-MAR-78 ; ; MODIFICATIONS: ; ; FUNCTION: PUT ONE CHARACTER IN OUTPUT BUFFER AND MAINTAIN CONTROL ; OVER VFC. ; ; INPUT: ; ; R0 = CHARACTER ; R4 = COUNT REMAINING IN OUTPUT BUFFER ; R5 = A(POSITION IN OUTPUT BUFFER) ; ; OUTPUT: ; ; OUTPUT BUFFER UPDATED ; R4 = UPDATED ; R5 = UPDATED ; LINCNT = UPDATED ; .PAGE ; MACRO CALLS AND SYSTEM DEFINITIONS ; .MCALL WTSE$S,CLEF$S,MSGN$S,WRITE$ .MCALL FDOF$L,NBOF$L,FCSBT$ FDOF$L ;DEFINE FDB OFFSETS NBOF$L ;DEFINE FNB OFFSETS FCSBT$ ;DEFINE FCS BITS .PAGE $LOGPB::MOVB R0,CHAR ;SAVE CHARACTER CMPB #40,CHAR ;SPECIAL CHARACTER BLOS 1100$ ;IF LOS, NO - THATS EASY TSTB CHAR ;NULL ? BEQ 1100$ ;IF EQ, YES - THAT'S EASY TOO CMPB #12,CHAR ;LINE FEED ? BNE 1000$ ;IF NE, NO - KEEP TRYING INC LINCNT ;BUMP LINE COUNT CMP #60.,LINCNT ;PAGE OVERFLOW ? BGT 1100$ ;IF GT, NO CLR LINCNT ;RESET COUNT MOVB #14,CHAR ;CONVERT TO FORM FEED BR 1100$ ;GO DO IT 1000$: CMPB #11,CHAR ;TAB ? BEQ 1100$ ;IF EQ, YES - THAT'S EASY AGAIN CMPB #14,CHAR ;FORM FEED ? BNE 1150$ ;IF NE, NO - LOOK SOME MORE CLR LINCNT ;RESET COUNT BR 1100$ ;GO DO IT 1150$: CMPB #15,CHAR ;CARRIAGE RETURN ? BEQ 1100$ ;IF EQ, YES - ANOTHER EASY ONE MOVB #'^,R0 ;INSERT "^" CALL PUTBYT ;INSERT IN OUTPUT BUFFER BISB #100,CHAR ;MAKE IT PRINTABLE MOVB CHAR,R0 ;R0 = CHARACTER CALL PUTBYT ;INSERT IN OUTPUT BUFFER MOVB #15,R0 ;R0 = "CR" CALL PUTBYT ;INSERT IN OUTPUT BUFFER MOVB #12,R0 ;R0 = "LF" CALL PUTBYT ;INSERT IN OUTPUT BUFFER RETURN ;RETURN TO CALLER 1100$: MOVB CHAR,R0 ;R0 = CHARACTER CALL PUTBYT ;PUT IT IN OUTPUT BUFFER RETURN ;RETURN TO CALLER .PAGE ; PUTBYT - SUBROUTINE TO PUT BYTE IN OUTPUT BUFFER AND WRITE THE BUFFER ; WHEN REQUIRED. ; ; INPUT: ; ; R0 = CHARACTER ; R4 = COUNT REMAINING IN OUTPUT BUFFER ; R5 = A(POSITION IN OUTPUT BUFFER) ; ; OUTPUT: ; ; R4 = UPDATED ; R5 = UPDATED ; BUFFER WRITTEN IF REQUIRED ; PUTBYT: MOVB R0,(R5)+ ;MOVE CHARACTER TO OUTPUT BUFFER DEC R4 ;ADJUST COUNT BNE 1400$ ;IF NE, NOT FULL YET 1000$: TST LIOSB ;HAS LAST WRITE COMPLETED ? BNE 1100$ ;IF NE, YES - GO WRITE BLOCK WTSE$S #2 ;WAIT FOR WRITE CLEF$S #2 ;CLEAR FLAG BR 1000$ ;TRY AGAIN 1100$: BPL 1300$ ;IF PL, NO ERROR 1200$: MSGN$S PFX,3,M007,,,ABORT ;I-O ERROR ON LOG FILE CALL $LOGER ;TELL HIM MORE MOV TTUCB,R0 ;R0 = A(TERMINAL UCB) CLR TTLOG(R0) ;TURN OFF LOGGING MOV CURBUF,R5 ;RESET MOV #512.,R4 ;RESET RETURN ;RETURN TO CALLER 1300$: WRITE$ #LOGFL,CURBUF ;WRITE THE BUFFER BCS 1200$ ;IF CS, ERROR MOV NXTBUF,R5 ;R5 = A(NEW BUFFER) MOV CURBUF,NXTBUF ;RESET NEXT BUFFER MOV R5,CURBUF ;SET CURRENT BUFFER MOV #512.,R4 ;SET NEW COUNT 1400$: RETURN ;RETURN TO CALLER .END