I finally fixed the FTP bug, and so i felt good about cutting another release. I also added in > / >> redirection for various commands too! Wget with auto-file-typing and TLS1.2 support (TLS did add some size to the binary, but memory usage still decent due to other optimizations). Also a proper scrollbar, lots of other goodies.
SevenTTY v1.2.0
The biggest release yet — SCP and FTP file transfer, 34 new shell commands, flicker-free rendering, output redirection, and major memory and performance improvements.
SevenTTY v1.2.0
The biggest release yet — SCP and FTP file transfer, 34 new shell commands, flicker-free rendering, output redirection, and major memory and performance improvements.
New Features
- SCP file transfer — download and upload files over SSH with scp command. Supports password and key auth, glob patterns for batch upload (scp *.txt user@host:~), transfer progress display
- FTP client — full FTP client with ftp get/put/ls subcommands and wget ftp:// integration. PASV mode, progress bar, glob uploads, password prompt
- Output redirection — shell commands and nc now support > file (truncate) and >> file (append) to redirect output to local files
- 34 new shell commands:
- Checksums: md5sum, sha1sum, sha256sum, sha512sum, crc32
- Text processing: grep (-ivnc), head, tail, wc (-lwc), nl, cut (-d -f), fold (-w), rev, rot13, strings (-n)
- File utilities: hexdump, xxd (-r), cmp, ln -s (creates real Mac aliases), readlink, realpath, which, basename, dirname
- Line ending converters: dos2unix, unix2dos, mac2unix, unix2mac
- System: uptime, cal, hostname, history, sleep, seq
- fixtype command — auto-set Mac type/creator codes from file extension, with glob and multi-file support
- Vertical scrollbar — proper Mac scrollbar control with arrow, page, and thumb tracking
- Finder alias resolution — local shell commands transparently resolve Finder aliases (cd, cat, open, ls, cp, head, tail, etc.), including in glob expansion and tab completion
Improvements
- GWorld offscreen row buffer — terminal rows are composed offscreen and blitted atomically via CopyBits, eliminating erase-then-draw flicker
- Dirty row tracking — only changed rows are redrawn (10-24x fewer cells drawn for cursor blink, single-char echo, etc.)
- GWorld depth matching — uses screen depth instead of fixed 32-bit, avoiding expensive depth conversion on 8-bit displays
- Memory diet — scrollback and shell history moved from embedded arrays to heap-allocated pointers (saves ~320KB from globals). Thread stacks reduced. Partition size reverted to 2MB, runs on 4MB Macs
- Mac Roman to UTF-8 conversion — local shell output correctly converts Mac Roman high bytes to UTF-8 for proper glyph rendering in vterm
- ANSI.SYS compatibility — translates ESC[s/u (cursor save/restore) to DEC VT sequences for correct BBS ANSI art display
- wget threaded worker — downloads run in a cooperative thread (no more UI freeze). Inline progress, download speed on completion, -n flag to suppress progress
- wget improvements — TLS handshake timeout, redirect handling (scheme-relative, absolute, bare relative), content-length validation
- rm glob support — rm *.bin with -i interactive confirm
- Scroll shortcuts — Cmd+Up/Down scrolls one line, Shift+PageUp/Down scrolls half page
- Paginated help — help output now shows --more-- prompt
- cal improvements — full year view (cal 2026) with 3 months per row, today highlighted in reverse video
Bug Fixes
- FTP multiline response fix — FTP connections no longer hang on servers that send multiline 230 responses (e.g., ftp.gnu.org). Root cause: null-termination of parsed line corrupted the first byte of the next buffered line
- FTP connection refused handling — properly handle kOTLookErr/T_DISCONNECT
- OT send deadlock fix — kOTFlowErr now yields instead of falling through as fatal. Fixes busy-loop deadlock during sustained writes (SCP upload)
- SCP upload stall fix — broken int64 formatting on 68K fixed with manual uint64-to-decimal in libssh2 fork
- SCP path fixes — filenames with spaces, ~ as remote directory, basename from Mac colon paths, buffer overflow guard
- Symbol font fixes — font family ID moved to 29183 to avoid conflicts with system fonts. Resources pinned with HNoPurge, Font Manager cache primed at startup
- DrawGrowIcon clipped — prevents horizontal line from cutting across terminal content
- Memory leak fix — scp_auth_prompt prefs restoration
