; VT25 generic 24x80 document serialization over a caller-provided byte sink.
; NO RS232C or OM52C references: VT_OUTBYTE($16) -> $0 status.
; Caller provides VT_EXP_PTR (2), VT_EXP_COL (1), VT_EXP_ROW (1) RAM symbols,
; VT_OUTBYTE callback, VT_HOST_RAM to restore RAM context, and a bound source.
; Return $0=0 if all bytes accepted by sink, nonzero on sink error.
; 24*(80 raw data bytes + 0D 0A) = 1968; never trim or modify canvas.
; No internal RS_OPEN or RS_CLOSE; caller owns transport lifecycle.
VT_EXPORT:
        CAL     VT_HOST_RAM
        PRE     IX,_VT_DOC_KIND
        LD      $0,(IX+$SX)
        SBC     $0,4
        JP      NC,VTE_BAD
        PRE     IX,_VT_DOC_BASE
        LDW     $20,(IX+$SX)
        PRE     IX,VT_EXP_PTR
        STW     $20,(IX+$SX)
        PRE     IX,VT_EXP_ROW
        LD      $0,24
        ST      $0,(IX+$SX)
VTE_ROW:
        PRE     IX,VT_EXP_COL
        LD      $0,80
        ST      $0,(IX+$SX)
VTE_BYTE:
        PRE     IX,VT_EXP_PTR
        LDW     $2,(IX+$SX)
        CAL     VT_GET_CHAR
        CAL     VT_OUTBYTE
        CAL     VT_HOST_RAM
        AN      $0,$0
        JP      NZ,VTE_RET
        PRE     IX,VT_EXP_PTR
        LDW     $20,(IX+$SX)
        ADW     $20,$SY
        STW     $20,(IX+$SX)
        PRE     IX,VT_EXP_COL
        LD      $0,(IX+$SX)
        SB      $0,$SY
        ST      $0,(IX+$SX)
        JP      NZ,VTE_BYTE
        LD      $16,&H0D
        CAL     VT_OUTBYTE
        CAL     VT_HOST_RAM
        AN      $0,$0
        JP      NZ,VTE_RET
        LD      $16,&H0A
        CAL     VT_OUTBYTE
        CAL     VT_HOST_RAM
        AN      $0,$0
        JP      NZ,VTE_RET
        PRE     IX,VT_EXP_ROW
        LD      $0,(IX+$SX)
        SB      $0,$SY
        ST      $0,(IX+$SX)
        JP      NZ,VTE_ROW
        LD      $0,0
VTE_RET:
        RTN
VTE_BAD:
        LD      $0,1
        RTN
; end of include
