• docs/v321_new.txt src/sbb

    From Rob Swindell (on Windows@VERT to Git commit to main/sbbs/m on Sunday, January 04, 2026 08:20:00
    https://gitlab.synchro.net/main/sbbs/-/commit/ee5e4a8761130ae6f83de73e
    Modified Files:
    docs/v321_new.txt src/sbbs3/atcodes.cpp getstats.c getstats.h js_system.cpp src/sbbs3/scfg/scfgsys.c src/sbbs3/scfgdefs.h scfglib1.c scfgsave.c
    Log Message:
    Allow the statistics interval to be configured by sysop in SCFG

    and used for @-codes as well as the system.stats properties

    SCFG->System->Advanced->Statistics Interval

    Use 0 for no-caching. The default interval is 5 seconds.

    Add CLOCK and TIMER @-codes useful for profiling

    Renamed system.stats_cache to system.stats_interval
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows@VERT to Git commit to main/sbbs/m on Monday, January 05, 2026 04:27:00
    https://gitlab.synchro.net/main/sbbs/-/commit/5ccae58cacfb320ec710c24d
    Modified Files:
    docs/v321_new.txt src/sbbs3/str.cpp
    Log Message:
    If the file text/menu/sysinfo.* exists, use for sys_info() output

    This file is optional and I don't (currently) have plans to provide one stock. ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows@VERT to Git commit to main/sbbs/m on Wednesday, January 07, 2026 03:57:00
    https://gitlab.synchro.net/main/sbbs/-/commit/6a6799ad3bc20479ab6d56be
    Modified Files:
    docs/v321_new.txt src/sbbs3/atcodes.cpp chk_ar.cpp inkey.cpp js_bbs.cpp logout.cpp sbbs.h
    Log Message:
    Time-related @-code updates

    Fix: Time-used macros (for total and today) didn't account for the current call. They all do now, with the exception of STATS.TIMEON and STATS.TTODAY (there are plenty other aliases to be used to get the combined times).

    New @-codes:
    - TONLINE (Time online this call in fixed-width HH:MM:SS format)
    - TMONLINE (Time online this call in variable-width HH:MM:SS format)
    - MONLINE (Time online this call in minutes, in Xm format)
    - HRONLINE (Time online this call in minutes, e.g. Xm or estimated as X.yh)
    - TMUSED (Time used this call in variable-width HH:MM:SS format)
    - MUSED (Time used this call in minutes, in Xm format)
    - HRUSED (Time used this call in minutes, in Xm format or estimated to Xh)
    - SECLEFT (Time remaining this call in seconds)
    - TMLEFT (Time remaining this call in variable-width HH:MM:SS format)
    - MLEFT (Time remaining this call in minutes, in Xm format)
    - HRLEFT (Time remaining this call in minutes, in Xm format or X.yh)
    - TMTOTAL (Total time used by user in variable-width HH:MM:SS format)
    - LOGOFF (similar to HANGUP, but more graceful, e.g. displays logoff screens)
    ala Wildcat!

    Code cleanup:
    - Fixed up comments
    - Use new sbbs_t::timeon(), timeused(), useron_minutes_today/total() methods
    - Use the new time/tm_as_hhmmss() functions from date_str.c (noma-copy-pasta!) - Return retvals of byte_estimate_to_str() and byte_count_to_str() directly
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows@VERT to Git commit to main/sbbs/m on Sunday, January 11, 2026 01:52:00
    https://gitlab.synchro.net/main/sbbs/-/commit/418e4413718b7d5ffde113f7
    Modified Files:
    docs/v321_new.txt src/sbbs3/answer.cpp src/sbbs3/ctrl/MainFormUnit.cpp src/sbbs3/ntsvcs.c sbbs_ini.c sbbs_ini.h sbbscon.c src/sbbs3/scfg/scfg.c scfgsrvr.c src/sbbs3/startup.h
    Log Message:
    Built-in detection / short inactivity timeout of dumb terminal (bot) logins

    Configured in SCFG->Servers->Terminal Server->Max Dumb Login Inactivity, the default is one minute (60s). This solution is much more reliable than the login.js method since it's quite possible that the display of the "answer"
    file can pause (e.g. with a [Hit a key] prompt) before the login module even executes.

    Any auto-terminal-type detection (e.g. ANSI, PETSCII, UTF-8) will defeat this (short) inactivity setting and use the normal login inactivity duration
    (now called "Max User Login Inactivity").

    The other big change included here is for graceful detection of startup structure version changes (via size checking). When mixing revisions of SBBS libs and apps, it was possible to have an insufficiently allocated startup structure passed around and memory-initialized beyond its bounds or otherwise have some startup structure elements (e.g. settings) read or written at their incorrect offset. I discovered this while adding to the bbs_startup_t but
    upon review found that there was no size checking for the global_startup_t and the sbbs_read_ini() function returned no success or failure indication.
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows@VERT to Git commit to main/sbbs/m on Monday, January 12, 2026 00:51:00
    https://gitlab.synchro.net/main/sbbs/-/commit/da35d32b9d266324e87ce71f
    Modified Files:
    docs/v321_new.txt src/sbbs3/con_out.cpp js_bbs.cpp putmsg.cpp sbbs.h terminal.h ver.cpp
    Log Message:
    sbbs_t::bputs() now supports P_CENTER and P_80COLS mode flags

    sbbs_t::ver() now uses bputs, so the output doesn't *have* to be centered
    (and now, it's not when displayed from sbbs_t::sys_info()

    The only difference now between sbbs_t::bputs() and Terminal::center() is
    that Terminal::center() truncates white-space off the end of the (copied) string and adds a newline to the output.
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows@VERT to Git commit to main/sbbs/m on Friday, January 16, 2026 21:38:00
    https://gitlab.synchro.net/main/sbbs/-/commit/bb6381902fa8ec6585dd65d1
    Modified Files:
    docs/v321_new.txt src/sbbs3/chksmb.c msg_id.c postmsg.cpp src/smblib/smbadd.c smballoc.c smbdefs.h smbfile.c smblib.c
    Log Message:
    Track message base lock status in smb_t

    This allows an application (in this case chksmb with the new -l parameter) to lock a message base and have it automatically unlocked when closed via smb_close().

    As part of this change, I renamed smb_t.locked to smb_t.smbhdr_locked to avoid confusion about which lock state is being reflected by what in smb_t.

    Incremented SMBLIB version to 3.21
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net