The guide
BadTerm help
Everything BadTerm does, and how to get at it. Inside BadTerm, Alt-Z shows every key on one screen. On a Mac, every Alt key below is Cmd.
Getting started
Install BadTerm from the downloads, or with cargo install badterm, and start it. After a moment's splash screen it waits, not connected.
- Press Alt-D for the dialing directory. The Vortex BBS, BadTerm's home board, is already in it.
- Choose a BBS with the arrow keys and press Enter to call it.
- To call one that isn't in the directory, press Q (quick connect) and type its address:
bbs.example.org,bbs.example.org:2323,ssh://[email protected]. - Alt-H hangs up; Alt-X leaves BadTerm.
BadTerm also answers telnet:// links in your browser (the Windows installer and the macOS app set that up), and takes an address on its command line: badterm bbs.example.org.
Looking for boards to call? The Telnet BBS Guide lists hundreds, and its list imports straight into the directory.
Keys
Calling
- Alt-D
- Dialing directory
- Alt-N
- Call a BBS in a new tab
- Alt-T
- Next tab (Shift: the one before)
- Alt-R
- Call again, or redial now
- Alt-L
- Send your login (name, then password)
- Alt-1…0
- Send a keyboard macro
- Alt-J
- Run a script, or stop it
- Alt-H
- Hang up, and close the tab
- Alt-X
- Exit BadTerm
Files
- Alt-U
- Upload: ZMODEM, YMODEM, XMODEM, Kermit
- Alt-G
- Download with YMODEM, XMODEM or Kermit
- Alt-C
- Capture the session to a file
- Alt-S
- Save the scrollback or the screen
- Alt-F
- View ANSI art
Scrollback and clipboard
- Alt-B
- Scrollback (or Shift-PgUp)
- Drag
- Copy text; hold Shift as you let go to copy it as ANSI. With a BBS that takes the mouse, hold Shift while you drag.
- Alt-V
- Paste (or Shift-Ins)
Settings and display
- Alt-O
- Settings and colors
- Alt-P
- Phosphor mode (the CRT look)
- Alt-A
- Aspect ratio
- Alt-W
- 9-dot or 8-dot characters
- Alt-Enter
- Full screen
- Alt-I
- iCE colors or blinking
- Alt-E
- CP437 or UTF-8
- Alt-K
- Reveal concealed text (Viewdata)
- Alt-M
- Sound and music: on, on including
ESC [ M, off - Alt-Z
- Help
In the dialing directory
- Enter
- Call
- Ins / E
- Add / edit an entry
- Del
- Remove
- P
- Pin to the top
- M
- The entry's own keyboard macros
- / or F3
- Find as you type
- S
- Sort: by name, last called, or calls
- G
- Show one group, the next, or all
- Q
- Quick connect
- I / X
- Import / export
- O
- Settings
The dialing directory
Each entry keeps how to reach a BBS and how to show it. In the entry form, Tab and the arrow keys move between fields, and Space or ← → change the ones with choices:
- Address, Port, Protocol
- Telnet, Telnet over TLS ("TelnetS", port 992), SSH, RLogin, raw TCP, or Modem, where the address is a phone number (see modems). The address may carry the port:
host:2323. - Emulation
- CP437 (ANSI-BBS, the usual), UTF-8, Avatar, RIPscrip, PETSCII (Commodore 64), C128 (its 80 columns), ATASCII (Atari), Viewdata (Prestel), Mode 7 (BBC Micro), IGS (Atari ST) or SkyPix (Amiga). See emulations.
- Screen mode, Font
- 40x25, 80x25 to 80x60 (80x28 in the VGA's 8x14 font) and 132 columns; your own
.fntor.psffonts, from thefontsfolder (badterm --paths); the Amiga fonts for Amiga boards; and code pages (CP866, KOI8-R, CP1251, Greek, Hebrew, Turkish, Baltic, Central and West European, ...) for boards in other languages. A BBS can also choose them itself. With one on the screen, what you type and paste goes in its code page, and copying gives the characters it shows. - iCE colors
- Auto leaves it to the BBS; On shows bright backgrounds; Off blinks.
- Phosphor mode, Bell
- This BBS's own CRT look and bell, or the defaults from Settings.
- Baud rate
- Show what arrives at a modem's speed, so ANSI animations play as they were drawn.
- User name, Password, Auto-login
- See logging in.
- Group
- A group to list it in, such as "Art" or "Retro". G in the list shows one group at a time, then the next, then all again.
- Status line
- Off leaves the BBS's screen alone in the window, with no status bar under it.
- Capture, Capture file
- Record every call to this BBS; see capturing.
- Downloads, Uploads
- This BBS's own folders for files it sends and for choosing files to send it; empty for the folders in Settings.
- Script
- A script to run once the call connects; see scripts.
On a field that holds a file or a folder (Script, SSH key file, Capture file, Downloads, Uploads), F2 or Ctrl-O browses for one: Enter opens a folder or chooses, Backspace goes up, F7 makes a folder, and Tab types a path instead.
I imports a directory from SyncTERM (.lst), NetRunner (.phn), Qodem (fonebook.txt), EtherTerm (.xml), MagiTerm (magiterm.ini), CSV (including the Telnet BBS Guide's list), JSON or TOML: pick the file from its folder. You can also drop the file on BadTerm's window. X exports one: choose the folder and the name; the name's extension picks the format.
A BBS that answers busy, or doesn't answer, is called again every 15 seconds, up to ten times. Alt-R calls at once; Esc stops.
Several calls at once
Up to nine calls can be open at once, each in a tab of its own. Alt-N opens the dialing directory to call a BBS in a new tab; dialing from Alt-D during a call asks whether to do that (T) or to hang up and dial in its place (Y). Alt-T shows the next call, Shift-Alt-T the one before, and Alt-H hangs up the call on screen and closes its tab.
With more than one call open, the status bar starts with a number for each, the one on screen highlighted; click one to show it. Calls off screen carry on: they receive, run their scripts and macros, redial, and finish their transfers. A * by a number means that call has sent something new, and a ! that it wants you: it rang the bell, asked for a login or an upload, finished a transfer, or hung up (the status bar says which). Only the call on screen plays music, though a bell off screen still beeps. Each call keeps its own place in the scrollback, and Alt-X asks before hanging them all up.
Logging in
With Auto-login on, BadTerm answers a BBS's login and password questions with the entry's user name and password. Alt-L sends them by hand: the name the first time, the password the next. Passwords are kept in your system's keychain (Keychain on macOS, Credential Manager on Windows, the Secret Service on Linux); where there is none, they stay in the directory file.
RLogin logs straight in with the user name and password. SSH tries, in order: no password (for BBSes that run their own login), the key file set in the entry, your SSH agent, your ~/.ssh keys, then a password or code. Anything it needs and doesn't have, it asks for, and offers to remember a password. The first time you call an SSH or TLS BBS, BadTerm remembers its key; if the key ever changes, BadTerm refuses to connect and says why.
File transfers
- ZMODEM downloads start by themselves when the BBS sends a file. If one is interrupted, it is kept as
name.partand picks up where it stopped the next time the BBS sends that file. - Kermit downloads start by themselves too.
- For YMODEM, YMODEM-G and XMODEM, start the BBS's side first, then press Alt-G and choose the protocol. XMODEM asks what to call the file.
- To upload, press Alt-U (or drop files on the window), pick the files (Space marks several), and choose the protocol with ← →. Start the BBS's receive first, except with ZMODEM, which BadTerm notices by itself.
Downloads go to Downloads/BadTerm; Settings, Folders, changes that. A download never replaces a file that's already there. Esc cancels a transfer.
Emulations and systems
- CP437
- ANSI-BBS in the IBM PC character set: what almost every BBS sends.
- UTF-8
- For systems that send Unicode. Alt-E switches between the two during a call.
- Avatar
- AVT/0 and AVT/0+, the compact codes of Opus, Maximus and other FidoNet-era BBSes, alongside ANSI.
- RIPscrip
- The graphics of RIPterm-era BBSes: scenes of lines, shapes and fills on a 640x350 screen, with the text screen (80x43) over them. Click a button or a mouse area to send its command. BadTerm tells the BBS it understands RIP when asked, so the BBS sends its graphics. Icons and scene files the BBS saves or asks for are kept in its folder of the file cache, and also looked for in your downloads; the BBS can send them itself, and scenes show as they arrive. Buttons and the BBS's questions can use text variables such as
$DATE$, and a BBS can ask you for one of its own (your name, say), which it may keep for next time. - Sixel
- Pictures the BBS sends as sixel graphics, in any emulation but PETSCII and ATASCII: drawn at the cursor, up to 256 colors, scrolling with the text and kept in the scrollback. Nothing to set: BadTerm tells a BBS that asks that it can show them.
- SyncTERM pictures
- Synchronet's graphical doors (SyncDoom and the like) draw PPM and JPEG XL pictures with SyncTERM's commands, and BadTerm draws them too. A BBS can keep files for them in a cache on your computer: a folder per BBS in BadTerm's cache folder, at most 256 MB each, which you can delete at any time.
- The mouse
- A BBS or door that asks for the mouse (Synchronet's games do) gets your clicks, drags and wheel. Hold Shift to select and copy text instead.
- Fonts from the BBS
- Fonts a BBS sends (CTerm's loadable fonts) are used where it asks for them.
- SyncTERM sound
- Those doors' sound effects and music: WAV, AIFF, VOC, FLAC, MP3, Ogg Opus and Vorbis sounds and synthesized tones, on 16 channels mixed together. Alt-M turns sound off.
- PETSCII
- Commodore 64 BBSes, on a 40x25 screen in the C64's colors and character sets. The C64's F1 to F8 are on your F1 to F8, and RUN/STOP is Esc. Auto-login answers C64 boards' prompts, and copied text comes out as the characters on the screen.
- C128
- The Commodore 128's 80-column screen: the same PETSCII on 80x25, in the colors of its RGBI monitor.
- ATASCII
- Atari 8-bit BBSes, on a 40x24 screen in light blue on blue.
- Viewdata
- Prestel-style viewdata services such as Telstar: the 40x24 teletext page with its block graphics, double height and eight colors. Enter is the # key that ends what you type; * is *. Alt-K reveals concealed text, such as a quiz's answers.
- Mode 7
- BBC Micro BBSes, on the BBC's teletext screen: 40x25, scrolling, with the BBC's own characters and keys (Delete is DEL).
- IGS
- Atari ST BBSes with Instant Graphics and Sound: their VT-52 text and drawings (lines, shapes, fill patterns, text in many sizes) on the ST's screen, and menus you click, with their sound: the built-in effects, chip music and the sound chip's own data, on an emulated sound chip (MIDI notes as plain tones). Alt-M turns it off.
- SkyPix
- Amiga BBSes (C-Net and SkyLine) with SkyPix: ANSI text in the Amiga's Topaz font with drawings over it, in the Amiga's 16 colors, with the brushes and sound samples the BBS sends. A click is sent to the BBS, as SkyPix menus expect. Its Amiga fonts are drawn from your own copies: put a font's
name.fontandname/folder in thefontsfolder (badterm --paths).
Amiga boards look right in an Amiga font (Topaz, MicroKnight, P0T-NOoDLE, mO'sOul), chosen in the entry, or by the BBS itself.
Dialing with a modem
BadTerm can dial out through a real modem on a serial port, a USB modem, a WiFi modem, or a program that acts like one (such as tcpser).
- In Settings (Alt-O), on the Modem tab, set the serial port (type it with Enter, or step through the ports BadTerm finds with ← →):
/dev/ttyUSB0on Linux,/dev/cu.usbmodem…on a Mac,COM3on Windows. - Set the speed (between the computer and the modem: 115200 suits most), flow control (RTS/CTS for almost every modem), the init string (
ATZ, orAT&Ffor the factory settings) and the dial command (ATDTfor tone,ATDPfor pulse). - Add a directory entry with the protocol Modem and the phone number as its address.
When you call it, you see the modem's replies as it dials. BUSY and NO ANSWER are redialed like a busy BBS; the call ends when the carrier drops (NO CARRIER). Alt-H hangs up.
The look
- Phosphor mode (Alt-P) draws a CRT: glowing text, scanlines and curved glass, in color or as a green or amber monitor. Settings, Display, sets how much the text glows, how strong the scanlines are and how curved the glass is, each from off to strong.
- Alt-W switches between 8- and 9-dot characters (a VGA's 9th column joins up the line drawing). Alt-A picks the shape: square pixels, or 4:3 as on a CRT, or 16:10 or 16:9.
- Settings, Scaling: fit, the default, keeps the picture's shape, and the window settles into that shape when you resize it, so there are no borders; or whole-number steps for exact pixels, or stretch to fill. Alt-Enter is full screen. BadTerm opens at the size and place you left it.
- Settings, Monitor bezel: draw a monitor around the screen. There are four built in; more are in the extras, and you can use a photo of your own (a PNG whose screen is see-through), put in the
bezelsfolder. - Settings, Colors: fourteen color schemes for BadTerm's own screens (BadTerm, the default, is in its logo's colors), or color each part yourself. More are in the extras. "Import a theme" brings one in; "Save as a theme" writes yours to a file to share.
- Settings, General, Bell: beep, flash the screen, both, or nothing. A directory entry can have its own.
Capturing and saving
- Alt-C starts and stops capturing everything the BBS sends to an
.ansfile, to view later in any ANSI viewer, or in BadTerm with Alt-F. - An entry's Capture setting records each call to that BBS from the start. Its Capture file names the file:
{name},{date}and{time}are filled in, and a name ending in.txtkeeps only the text, as a log. - Alt-S saves the scrollback as
.ansor.txt, or the screen as.png: choose the folder, and the name (Tab moves between them). - Alt-F views ANSI art files with their SAUCE title, artist and group (I shows them).
Keyboard macros
Settings, General, Keyboard macros, sets what Alt-1 to Alt-0 send, written as in Telix and QModem: ^M is Enter, ^[ Esc, ^A to ^Z the other control keys, ~ waits half a second, and {user} and {password} are the directory entry's. {user}^M~{password}^M, for example, logs in. An entry can have its own: M on it in the directory sets them, and where one is empty, the one in Settings is sent.
Scripts
A script logs in or finds its way around a BBS, as Telix's SALT did. Scripts are written in Rhai and kept in the scripts folder (badterm --paths shows where). Name one as an entry's Script to run it once the call connects, or press Alt-J during a call to choose one (Alt-J again stops it). A script sees what the BBS sends as plain text:
if wait("Login:", 20) { // seconds; false if it never came
send(user() + "\r");
wait("Password:"); // 30 seconds when no time is given
send(password() + "\r");
}
let which = wait_any(["[Y/n]", "Main Menu"], 30); // which came, or -1
if which == 0 { send("n"); }
sleep(0.5);
notify("Logged in to " + bbs());
screen() is the text on the screen, and hangup() ends the call. The project's login.rhai logs in to most boards.
Moving the hotkeys
Settings, General, Hotkeys, lists what each Alt key (Cmd on a Mac) does. Choose one, press Enter, then the letter you want for it; an action that had that letter takes the old one. Del puts a key back where it usually is. The status line and help show the keys as you set them. On the same tab, New entries' font and New entries' screen are what an entry you add starts with.
Where things are kept
badterm --paths prints every location. Your directory, settings, themes and bezels are in:
- Linux
~/.config/badterm(captures in~/.local/share/badterm)- macOS
~/Library/Application Support/dev.Bad-Cluster.BadTerm- Windows
%APPDATA%\Bad Cluster\BadTerm\config
The directory is dialer.toml and the settings settings.toml, plain text you can edit or back up. Themes go in the themes folder and bezels in bezels. Files BBSes keep on your computer (SyncTERM's cache) are in BadTerm's cache folder, a folder for each BBS; badterm --paths shows where.
The command line
badterm start, not connected
badterm bbs.example.org call a BBS (host:port, telnet://,
ssh://user@host:port, raw://)
badterm art.ans view ANSI art
badterm --import syncterm.lst add entries to the directory
badterm --export bbses.csv write the directory out
badterm --paths show where things are kept
badterm --render art.ans out.png draw ANSI art to an image
[--screen] [--crt color|green|amber] [--glow G] [--scanlines S]
[--curvature C] [--nine-dot] [--aspect] [--font NAME]
[--bezel NAME]
On Windows, BadTerm is a windowed program, so to see its output run it from PowerShell, or with start /wait badterm --help in Command Prompt.
When something's wrong
- The BBS looks garbled
- It may speak another emulation: try UTF-8 (Alt-E), or set the entry's emulation to the one the BBS's listing gives: Avatar, RIPscrip, PETSCII, ATASCII, Viewdata, Mode 7, IGS or SkyPix.
- Blinking text where colors should be
- Press Alt-I for iCE colors, or set iCE colors to On in the entry.
- Passwords aren't remembered on Linux
- BadTerm uses the Secret Service (GNOME Keyring or KWallet). Without one, passwords stay in
dialer.toml. - The modem doesn't answer
- Check the serial port and speed in Settings, Modem; try flow control "none" for a cable without RTS/CTS; and make sure nothing else has the port open.
- A BBS's mouse menus don't respond
- Make sure Shift isn't held: with it, the mouse selects text instead of going to the BBS.
- Something else
- Call The Vortex BBS and ask, or report a problem.