Subj : src/doors/syncconquer/door/door_io.c src/doors/syncdoom/syncdoom.c src To : Git commit to main/sbbs/master From : Rob Swindell (on Debian Linux) Date : Sat Jul 11 2026 15:00:28 https://gitlab.synchro.net/main/sbbs/-/commit/969a17630973a69b89d980ad Modified Files: src/doors/syncconquer/door/door_io.c src/doors/syncdoom/syncdoom.c src/doors/syncduke/syncduke.h syncduke_input.c syncduke_io.c src/doors/syncmoo1/syncmoo1_input.c src/doors/syncretro/syncretro_audio.c syncretro_audio.h syncretro_input.c syncretro_io.c src/doors/termgfx/apc.c apc.h audio.c audio.h audio_mgr.c audio_mgr.h caps.c caps.h Log Message: doors: adopt SyncTERM APC blob media (audio + video), no cache files SyncTERM's blob APC verbs (Deuce, ef5b7f98a3) carry base64 media inline and decode straight to a slot/screen with no cache file, gated on CTerm version >= 1.329. This teaches termgfx and all five doors to use them when the client is new enough, falling back to the existing cache path otherwise. Detection (termgfx/caps.{c,h}): - termgfx_caps_cterm_version() reads the version from the DA1 reply ("ESC[=67;84;101;114;109;MAJ;MIN;...c", 67.. spells "Cterm"): MAJ*1000+MIN. - Named thresholds TERMGFX_CTERM_VER_{PPM=1002,BLOB=1329} replace scattered magic numbers (syncdoom's inline copy now calls the shared helper). Audio (termgfx/audio.c, audio_mgr.c): - termgfx_audio_load_blob_file()/_load_blob() build A;LoadBlob (WAV/OGG). - stream_chunk() ships inline when the manager's blob_ok is set, else the legacy Store+Load with rotating cache names. Wins where audio actually streams: syncconquer FMV and syncretro game audio (its OGG chunks now skip the cache ring). The SFX/music doors keep the upload-once cache (better for repeated sounds) -- blob_ok is set there only for uniformity. Video (termgfx/apc.c): - termgfx_apc_image() gains a blob mode: C;DrawJXLBlob/DrawPPMBlob inline vs. the per-frame C;S Store + Draw. Wired in the JXL/PPM-tier doors (syncconquer, syncduke, syncdoom). Sixel is already inline, unaffected. Each door's DA1 handler enables the audio/video blob flags at >= 1329. The stats overlay shows a blob token only when actually in use (JXL/PPM tier inline, or retro's "a-blob" audio stream); moo1 has none. #256 workaround (non-blob clients): the JXL/PPM frame cache filenames were fixed strings, so two SyncTERM windows of one dialing-entry -- which share a cache dir -- collided. Salt the name per session with the door's PID via termgfx_session_salt() (xpdev GetCurrentProcessId): syncalert_.jxl etc. Only the cache path is affected; blob clients write no file. (syncterm #256.) Compile-verified across all five doors; the blob paths need SyncTERM >= 1.329 to live-test, and the fallback is unchanged so older clients are unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) --- þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net .