• ctrl/modopts.ini docs/v322_new.md exec/load/shell_lib.js exec/xtrn_sec

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Thu Oct 22 10:11:17 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/96736a36318291b63969d594
    Modified Files:
    ctrl/modopts.ini docs/v322_new.md exec/load/shell_lib.js exec/xtrn_sec.js
    Log Message:
    Add modopts.ini hooks evaluated upon entering BBS sections

    shell_lib.js's menu_loop() now evaluates the [shell] main_enter or
    file_enter expression from modopts.ini when the current menu's
    node_action changes to NODE_MAIN or NODE_XFER. Keying on node_action,
    rather than on the menu object, keeps a hop between two main-area menus
    (as obv-2, major, and spitfire have) from re-triggering it, and the
    initial menu after logon gets no event, so it doesn't step on anything
    the logon module just did. Every shell built on shell_lib.js gets this.

    xtrn_sec.js gains [xtrn_sec] eval_first, matching the name logon.js
    uses, evaluated when the external programs section is entered.

    The motivating use is terminal audio, e.g.:
    main_enter = bbs.atcode("SOUND:main.ogg")

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Fri Oct 23 20:52:45 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/c559c5ccf05ea61a96bbbbf3
    Modified Files:
    ctrl/modopts.ini docs/v322_new.md exec/load/shell_lib.js exec/xtrn_sec.js src/sbbs3/atcodes.cpp js_console.cpp sbbs.h termaudio_cache.cpp xtrn_sec.cpp text/sound/README.txt
    Log Message:
    Add console sound methods and modopts.ini section sound/music keys

    The section hooks added in 96736a3631 (orders-4-aging, 2026-10-19) could
    only play a sound by evaluating a bbs.atcode("SOUND:...") expression. Sound
    is now a feature in its own right:

    console.play_sound(), play_music(), cache_sound(), music_volume(),
    stop_music() and stop_sound() give scripts what the terminal audio @-codes
    do, through the same code: the @-codes and the methods now share sbbs_t::play_sound() and cache_sound(), so the terminal's audio file cache tracking, the content-hash check, the size limits, the text/sound path restriction and the NO_SOUND gate apply equally to both.

    modopts.ini gains [shell] main_sound, file_sound, main_music and
    file_music, and [xtrn_sec] enter_sound and enter_music, each naming a file
    in text/sound. The main_enter, file_enter and eval_first expressions
    remain for anything else.

    Requesting the music that is already looping no longer restarts it; only
    its volume is set. Moving between two sections that share a theme would otherwise start it over on every hop. Stopping the music, and running any external program (which may have changed or stopped it), forgets what was playing, so the next request starts it again.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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