====== Mystic BBS Terminal Screen Design (ANSI + MCI) ====== This page documents how to create a **terminal-style interface inside Mystic BBS**, similar to **MRC (Multi Relay Chat)**. The goal is to create a reusable **ANSI template + MPL script system** that can be used for: * Chat clients (MRC style) * External messaging systems * Terminal dashboards * Chickadee integration * Node monitoring tools * Live data feeds Mystic does **not use GUI widgets**. Instead it uses: * **ANSI art** for the screen layout * **MCI codes** for dynamic fields * **MPL scripts** to control logic and user input --- ===== Architecture Overview ===== Typical layout used by Mystic terminal programs: +-------------------------------------------------------------+ | Title Bar | +-------------------------------------------------------------+ | Status / Info Line (Room, Topic, Users, etc.) | +-------------------------------------------------------------+ | | | | | Chat / Message Area | | | | | | | +-------------------------------------------------------------+ | Input Line | +-------------------------------------------------------------+ | Help / Command Line | +-------------------------------------------------------------+ Example usage: * **MRC Chat** * **IRC client** * **Packet BBS console** * **Real-time BBS tools** --- ===== Components of a Mystic Terminal Screen ===== Mystic terminal programs typically use **three parts**: ^ Component ^ Purpose ^ | ANSI screen file | Draws the interface layout | | MPL script | Handles input/output logic | | External program | Network / background processing | Example (MRC architecture): User Terminal ↓ ANSI screen (layout) ↓ MPL script ↓ Temp message files ↓ Python client ↓ Network server --- ===== ANSI Screen Files ===== Mystic loads **ANSI screens** to draw the interface frame. Example files from MRC: * `mrcmain.ans` → main chat screen * `mrcscrl.ans` → scrollback screen These files contain: * box drawing characters * color codes * Mystic MCI variables * cursor positioning Example ANSI layout: |CL |19╔══════════════════════════════════════════════════════════╗ |19║ |15Multi Relay Chat |19║ |19╚══════════════════════════════════════════════════════════╝ `|CL` clears the screen. --- ===== Important Mystic MCI Codes ===== Mystic uses **MCI codes** to control colors and screen behavior. Common ones used for terminal screens: ^ Code ^ Meaning ^ | `|CL` | Clear screen | | `|XY` | Move cursor | | `|XX` | Set foreground color | | `|[X##` | Set X cursor position | | `|[Y##` | Set Y cursor position | | `|CR` | Carriage return | Example: |[X01|[Y01|15Mystic Terminal This moves the cursor to **column 1 row 1**. --- ===== Designing the Chat / Output Area ===== The main message area is usually **left blank in the ANSI file**. Example: |19║ ║ |19║ ║ |19║ ║ |19║ ║ The MPL script later writes messages into this region. Typical chat area: * rows **5–20** * width **70–78 characters** --- ===== Input Line ===== A typical input prompt appears near the bottom. Example: |[X01|[Y23|10Say > |07 User input is captured by the MPL script. --- ===== Status Line ===== Many terminal programs include a **live status bar**. Example fields: * room name * topic * latency * users online Example: Room >>> General Topic >>> BBS Chat Users >>> 12 Latency >>> 32ms These are updated dynamically by MPL. --- ===== Scrollback Screen ===== Many Mystic terminal tools include a **secondary screen**. Example: `mrcscrl.ans` Purpose: * browse old chat lines * page up/down * search logs Typical commands: ^ Key ^ Action ^ | ↑ ↓ | scroll | | PgUp | page up | | PgDn | page down | | ESC | return | --- ===== MPL Script Responsibilities ===== The MPL script handles: * keyboard input * message display * command parsing * updating MCI variables * launching external programs Typical tasks: load ansi screen position cursor read keyboard input write message to temp file refresh message area --- ===== Example Terminal Workflow ===== Example message flow: User types message ↓ MPL script writes temp packet file ↓ External program sends packet ↓ Server replies ↓ External program writes new message file ↓ MPL reads file and displays text This allows **real-time chat inside the BBS**. --- ===== Applying This to Chickadee ===== Chickadee could use the same architecture. Example layout: Chickadee Terminal ──────────────────────────────────────── Channel >>> #general Users >>> 8 Server >>> amigaz.org --- (chat messages here) --- > type message here > > Possible features: * cross-BBS chat * private messaging * file sharing * bot commands * status notifications --- ===== Recommended File Layout ===== mystic/ ├─ ansi/ │ ├─ chickadee_main.ans │ └─ chickadee_scroll.ans │ ├─ mpl/ │ └─ chickadee_terminal.mpl │ ├─ data/ │ └─ chickadee/ │ └─ scripts/ └─ chickadee_client.py --- ===== Tips for Terminal Screen Design ===== * Design ANSI art using **80x25** * Keep the chat area fixed * Avoid writing over the frame * Use consistent colors * Reserve bottom rows for input Useful ANSI tools: * PabloDraw * Moebius * Mystic built-in editor --- ===== References ===== Mystic documentation: * https://wiki.mysticbbs.com Relevant sections: * MCI Codes * ANSI Screens * MPL Scripting * External Programs --- ===== Notes ===== Terminal-style screens are ideal for: * chat systems * live dashboards * message relays * sysop monitoring tools The **MRC client** is a good reference implementation for this architecture.