.TITLE INPUT/OUTPUT CHRS .MCALL .READW,.WRITW .GLOBL GETCHR,PUTCHR,EOF,INBUF,INBFPT .GLOBL INBLK,OUTBUF,OTBFPT,OUTBLK .GLOBL IOARA,SAVENO,RESTFI,ICHNO .PSECT IOCHR,I,RO,GBL .PAGE 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 #IOARA,ICHNO,#INBUF,#256.,INBLK ; READ NEW ; INPUT BUFFER-WAIT UNTILL DONE BCC NOEOF ; ANY EROOR TREAT AS EOF FOUND TST SAVENO BEQ 1$ JSR PC,RESTFI BR GETCHR 1$: 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 CMPB #14,R0 BNE 1$ .GLOBL LINCTR CLR LINCTR BR GETCHR 1$: RTS PC ; RETURN TO CALL ING ROUTINE WITH CHR INR0 .PAGE 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 #IOARA,#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 .END