Added a README.md

This commit is contained in:
Scott Garrett committed 2026-09-04 15:12:59 -04:00
1 parent 511f20dc9a
commit cdde166183
1 file changed
+57
+57
View File
@@ -0,0 +1,57 @@
# baudshell
Run an interactive shell behind a simulated serial (baud-rate) throttle. Output
scrolls across the screen one character at a time instead of appearing all at once,
exactly as it would on a real slow serial terminal. It's the modern equivalent of
watching a 9600-baud modem, and it makes old VT100/ANSI animations visible again
that a fast terminal would otherwise render instantly.
Requires Python 3 and a terminal (a TTY) — it puts the terminal in raw mode for
the session and restores it on exit.
## Usage
```
./baudshell [BAUD]
```
`BAUD` is the serial rate to simulate, in bits/second. It is optional; the default
is **9600**. Lower is slower. You can also run it without the executable bit:
```
python3 baudshell [BAUD]
```
## Examples
```sh
./baudshell # bash at the default 9600 baud
./baudshell 2400 # slower still
./baudshell 300 # a classic 300-baud modem — a dramatic typewriter effect
./baudshell 115200 # nearly instantaneous
```
Type commands as usual. When you are done, type `exit` (or close the terminal);
`baudshell` detects that the shell has exited and returns, leaving your terminal in
its original state.
The throttle applies in both directions, just like a real serial line: your
keystrokes are fed into the shell at the chosen rate, and the shell's output is
emitted back to the terminal at that same rate.
## How it works
The program launches `bash --norc` on a pseudo-terminal, then copies between your
terminal and that PTY one byte at a time, sleeping `10 / baud` seconds between
bytes (a serial byte is 10 bits, so a `baud`-bit line carries `baud/10`
bytes/second). A non-positive or non-numeric rate prints an error and exits.
## Also in this repo
`baud.c` is a small standalone C filter with the same throttling idea, for piping
a file rather than driving a shell:
```sh
cc baud.c -o baud
cat animation.ans | ./baud 9600
```