__                 _ _                _
  / _| ___   ___   __| | |__   __ _ _ __| | __
 | |_ / _ \ / _ \ / _` | '_ \ / _` | '__| |/ /
 |  _| (_) | (_) | (_| | |_) | (_| | |  |   <
 |_|  \___/ \___/ \__,_|_.__/ \__,_|_|  |_|\_\

A personal BBS  ·  Missoula, Montana  ·  formerly NaClCON BBS

Connect from your terminal: telnet naclconbbs.net 23  |  ssh naclconbbs.net -p 2222

  • src/bench/zmodem/zrx_buf.c

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Mon Aug 24 20:32:03 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/9e0b9157c5a32b44fb75b7c9
    Added Files:
    src/bench/zmodem/zrx_buf.c
    Log Message:
    bench/zmodem: add zrx_buf, the receive-side counterpart of ztx_buf

    ztx_buf answers "how much of a send costs zmodem.c and how much costs the wrapper around it". Nothing answered that for receive, so every receive
    figure was a sexyz figure -- and sexyz's recv_byte is 30% of the
    instructions in a sexyz receive, code SyncTERM does not share.

    zrx_buf links the real zmodem.o behind a plain buffered recv_byte, so what it measures is the engine. That puts 76% of sexyz's excess receive CPU inside zmodem.c, which is the part SyncTERM does share, and makes the engine's own ceiling measurable without driving a GUI end to end.

    It is built in the SyncTERM shape, supplying a real is_cancelled callback
    where sexyz passes NULL; ZRX_NO_CANCEL=1 switches to sexyz's shape and ZRX_NO_SPAN=1 forces the byte-at-a-time path, so one binary covers all four combinations. As with ztx_buf it is not a SyncTERM throughput model: it
    omits the wren and RIP input filters, so it bounds SyncTERM's receive from above rather than predicting it.

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

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