     .OUTPI ALFRES
     .ENTRY OBINIT,OBUFF,FPUTC,OBMAX,OFLUSH,OUTERR
     .VIRT8 OPTR,TMPSIZ,OBLEN

OBUFF *=*+2
OBMAX *=*+2
OUTERR .BYTE "Error Writing Output File",$9B
      .BYTE "Disk Full??",$9B,0

OBINIT LDA OBMAX
       STA OBLEN
       LDA OBMAX+1
       STA OBLEN+1
       LDA OBUFF
       STA OPTR
       LDA OBUFF+1
       STA OPTR+1
       RTS

FPUTC  LDY #0
       STA (OPTR),Y
       INC OPTR
       BNE FPUT01
       INC OPTR+1
FPUT01 LDA OBLEN
       BNE FPUT02
       DEC OBLEN+1
FPUT02 DEC OBLEN
       LDA OBLEN
       ORA OBLEN+1  FLUSH ?
       BNE FPUT03
       JSR OFLUSH
       JSR OBINIT
FPUT03 LDY #1
       RTS

OFLUSH LDA OBUFF
       STA ADR
       LDA OBUFF+1
       STA ADR+1
       LDA OBMAX
       SEC
       SBC OBLEN
       STA LEN
       LDA OBMAX+1
       SBC OBLEN+1
       STA LEN+1
       LDA LEN
       CLC
       ADC TMPSIZ
       STA TMPSIZ
       LDA LEN+1
       ADC TMPSIZ+1
       STA TMPSIZ+1
       BCC OFL03
       INC TMPSIZ+2
OFL03  LDA LEN
       ORA LEN+1
       BNE OFL01
OFL02  LDY #1
       RTS
OFL01  LDX #D2
       JSR BPUT
       BPL OFL02
       LDX #.LO.OUTERR
       LDY #.HI.OUTERR
       JSR SCRPRT
       JMP ARCXIT
