• docs/zmodem_comparison.md src/sbbs3/zmodem.h

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Aug 30 03:34:38 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/7bc6f244d87a80c113f2fbfc
    Modified Files:
    docs/zmodem_comparison.md src/sbbs3/zmodem.h
    Log Message:
    zmodem: note that ZF0 bit 0x08 is contested, and document two gaps

    Audit of every sexyz option -- command-line, sexyz.ini and negotiated -- prompted by Escape8thBit having been inert for 21 years. The parsed
    surface came out clean: all 43 ini keys and all 16 command-line options
    reach something live, and the six knobs that should show up in the
    negotiated ZRINIT all do (FullDuplex clears CANFDX, CRC32=false clears
    CANFC32, EscapeCtrlChars sets ESCCTL, RecvBufSize sets the buffer field, Streaming=false clears CANOVIO and sets it to the block size).
    MaxFileSize refuses an oversized file and RecvTimeout changes the
    engine's per-read timeout. No second dead option.

    The gaps are all in the negotiated layer, and two are worth writing down
    in the feature table rather than leaving for the next person to
    rediscover:

    - We never send a ZSINIT, and a received one is ACKed with its flags and
    Attn string discarded. lrzsz handles it both ways and DSZ sends one
    when it has something to declare -- observed once, for sz -e -- while
    zmtx never sends one either.
    - As a receiver we ignore the sender's ZFILE management request and let
    local policy decide, where lrz, zmrx and DSZ all honour it. DSZ
    honours ours, so the asymmetry is ours alone.

    And correct a misleading comment: we call ZF0 bit 0x08 CANCRY, as lrzsz
    does, but Forsberg's own rzsz calls it CANRLE and his DSZ sets it on
    every connection meaning "receiver can decode RLE". Say the bit is
    contested rather than implying it is settled; we neither set nor honour
    it under either reading.

    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net