Skip the terminal and read the text

System

What this thing is made of, for anyone who wants to know whether it is real.

The grid

columns   80     fixed
rows      25     fixed
cells     2000
cell      8x16   pixels, at the font's native size
palette   16

The grid does not change. On a 4K panel and on a phone the system is 80 by 25; what changes is how many device pixels one cell occupies. There is no fit function anywhere in this codebase that reports a column count back from the viewport, and there is a test that fails if a screen ever composes past cell 80.

The fit is done by choosing a font size, not by scaling: a transform would resample every glyph, and the text is noticeably sharper without one.

The grid fills the window. It cannot fill it exactly — 80x25 is proportioned about 1.6 to 1 and a monitor is nearer 1.9 — and no single size both fills the screen and keeps the type small, so that trade is yours:

zoom out     one step smaller
zoom in      one step larger
zoom 70      seventy percent of the window
zoom reset   fill it again

The choice is remembered. What never changes is the 80 by 25.

The font

WebPlus IBM VGA 8x16, from The Ultimate Oldschool PC Font Pack by VileR (int10h.org), under CC BY-SA 4.0 and redistributed unmodified. It is the face an IBM PC drew text with in 80x25 mode, recovered and reconstructed from the hardware.

The "Plus" charset rather than the pure CP437 one, for a specific reason: CP437 has ç and á but no ã. That is why a Brazilian reading a board in 1994 saw cora‡Æo, and it is not a bug worth reproducing.

Width

Nothing here measures text with string.length. Horizontal space is measured in cells, taking account of grapheme clusters, combining marks, East Asian double-width characters, and ANSI escape sequences that occupy no space at all. That is why coração and 日本語 both land where they should.

The parser

The screen is fed an ANSI byte stream and understands the subset that this system emits and that classic .ANS art uses: SGR colour and attributes, cursor movement, erase in line and display, save and restore. Anything it does not recognise is dropped rather than guessed at.

The shell

RunawayShell. Commands are entries in a table. There is no eval, no host process, no socket, and no path from anything typed here to anything running anywhere. The filesystem is a tree of objects built when the site was compiled.

If a command is not in the table, the answer is no.

The content

Markdown files in a repository, parsed to an AST at build time and rendered to terminal lines: headings become rules, lists become bullets with hanging indents, links become numbered references with a table at the end, code becomes a railed block that is never re-wrapped.

The art

Original textmode work, authored as data so that its width can be checked by the same code that measures everything else. Third-party pieces carry a registry entry naming the artist, their group and the terms — and if the terms are unclear, the piece is marked reference-only and does not ship.

SAUCE records are read and kept.

Underneath

A static site. Every entry has its own URL and its own HTML, every list has a feed, and the sitemap is real. The terminal is the interface, not an excuse to break the web.

astro        static build, real routes
typescript   the whole system
no backend   nothing to run, nothing to breach
no analytics nothing to collect

Themes

theme dos     the default: IBM colours on black
theme amber   monochrome amber
theme green   monochrome P1 phosphor
theme mono    white on black, no colour at all

Every screen is designed to be legible in mono. Colour is emphasis here, not information.

Home