Steven Philley
BBS Sysop manual Customize / utils Site contents

Sysop Manual — 08

Customization and Utils

16.0 Utility reference, 17.x Customization, 20.0 Appendix (command-line specifiers).

16.0 Utility Reference

Sysop utilities are native programs (C/C++) meant to run on the BBS computer or LAN, normally from exec/, needing a Synchronet installation. The wiki util:index page is an indexmenu hub rather than a full textbook — treat it as the catalog, then open each utility’s page.

Additional JS utilities run via JSexec. Third-party Linux helper zips are sometimes linked from the index; prefer stock tools when they cover the job.

Utilities already covered elsewhere in this manual

Utility Manual section
scfg 5.3
node 3.1
uedit / allusers 6.2 / 6.3
addfiles / delfiles / filelist 10.10–10.12
qwknodes 9.1.5
sbbsecho / echocfg 9.4.1–9.4.2

When adding a new utility to your ops toolkit, read its wiki page for required paths (SBBSCTRL), whether the BBS must be stopped, and backup warnings.

Wiki: https://wiki.synchro.net/util:index


17.0 Customization

Customization spans display files, prompt text, colors, questionnaires, guru brains, and web templates. Hub: custom:index (index-style page).

Prefer:

Wiki: https://wiki.synchro.net/custom:index

17.1 Text Files

Display/menu content and many system strings are driven by text files documented in config:text_files (also section 13.1). This is the primary “skin” of the terminal BBS.

Wiki: https://wiki.synchro.net/config:text_files

17.2 Message Variables (@-codes)

@-codes are message variables sandwiched in @ characters, names typically UPPERCASE, no spaces. They expand in sysop-posted content, many menus, and parts of text.dat. Also available via bbs.atcode() in JavaScript.

Important behaviors from the wiki:

Huge tables of codes live on the atcodes page — use it as a dictionary while designing menus (user alias, node, stats, dates, system info, etc.).

Wiki: https://wiki.synchro.net/custom:atcodes

17.3 Message Color Codes (Ctrl-A codes)

Ctrl-A (ASCII 1) attribute codes are two-byte sequences (Ctrl-A + operand) embedded in display files and messages. They beat raw ANSI for Synchronet because the Terminal Server can strip or translate them to match the caller’s terminal.

Highlights:

Always test menus with ANSI-off / dumb clients if you support them.

Wiki: https://wiki.synchro.net/custom:ctrl-a_codes

17.4 SIF Questionnaire File

SIF questionnaires gather structured answers from users (surveys, applications). The wiki documents file format and how Synchronet presents them. Use for new-user applications or periodic community polls; store results where your process expects (per wiki).

Wiki: https://wiki.synchro.net/custom:sif

17.5 GURU.DAT

ctrl/guru.dat (and additional guru brains) drive Artificial Guru chat personalities. The customization page describes the data format; Chat Features in SCFG attaches brains to guru entries. For JS/LLM gurus, follow the module/howto pages instead of forcing everything into .dat format.

Wiki: https://wiki.synchro.net/custom:guru · https://wiki.synchro.net/config:chat_features


20.0 Appendix

A — Command Line Specifiers

SCFG command-line fields (doors, protocol drivers, archivers, etc.) may include specifiers — macros expanded at execution time. Modules are launched with:

Prefix Meaning
*example Run example.js or fall back to example.bin from mods/exec
?example Run example.js only

Specifiers (partial list — full table on wiki) include values such as:

Also usable from Baja string functions and bbs.cmdstr() in JS. Always quote paths appropriately on Unix when expanding to spaces (prefer no spaces in Synchronet trees).

Wiki: https://wiki.synchro.net/config:cmdline


Customization workflow

  1. Sketch the menu tree on paper (logon → main → files/msgs/xtrn).
  2. Copy stock text files to editable instances only where you change them.
  3. Add Ctrl-A color sparingly; verify dumb-terminal readability.
  4. Insert @-codes for live data instead of hard-coding stats.
  5. Keep door command lines on specifiers, not absolute machine-specific hacks, when possible.
  6. Commit text/ + mods/ to your own backup/repo.

Wiki: https://wiki.synchro.net/util:index · https://wiki.synchro.net/custom:index · https://wiki.synchro.net/custom:atcodes · https://wiki.synchro.net/custom:ctrl-a_codes · https://wiki.synchro.net/custom:sif · https://wiki.synchro.net/custom:guru · https://wiki.synchro.net/config:cmdline

More on stock vs mods/

Synchronet loads many JS modules from exec/ but will prefer the same filename in mods/ when present. That pattern is the supported way to customize str_cmds.js, xtrn_sec.js, logon scripts, and similar without forking upstream binaries.

When you override:

Display file tips

Archiver / protocol command lines

File transfer and archive test command lines in SCFG are prime consumers of command-line specifiers. When a DOS archiver fails:

  1. Confirm 8.3 paths.
  2. Expand the configured line mentally with % replacements from config:cmdline.
  3. Run the same binary manually from a node directory with a sample archive.
  4. Only then change SCFG.

Wiki (repeat hubs): https://wiki.synchro.net/config:cmdline · https://wiki.synchro.net/custom:atcodes · https://wiki.synchro.net/dir:index

See also

Web-side customization continues under SSJS templates (chapter 07 / https://wiki.synchro.net/custom:ssjs_template) when branding the HTTP UI to match terminal text/ art.

Source of truth: wiki.synchro.net/talk:wiki:user:electrosys. Docs live on the Synchronet Wiki. Active boards: coloritcompany.com/bbs.