Table of Contents

Text File Sections

A Text File Section is a sysop-curated collection of text files made available to users for reading. Common uses are bulletins, ANSI art galleries, BBS information, news archives, and similar non-credit-bearing reading material. Text File Sections are distinct from the file transfer section — files in a text section are read in-line through the BBS terminal interface, not downloaded, and are not subject to credit/transfer access controls.

Text File Sections are configured in SCFGText File Sections.

Section List

╔═══════════════════════════════════════════╗
║             Text File Sections            ║
╠═══════════════════════════════════════════╣
║ │Information                              ║
║ │ANSI Artwork                             ║
║ │ANSI Music Files                         ║
║ │PETSCII Artwork                          ║
║ │RIP Art                                  ║
║ │UTF-8 Tests                              ║
║ │Operator                                 ║
║ │PCBoard Display Files                    ║
║ │Wildcat! Display Files                   ║
║ │VT100 art                                ║
╚═══════════════════════════════════════════╝

When adding a section, SCFG prompts for a Name and an Internal Code. The internal code becomes the on-disk identifier for the section (and the name of the data subdirectory).

Per-Section Options

╔══════════════════════════════════════════════════════════╗
║                        Information                       ║
╠══════════════════════════════════════════════════════════╣
║ │Name                       Information                  ║
║ │Internal Code              INFO                         ║
║ │Access Requirements                                     ║
╚══════════════════════════════════════════════════════════╝
Option Name Description
Name Display name shown to users in the section list.
Internal Code Up to 8 valid filename characters; uniquely identifies this section in storage. The lowercased code is also used as the on-disk subdirectory name.
Access Requirements An ARS expression — users not matching the requirements cannot see or access the section. Blank = open to all.

File Storage

Each section's text files live in:

The configuration of the sections themselves (the [text:CODE] blocks) is persisted to ctrl/file.ini.

Section .ini File

If present at data/text/<code>.ini, this file is read by the default renderer (exec/text_sec.js) and gives the sysop control over presentation defaults and per-file overrides.

Root section keys

Keys placed before any [<filename>] section header apply to the entire text section as defaults:

Key Default Description
mode P_CPM_EOF Default pmode flags passed to console.printfile() for files in this section. Value is a JavaScript expression of one or more P_* constants combined with |. See the pmode flag reference below.
cols undefined (use terminal width) Column count to format file output to. Files are wrapped or truncated to this width depending on the mode flags.

Example minimal section .ini:

mode=P_CPM_EOF | P_NOATCODES
cols=80

Per-file sections

Each [<key>] header in the .ini file describes one displayable file in the section. The <key> is a sysop-chosen short identifier the user types to view the file.

Field Description
name The actual filename in data/text/<code>/.
desc Descriptive title shown in the file list.
ars Optional ARS for this individual file.
mode Optional override of the section default ''mode'' for this file.
cols Optional override of the section default cols for this file.
petscii_graphics If set, the file is treated as native PETSCII graphics.
tail If set to a positive integer N, only the last N lines of the file are displayed (uses console.printtail).

Example:

mode=P_CPM_EOF
cols=80
 
[news]
name=news.asc
desc=Latest BBS news
mode=P_CPM_EOF | P_AUTO_UTF8
 
[c64]
name=welcome.pet
desc=Welcome (PETSCII)
petscii_graphics=true
 
[changelog]
name=CHANGELOG
desc=Recent changes (last 50 lines)
tail=50

pmode flag reference

The mode value is a JavaScript expression of pmode constants (defined in sbbsdefs.js / sbbsdefs.h), bitwise-OR'd with |. Most commonly used:

Constant Meaning
P_NONE No flags.
P_NOABORT User cannot abort the display with Ctrl-C.
P_SAVEATR Save current text attributes after display.
P_NOATCODES Don't process @-codes in the file.
P_NOPAUSE Disable the hit a key pause prompt at end-of-screen.
P_SEEK Allow keyboard navigation (Home/End/PgUp/PgDn) within the file.
P_NOCRLF Don't emit a CRLF before the file content.
P_WORDWRAP Word-wrap long lines for the user's terminal.
P_CPM_EOF Stop parsing/displaying at Ctrl-Z (CP/M end-of-file convention). The default.
P_TRUNCATE Truncate (rather than wrap) lines longer than cols.
P_PETSCII File is native PETSCII.
P_UTF8 File is UTF-8 encoded.
P_AUTO_UTF8 Auto-detect UTF-8 content.
P_MARKUP Process StyleCodes / Rich / StructuredText markup.
P_HIDEMARKS Hide markup source characters from the rendered output.
P_NOXATTRS Disable “Extra Attribute Codes” processing.

The full set is defined in src/sbbs3/sbbsdefs.h.

Adding Files to a Section

There are two ways to populate a Text File Section:

Via the BBS (sysop)

Log into the BBS, enter the Text option of the main menu, choose the section, and use the Add command. The sysop is prompted for the title and the path/filename. If no path is given, the file is read from the section's data directory.

Directly on the filesystem

Drop files into data/text/<code>/. Optionally edit data/text/<code>.ini to set display order and friendly titles.

Renderer (Loadable Module)

The module that presents Text File Sections to users is configured in SCFGSystemLoadable ModulesText Section. The default is text_sec (i.e. exec/text_sec.js). Sysops wanting a custom navigation experience can replace this with their own JavaScript module.

A reasonable baseline:

It is requested that sysops make at least the text/sbbs.msg file available somewhere reachable for users.

See Also