Skip to content

BBS terminals: RIPscrip, Avatar, Amiga ANSI, Atari ST (Phase 7) - #43

Merged
Neo-Desktop merged 4 commits into
mainfrom
claude/project-thread-tf5psn
Nov 11, 2026
Merged

Neo-Desktop merged 4 commits into
mainfrom
claude/project-thread-tf5psn

Conversation

@Neo-Desktop

Copy link
Copy Markdown
Collaborator

Requested by Sydney · project thread

The rest of Phase 7 of the terminal emulation plan. With this, every terminal type in the plan is built.

Terminal types

  • Atari ST (atari-st: 80x25 in 4 colours; atari-st-low: 40x25 in 16). This is TOS's VT52 with its additions:

    • colours (ESC b, ESC c), reverse, and wrap;
    • cursor save and hide;
    • extra erases, and line insert and delete;
    • the ST's own character set.

    It subclasses Vt52Interpreter through two new hooks: one for each character, and one for an escape command's argument.

  • Avatar (avatar): AVT/0 and AVT/0+ codes, taken in ANSI-BBS's intercept hook so that ANSI and music keep working underneath. The area commands reuse Rectangles.

  • Amiga ANSI (amiga): ANSI-BBS in Latin-1, drawn with 8x8 glyphs (Topaz's size), in Amiga colours.

    • An ANSI-BBS profile can now carry its own 16 colours (AnsiBbsProfile.colors).
    • The glyph generator now includes Latin-1 in the 8x8 set.
  • RIPscrip 1.54 (rip): !| lines draw on a 640x350 EGA screen over an 80x43 text window.

    • Shapes: lines, rectangles, bars, circles, ellipses, arcs, pies, Béziers and polygons.
    • Fills: flood fills, with BGI's patterns or the host's own.
    • Also: text, the palette, the viewport and text window, the clipboard, and text blocks.
    • Mouse regions and buttons send their text when tapped.
    • ESC [ ! gets RIP's version as the reply.

Shared changes

  • Raster gains ellipses, patterned fills, flood fill, a clip rectangle, and grab/put.
  • Shrunk text in a picture keeps thin strokes. Before, a hyphen could vanish.
  • Taps: the new TerminalEmulator.tap lets an interpreter take a tap. Android's view and the iOS screen (through TerminalBridge.tap) send what it returns.
  • useMachine and releaseMachine are now shared between the byte-oriented machines and the Atari ST.

Fix: pure white machine colours were dropped

colorOverride used -1 to mean "none", but -1 is also opaque white (0xFFFFFFFF). So any machine colour of pure white fell back to the theme's colour. That covered the ST's screen and Viewdata's and the Minitel's white text.

"None" is now TerminalEmulator.NO_COLOR (transparent black), and stored overrides are always opaque. All callers and tests are updated.

Checks

  • New tests: AtariStTest, AvatarTest, AmigaAnsiTest, RipTest.
  • ProfileRenderTest covers the new types.
  • :shared:jvmTest, :shared:linuxX64Test, the Android terminal tests and doc_check all pass.
  • iOS: the tap and image code isn't compiled here (no Xcode).

Generated by Claude Code

The Atari ST's TOS VT52 in medium resolution (80x25, four colours) and
low (40x25, sixteen): ESC b and ESC c pens, reverse, wrap, the cursor
saved and hidden, the extra erases, line insert and delete, and the ST's
character set. Vt52Interpreter gains a character hook and an argument
hook for it; the machine size and palette set-up is shared with the
byte-oriented machines (useMachine, releaseMachine).

colorOverride's "none" was -1, which is also opaque white, so a machine's
pure white (the ST's screen, Viewdata's and the Minitel's white) fell back
to the theme's colour. "None" is now NO_COLOR (transparent black), and
overrides are kept opaque.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B82eRSyCmXjaURxSYoHxCY
FidoNet's compact codes taken in ANSI-BBS's intercept hook: ^L, ^Y's
repeat, ^V's PC attributes (DLE-quoted too), blink, cursor moves and
place, clear to the line's end, and AVT/0+'s insert mode, area scrolls,
clears and fills (through Rectangles), character delete and pattern
repeat. ANSI, music and the rest of ANSI-BBS work underneath.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B82eRSyCmXjaURxSYoHxCY
ANSI-BBS in Latin-1, drawn 8x8 (Unscii's glyphs, Topaz's size; the
generator now adds Latin-1's to the 8x8 set) in colours from the Amiga's
12-bit palette. An ANSI-BBS profile can now carry its own sixteen colours
(AnsiBbsProfile.colors), which its interpreter puts over the theme's and
takes back off when another profile takes over. The per-profile render
test now uses the profile's character set, as connecting does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B82eRSyCmXjaURxSYoHxCY
ANSI-BBS whose lines starting !| (or ^A|, ^B|) are RIP's commands on a
640x350 EGA screen over an 80x43 text window: lines in their styles and
thickness, rectangles, bars, circles, ellipses, arcs, pies, Beziers,
polygons and polylines, flood fills, BGI's fill patterns and the host's,
text, the palette, the viewport and text window, the clipboard, text
blocks, and mouse regions and buttons. ESC [ ! answers RIP's version, and
ESC [ 1 ! and 2 ! turn it off and on. Line continuation and the CR LF
ending a RIP line are the line's own.

Raster gains ellipses, patterned fills, flood fill, a clip rectangle and
grab and put, and draws shrunk glyphs with their rows merged (a thin
stroke was lost). Taps: an interpreter can take a tap at a point on the
screen (TerminalEmulator.tap); Android's view and the iOS screen (through
TerminalBridge.tap) send what it gives, so RIP's buttons work.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B82eRSyCmXjaURxSYoHxCY
@Neo-Desktop Neo-Desktop self-assigned this Nov 11, 2026
@Neo-Desktop
Neo-Desktop merged commit 24db6fc into main Nov 11, 2026
9 checks passed
@Neo-Desktop
Neo-Desktop deleted the claude/project-thread-tf5psn branch November 11, 2026 02:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants