.TITLE INPUT/OUTPUT CHRS .MCALL ..V2..,.REGDEF ..V2.. .REGDEF .MCALL .READW,.WRITW .GLOBL GETCHR,PUTCHR,LINENO,EOF,OUTLIN,GETLIN,INBUF,INBFPT .GLOBL INBLK,OUTBUF,OTBFPT,OUTBLK,LINE,LINEPT,PRTLIN,DECOUT .GLOBL LABL .CSECT IOCHR ; GETCHR: ;THIS ROUTINE USED BY GET LINE TO CONSTRUCT ONE LINE OF ;CODE OUT OF THE INPUT BUFFER-WHEN INDEX RUN INITIALISED ;BUFFER IS FILLED AND INTERMIDEATE BUFFER LIN SHOULD BE ;FILLED CMP INBFPT,#INBUF+512. ;HAS BUFFER BEEN USED UP YET BLT NOOVFL ;BRANCH AROUND READ IF NOT YET .READW #RDARA,#3,#INBUF,#256.,INBLK ;READ NEW ;INPUT BUFFER-WAIT UNTILL DONE BCC NOEOF ;ANY EROOR TREAT AS EOF FOUND INC EOF ;SET EOF FOUND FLAG RTS PC NOEOF: INC INBLK ;INC INPUT BLOCK CTR SO NEXT READ GETS NEXT INPUT ;FILE BLOCK MOV #INBUF,INBFPT ;RESET THE INPUT BUFFER POINTER NOOVFL: MOVB @INBFPT,R0 ;GET A CHARACTER-IN BUF POINTS TO ;NEXT AVAIALABLE CHARACTER INC INBFPT ;INC PTR TO NEXT CHR RTS PC ;RETURN TO CALL ING ROUTINE WITH CHR INR0 ; PUTCHR: ;THIS ROUTINE PUTS THE CHR FOUND IN RO INTO ;THE OUTPUT BUFFER,AND WRITES OUT THE BUFFER WHEN FULL MOVB R0,@OTBFPT ;MOV CHR TO BUFFER-OTBFPT POINTS ; TO THE NEXT AVAILABLE BYTE IN BUFFER INC OTBFPT ;UPDATE PONTER CMP OTBFPT,#OUTBUF+512. ;BUFFER FULL YET BLT NOTFUL ;BR IF NOT FULL YET .WRITW #RDARA,#0,#OUTBUF,#256.,OUTBLK ;OUTPUT FULL BLOCK TO OUTPUT FILE ;WAIT UNTI; DONE OTBFCL: DEC OTBFPT ;DEC PTR CLRB @OTBFPT ;CLR A CHR IN BUFFER CMP #OUTBUF,OTBFPT ;BUFFER CLEAR YET BLT OTBFCL ;NO CLEAR NEXT BYTE INC OUTBLK ;INC OUTPUT BLOCK POINTER NOTFUL: RTS PC RDARA: .BLKW 6 .END