GETC.MAC=GETC.VGN;1/AU -/.ident/,. .IDENT /000006/ -/; 000005/ ; 000006 20 Nov 1981 RVT FOPEN "RU" DOES BLOCK I/O ; USE GET$S (USES LESS MEMORY) ; CHANGE TO ALLOW "LOCATE" MODE. -/.mcall/,. .MCALL GET$S,READ$,WAIT$ -/30$:/,. 30$: BIT #VF$NOS,(R4) ; BINARY ? BNE 100$ ; CORRECT, JUMP ; NOPE, STRIP OFF NULLS FROM CR/LF & LF/CR. APPEND TRAILING LF. DEC V$BCNT(R4) ; MORE TO GET? BMI 40$ ; NO, GO READ IN A NEW LINE BEQ 70$ ; IF EOL, GIVE A TRAILING LF movb @V$BPTR(r4),r0 ;Grab it inc V$BPTR(r4) ;Fix pointer bic #177400,r0 ;Mask number to 8 bits BEQ 30$ ; SKIP THIS NULL ; DON'T DO CR/LF CHECK IF THIS IS THE LAST CHAR CMP #1,V$BCNT(R4) BEQ 60$ ; LAST CHAR--RETURN CMPB #15,R0 ; CR?? BNE 35$ CMPB #12,@V$BPTR(R4) ; YUP, SEE IF CR/LF BEQ 30$ ; YES, IGNORE THE CR RETURN 35$: CMPB #12,R0 ; LF? BNE 60$ CMPB #15,@V$BPTR(R4) ; YUP, SEE IF THIS IS LF/CR BNE 60$ CLRB @V$BPTR(R4) ; YES, CREAM THE CR TO A NULL 60$: RETURN 70$: MOV #12,R0 ; IMPLIED TRAILING LF RETURN 100$: dec V$BCNT(r4) ;Get a byte from the line bmi 40$ ;Br if none movb @V$BPTR(r4),r0 ;Grab it inc V$BPTR(r4) ;Fix pointer bic #177400,r0 ;Mask number to 8 bits RETURN -/call $$get/ MOV V$FDB+F.NRBD+2(R4),V$BPTR(R4) ; GET RECORD ADDR -/GET$/,. BITB #FD.RWM,F.RACC(R0) ; BLOCK-MODE? BNE 15$ GET$S R0,R2,R1 ; NO, SEQUENTIAL GET BR 17$ ; BLOCK-MODE READ 15$: MOV R4,F.BKST(R0) ; SET UP THE IOSB ADDR ADD #V$IOSB,F.BKST(R0) READ$ R0,R2,R1 BCS 16$ ; ERROR, PROBABLY EOF WAIT$ R0 16$: MOV V$IOSB+2(R4),F.NRBD(R0) ; SET ACTUAL NUMBER OF BYTES READ 17$: -/getfix:/+2,/; Exit from $$get/ inc r0 ; count the implied trailing LF ; exit from $$Get /