.TITLE INPUT/OUTPUT CHRS .IF NDF,RSX .MCALL .READW,.WRITW .GLOBL INBUF,OUTBUF,OUTBLK,IOARA,INBLK .IFF .MCALL GET$,PUT$ .GLOBL HIINBP .ENDC .GLOBL GETCHR,PUTCHR,EOF,INBFPT,LEOF .GLOBL OTBFPT,DOFLOW,ICHNO,NOSRC,SRCSYM .IF DF,F4P .GLOBL SAVENO,RESTFI .ENDC .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 .IF NDF,RSX CMP INBFPT,#INBUF+512. ; HAS BUFFER BEEN USED UP YET .IFF TST LEOF BNE EOFND CMP INBFPT,HIINBP .IFTF BLT NOOVFL ; BRANCH AROUND READ IF NOT YET .IFT .READW #IOARA,ICHNO,#INBUF,#256.,INBLK ; READ NEW .IFF GET$ @ICHNO,#IBUFF,#132. .IFTF BCC NOEOF .IFF INC LEOF BR NOEOF EOFND: .IFTF .IF DF,F4P TST SAVENO BEQ 1$ CLR LEOF JSR PC,RESTFI BR GETCHR .ENDC 1$: INC EOF ; SET EOF FOUND FLAG RTS PC NOEOF: .IFT INC INBLK ; INC INPUT BLOCK CTR SO NEXT READ GETS NEXT INPUT ; FILE BLOCK MOV #INBUF,INBFPT ; RESET THE INPUT BUFFER POINTER .IFF MOV F.NRBD+2(R0),INBFPT MOV INBFPT,HIINBP ADD F.NRBD(R0),HIINBP MOVB #15,R0 RTS PC .ENDC 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 TST DOFLOW BNE NOTFUL TST NOSRC BEQ 111$ TST SRCSYM BEQ NOTFUL 111$: MOVB R0,@OTBFPT ; MOV CHR TO BUFFER-OTBFPT POINTS ; TO THE NEXT AVAILABLE BYTE IN BUFFER INC OTBFPT ; UPDATE PONTER .IF NDF,RSX 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 .IFF CMPB #12,R0 BNE 1$ DEC OTBFPT ;IGNORE LINE FEEDS 1$: CMPB #15,R0 BNE NOTFUL MOV R1,-(SP) MOV OTBFPT,R1 SUB #LBUFF+1,R1 BITB #FD.FTN,LSTFIL+F.RATT BEQ 2$ ;OUTPUT FILE FORTRAN FORMAT ???? ; YES-MUST CLUGE IN FORTRAN CARRAGE CONTROL CMPB #14,LBUFF ;LEADING FORM FEED ??? BNE 4$ ;NO-MUST PUT IN LEADING BLANK MOVB #'1,LBUFF ;PUT FORTRAN F.F. LEADING 1- IN ITS PLACE BR 2$ ;AND WRITE IT 4$: MOVB #40,LBUFF-1 ;BUT IN LEADING BLANK FOR NEXT LINE CARRAGE CONTROL INC R1 ;ONE MORE CHARACTER TO PRINT OUT PUT$ #LSTFIL,#LBUFF-1,R1;SEND THE NEW FORTRAN LINE BR 3$ ;FINISH UP 2$: PUT$ #LSTFIL,#LBUFF,R1 3$: MOV #LBUFF,OTBFPT MOV (SP)+,R1 .ENDC NOTFUL: RTS PC .END