     .OUTPI ALFRES
     .ENTRY FGETC,FINIT,IBUFF,IBMAX,IBINIT,INPERR,IEOF
     .VIRT8 IPTR

IBUFF *=*+2      INPUT BUFFER ADR
IBMAX *=*+2      MAX SIZE FOR RELOADS
IBLEN *=*+2      LENGTH REMAINING
IBOFF *=*+1      OFFSET TO BUFFER
IEOF  *=*+1      EOF MARKER

INPERR .BYTE "I/O Error Reading Archive",$9B
FINIT  JSR IBINIT
       JSR OBINIT
       RTS

IBINIT LDA #0    CAUSE RELOAD
       STA IBLEN
       STA IBLEN+1
       RTS

FGETC  LDA IBLEN
       ORA IBLEN+1  ANY DATA LEFT ?
       BEQ FGET00
       JMP FGET10
FGET00 LDA IBUFF
       STA ADR
       STA IPTR
       LDA IBUFF+1
       STA ADR+1
       STA IPTR+1
       LDA IBMAX
       STA LEN
       LDA IBMAX+1
       STA LEN+1
       LDX #D
       JSR RELOAD
       STY IEOF
       TYA
       BPL FGET03
       CPY #$88
       BEQ FGET01
       LDX #.LO.INPERR
       LDY #.HI.INPERR
       JSR SCRPRT
       JMP ARCXIT
FGET01 LDA LEN
       ORA LEN+1
       BNE FGET03
FGET02 LDY #$88    SAY EOF
       RTS
FGET03 LDA LEN
       STA IBLEN
       LDA LEN+1
       STA IBLEN+1
       LDA IBUFF
       STA IPTR
       LDA IBUFF+1
       STA IPTR+1

FGET10 LDY #0        GET OLD OFFSET
       LDA (IPTR),Y
       INC IPTR
       BNE FGET11
       INC IPTR+1
FGET11 LDX IBLEN
       BNE FGET12
       DEC IBLEN+1
FGET12 DEC IBLEN
       LDY #1
       RTS
