The file area of the BBS network: the shelves the WarpEngine of teletypegames.org keeps for machines without a web browser. Pick a shelf, pick a title, and take it home by ZMODEM or, on a Commodore 64, by XMODEM.
Live at
teletypegames.org:2329, and in the browser on bbsweb, and through TTG Gate BBS
A Ruby app on the rubbs gem, like the Teletype BBS, Feedia BBS and TTG Blog BBS. It is the telnet sibling of WARP64U: the same shelves, but the C64 needs only a terminal program and a modem, no store client.
It has two faces on one port:
A call starts with rubbs' BBS::Terminal question: RETURN takes the guess, 1 picks the modern face, 2 the C64.
| Shelf | Folder on the archive |
|---|---|
| Commodore 64 | http://archive.teletypegames.org/C64/ |
| Commodore Plus/4 | http://archive.teletypegames.org/PLUS4/ |
The WarpEngine fills them on every release of a C64 or Plus/4 title (see WARP64U). Each has an INDEX.TXT in the shelf format (#SHELF 1, file|version|size|crc32|title|author|description), and the board reads it again after five minutes. A file goes out only when its size and CRC-32 match its index line; a title updated meanwhile asks the caller to read the shelf again.
On a modern terminal the shelves open in a two-pane window, then the titles of the shelf with the one picked on the right: its version, size, author, download count, description, and the buttons.
| Key | Action |
|---|---|
| Enter or Alt-Z | ZMODEM: SyncTERM, NetRunner, Qodem and bbsweb start it by themselves |
| Alt-K | XMODEM-1K |
| Alt-M | XMODEM |
| Alt-R | Read the shelf again |
| F2 | The shelves |
| Alt-X | Log off |
On a Commodore 64 the menu lists the shelves by number, a shelf its titles by number, and a title opens on a page of its own. Then 1 sends it by XMODEM-1K, X by XMODEM, Q goes back. H in the menu explains it on the C64.
XMODEM carries no file name. After choosing it, start the download in the terminal (its download or receive menu), give the name the board shows (the shelf name without .PRG), and the file lands on the disk as a program: LOAD"ARIADNE",8,1 and RUN. The board waits a minute for the terminal; Esc or RUN/STOP gives up. XMODEM fills its last block up, so the file can be longer by up to 127 bytes (XMODEM) or 1023 (XMODEM-1K). A Commodore program loads all the same.
The transfers are rubbs' BBS::Zmodem and BBS::Xmodem (rubbs 0.26.0): the bytes go out past the PETSCII encoder, 0xFF as a doubled telnet IAC, and XMODEM asks the line into telnet BINARY mode for the transfer. Through TTG Gate BBS the downloads work the same: its gateway passes the BINARY request on to the caller's terminal (rubbs 0.26.1).
| Variable | Default | |
|---|---|---|
WARP_ENGINE_BBS_ARCHIVE_URL |
http://archive.teletypegames.org |
the archive's plain HTTP |
WARP_ENGINE_BBS_SHELVES |
config/shelves.yml |
the shelves and their folders |
WARP_ENGINE_BBS_INDEX_TTL |
300 |
seconds a shelf's INDEX.TXT is kept |
WARP_ENGINE_BBS_DOWNLOAD_MAX |
1048576 |
the largest file sent, in bytes |
WARP_ENGINE_BBS_DOWNLOADS |
data/downloads.jsonl |
the downloads that went through, one JSON line each |
A new shelf is an entry in config/shelves.yml (id, name, path, about); a push to master deploys it. The download log feeds the counts shown with the titles. The board has no secrets.
A push to master deploys it from Woodpecker (RuboCop, compose check, ci-deploy warp-engine-bbs); the container is warp-engine-bbs, in /srv/stacks/warp-engine-bbs, and data/ stays between deploys. The entrypoint updates rubbs on start.
The code follows the house layering: lib/domain (ShelfModel, TitleModel, the shelf, archive and download repositories, CatalogService, the composition root WarpEngineBBS) knows nothing of telnet, and lib/ui holds UI::Modern, UI::Petscii and UI::Transfer, the protocols both faces share.