         .OUTPI ALFRES
         .ENTRY PUTNCR,STATE

;This routine is used to decode non-repeat compression. Bytes are
;passed one at a time in coded format, and are written out uncoded.
;On Entry, Acc=char to process
;The caller must unsure that STATE is initialized properly.
;The data is stored normally, except that runs of more than two
;characters are represented as:

;     <char> <DLE> <count>

;With a special case that a count of zero indicates a DLE as data
;not as a repeat marker

DLE   = $90                     SPECIAL DLE MARKER CODE
CNTR     *=*+1                  COUNTER FOR DLE
STATE    *=*+1                  0=FIRST CHAR, 1=REPEAT STRING
LASTC    *=*+1                  LAST CHAR FOR STRINGS

PUTNCR   LDX STATE              FIRST OR STRING PART
         BNE PUT002             BRANCH TO REPEATER
         CMP #DLE               IF STARTING A SERIES
         BNE PUT001
         LDX #1                 SWITCH TO INREP
         STX STATE
         RTS
PUT001   JSR ADDCRC             UPDATE CRC CODE
         STA LASTC              SAVE THE CHAR
         JSR FPUTC              WRITE CHARACTER
         RTS
PUT002   CMP #0                 SPECIAL DLE CASE ?
         BNE PUT004
         LDA #DLE
         JSR ADDCRC
         JSR FPUTC
PUT003   LDA #0
         STA STATE              RETURN TO NO HIST
         RTS
PUT004   STA AX                 STORE THE COUNT
         BNE PUT006
PUT005   LDA LASTC
         JSR PUT001             WRITE THE CHAR
         BMI PUT003
PUT006   DEC AX                 CONTINUE WHILE NOT ZERO
         BNE PUT005
         BEQ PUT003
