Skip to content

Releases: ecliptik/flynn

Flynn v1.9.7

22 Mar 06:16
4a84999

Choose a tag to compare

Added

  • Zoom box in window title bar per Apple HIG (zoomDocProc)
    • Click to toggle between user-sized window and standard 80x24 grid
    • Sets standard state to default terminal dimensions
    • Sends NAWS update to server on zoom while connected

Changed

  • Scrollbar width from 16 to 15 pixels, matching Geomys UI dimensions
  • Build system: renamed macplus preset to lite, full is now default
  • README: added direct download links, auto-updated in release.sh

Fixed

  • BUILD.md examples updated to reflect full as default preset
  • BUILD.md: added apt-get install line for Debian/Ubuntu prerequisites

Downloads

Edition Description Memory
Flynn Full build — 4 sessions, 192-line scrollback, all features including 256-color ~768KB
Flynn Lite Recommended — 1 session, 96-line scrollback, most features ~384KB
Flynn Minimal Bare-bones — 1 session, no scrollback, stripped features ~256KB

See BUILD.md for custom build options.

Flynn v1.9.6

17 Mar 05:24

Choose a tag to compare

Added

  • Finger protocol client (RFC 1288) — File > Finger... (Cmd+F)
    • Query user information on remote hosts via TCP port 79
    • Host, username, and verbose (/W) fields in Finger dialog
    • Finger forwarding: user@host@gateway auto-splits and routes correctly
    • Remembers last finger host/username across launches
    • Status bar shows "finger | [user@]host"
    • Window title includes "(finger)" suffix
    • Per-bookmark protocol selection (Telnet or Finger) in bookmark editor
    • Favorites submenu dispatches finger bookmarks correctly
  • Configurable build system with 16 compile-time feature flags
    • 3 build presets: minimal (~256KB), macplus/lite (~384KB), full (~768KB)
    • Every major feature can be toggled: --finger, --color, --glyphs,
      --cp437, --clipboard, --savefile, --bookmarks, --darkmode,
      --dblwidth, --altscreen, --offscreen, --statusbar,
      --cursorstyles, --tabstops
    • Configurable sessions (1-4) and scrollback lines (0-256)
    • SIZE resource (Finder memory partition) dynamically computed from
      enabled features
    • Presets applied first, individual flags override:
      --preset minimal --finger --bookmarks
    • Three-layer guard pattern: CMake source exclusion, header no-op stubs,
      inline #ifdef guards (~163 guard sites across 26 files)
    • FlynnPrefs struct unchanged for cross-build prefs compatibility
  • Three release editions: Flynn (full), Flynn Lite (macplus), Flynn Minimal
  • Build documentation: docs/BUILD.md with complete flag reference,
    memory costs, presets, and examples
  • Direct offscreen memory writes bypass QuickDraw traps for rendering
    (font bitmap cache, direct glyph blit, direct erase/fill)
  • Shadow buffer skips unchanged rows via memcmp
  • Scroll sync uses memmove instead of CopyBits
  • Color GWorld offscreen buffer eliminates flicker on System 7
  • Optimized scrollbar arrow scrolling: ScrollRect + offscreen memmove
    renders only 1 row per arrow click instead of full 24-row redraw

Fixed

  • Dark mode rendering bugs: white bar at window bottom, status bar
    artifacts, stale offscreen content
  • Offscreen buffer reuse: clear pixel data when reusing for different
    window with same dimensions (prevented stale session content bleed)
  • Scrollback ring buffer index: corrected formula for partially-filled
    buffers (was sb_head+sb_count+sb_row, now sb_head+sb_row)
  • Drain loop data race: process pending TCP data before checking for
    disconnect state transition
  • System 7 GWorld rendering stability and artifact fixes
  • icl8/ics8 icon polarity for System 7 color displays
  • 68000 address error in offscreen_fill_rect

Changed

  • Default build uses macplus preset: 1 session, 96-line scrollback, ~384KB
    partition (was 4 sessions, 192-line scrollback, ~768KB)
  • Binary size: 91KB minimal, 125KB default, 130KB full
  • Release script builds all 3 presets and uploads 6 artifacts per release
  • FlynnPrefs v12 (finger_host, finger_user, bookmark_protocol[])
  • File menu: Finger... inserted at position 2, items renumbered
  • Control menu disabled for finger sessions
  • Bookmark edit dialog: protocol popup (Telnet/Finger), dialog enlarged
  • Performance and security review: hardening, leak fixes, dead code
    removal, optimizations, and refactoring

Downloads

Edition Description Memory
Flynn Full build — 4 sessions, 192-line scrollback, all features including 256-color ~768KB
Flynn Lite Recommended — 1 session, 96-line scrollback, most features ~384KB
Flynn Minimal Bare-bones — 1 session, no scrollback, stripped features ~256KB

See BUILD.md for custom build options.

Flynn v1.9.4

11 Mar 21:10

Choose a tag to compare

Fixed

  • Option+Space (Ctrl-Space) not recognized: vkey_to_base table was 48
    entries, Space at vkey 0x31 (49) fell outside it. Extended table to
    include Space, enabling Ctrl-Space (0x00) for tmux prefix and similar
  • Option+/ (Ctrl-/) not recognized: added '/' to vkey_to_base table
    with special case since '/' & 0x1F produces wrong value (0x0F instead
    of 0x1F)
  • ANSI-BBS disconnect losing goodbye screen: telnet_init() zeroed the
    session's preferred_ttype before the snapshot restore check, so
    bookmark-specific ANSI-BBS sessions saw the global pref (e.g. xterm)
    and incorrectly restored the pre-clear snapshot. Now saves the
    session's terminal type before reset

Flynn v1.9.3

11 Mar 18:23

Choose a tag to compare

Added

  • 13 new Unicode glyph mappings: flower/florette dingbats (U+273E-2741),
    snowflake (U+2744), sparkles (U+2728), flower emoji (🌸🌺🌼🌟💫),
    plus 2 new QuickDraw primitives (flower, snowflake)
  • OSC 4 palette color query (rgb:RRRR/GGGG/BBBB replies from 256-color
    palette), OSC 10/11 default fg/bg color queries (dark_mode-aware),
    OSC 12/112 cursor color set/reset (no-op on monochrome XOR cursor)
  • Hierarchical submenus: Options menu now uses Font and Terminal Type
    submenus (20 items → 5), fixing menu scrolling off-screen on Mac Plus.
    File menu uses Favorites submenu for bookmark entries
  • Backspace mode toggle: DEL (0x7F) default for xterm/VT220, BS (0x08)
    for ANSI-BBS. Auto-switches when changing terminal type; manual override
    in Options menu ("Backspace Sends BS" checkmark)
  • Send Ctrl-H and Send Ctrl-X items in Control menu
  • Prefs v8→v9 migration for backspace_bs field

Fixed

  • Dark mode shutter effect on monochrome: EraseRect (white) → draw →
    InvertRect caused visible white flash per row. Now renders directly
    with PaintRect (black bg) + srcBic/patBic (white drawing)
  • BBS goodbye screen not displayed on disconnect: drain remaining TCP
    data before closing on TIME_WAIT; skip snapshot restore for ANSI-BBS
    terminal type to preserve goodbye screen
  • DNS lookup failure after prefs migration: backspace_bs field was inserted
    before dns_server in the FlynnPrefs struct, shifting all subsequent fields
    by 1 byte. DNS server "1.1.1.1" became ".1.1.1" (invalid), and username
    lost its first character. Fixed validation to reject leading-dot IPs and
    reset dns_server in migration
  • Backspace mode not auto-enabled when connecting with ANSI-BBS terminal
    type via bookmark or new session (only worked from Options menu)

Changed

  • Bookmarks renamed to Favorites throughout UI (menus, dialogs, labels)
  • Terminal Type menu reordered: xterm, xterm-256color, VT100, VT220,
    ANSI-BBS (display order decoupled from internal storage indices)
  • Connection status window widened from 240→320px, hostname truncation
    40→50 chars to accommodate longer hostnames
  • Performance: hot path optimizations in terminal parser and draw routines
  • Security: bounds checking on terminal response buffer flush
  • Dead code removal: ~50 lines removed, unused functions and defines cleaned up
  • Defensive improvements: conn_send() rejects zero-length writes, removed
    unused idle_skip field from Connection struct

Flynn v1.9.2

11 Mar 06:54

Choose a tag to compare

Added

  • CP437/ANSI-BBS terminal emulation for bulletin board systems
    • Full 256-entry CP437 lookup table mapping each byte to ASCII, Mac Roman,
      or QuickDraw glyph rendering
    • cp437_mode bypasses UTF-8 decoder for raw byte rendering, essential for
      BBS art using 0x80-0x9F range (C1 control code collision in UTF-8 mode)
    • ANSI-BBS terminal type in TTYPE negotiation, settings, preferences menu,
      and connect dialog — follows BBS community convention (ansi-bbs = CP437)
  • True SGR attribute rendering
    • Italic (SGR 3) via TextFace(italic)
    • Strikethrough (SGR 9) via horizontal line at cell mid-height
    • Dim (SGR 2) halves foreground RGB on color systems
    • Blink (SGR 5/6) promotes background to bright colors (DOS-style)
  • Bold-to-bright color promotion: SGR 1;30-37m promotes to bright colors
    (indices 8-15), matching standard ANSI/BBS behavior
  • UTF-8 CP437 fallback for BBSes that send raw CP437 bytes despite
    xterm-256color TTYPE negotiation
  • 57 new QuickDraw glyph primitives: double-line box drawing, mixed
    junctions, smileys, Greek/math symbols (160+ total primitives)
  • 18 fractional block element glyphs (U+2581-U+258F, U+2594-U+2595)
  • 60 sextant characters (U+1FB00-U+1FB3B) as 2x3 grid patterns
  • DNS-over-TCP fallback for NAT environments
  • Rendering diagnostic script (scripts/render-test.sh)

Fixed

  • DNS resolution through NAT: Snow's DaynaPORT rewrites UDP source IPs,
    causing Flynn to reject valid DNS responses. Removed redundant source IP
    validation (txn_id match already authenticates responses)
  • Backspace sends BS (0x08) instead of DEL (0x7F) for BBS compatibility
    (Linux telnetd accepts both; BBSes universally expect BS)
  • Bytes 0xF8-0xFF silently dropped by UTF-8 parser — now route to CP437
  • Legacy Computing chars (U+1FB00-U+1FBFF) produced double '??' instead
    of single '?' (they are single-width, not wide)

Changed

  • Glyph count: 103 → 160+ QuickDraw primitives
  • Dead code removal: 25 cases from boxdraw_to_dec() superseded by glyph
    tables, 3 cases from unicode_symbol_to_macroman(), dead block element
    fallback block (~50 lines, ~700 bytes recovered)
  • Performance: eliminated double cell fetch in draw_row() (~80K cycles/redraw
    saved on 68000), replaced dark shade MULU with shift operation
  • New source files: cp437.c, cp437.h

Flynn v1.9.0

10 Mar 22:26
ec4f8c6

Choose a tag to compare

Added

  • 256-color support on System 7 with Color QuickDraw
    • Full 256-color palette: 16 ANSI colors + 216 color cube + 24 grayscale
    • Truecolor (24-bit) SGR sequences downgraded to nearest 256-color match
    • Palette Manager rendering via PmForeColor/PmBackColor for performance
    • Color windows with NewCWindow/NewPalette on System 7, standard NewWindow on System 6
    • Runtime detection via SysEnvirons() hasColorQD — zero impact on System 6
    • Per-cell foreground and background colors stored in CellColor arrays
    • ATTR_HAS_COLOR (bit 6) flag for fast skip of default-colored cells
    • Color-aware dark mode: swaps default fg/bg, skips InvertRect on color systems
    • New source files: color.c, color.h
    • Memory: +52KB per session on System 7 color, zero on System 6 monochrome
  • 38 new QuickDraw primitive glyphs (103 total, up from 65):
    • Outline triangles: △ ▽ ▷ ◁ (U+25B3, U+25BD, U+25B7, U+25C1)
    • Small filled triangles: ▸ ◂ (U+25B8, U+25C2)
    • Diamonds: ◆ ◇ (U+25C6, U+25C7)
    • Half-circle variants: ◐ ◑ ◒ ◓ (U+25D0-U+25D3)
    • Fisheye circle: ◉ (U+25C9)
    • Six-pointed star: ✶ (U+2736)
    • Circled operators: ⊙ ⊕ ⊖ ⊗ (U+2299, U+2295-U+2297)
    • Superscript digits: ⁰¹²³⁴⁵⁶⁷⁸⁹ (U+2070, U+00B9, U+00B2, U+00B3, U+2074-U+2079)
    • Subscript digits: ₀₁₂₃₄₅₆₇₈₉ (U+2080-U+2089)
    • Superscripts/subscripts rendered at 60% font size with scaled positioning

Fixed

  • Terminal type not saved between sessions — Connect dialog now persists
    the last-used terminal type (xterm, VT220, VT100, xterm-256color)
  • Cursor XOR artifacts on color systems — arrow key editing on System 7
    caused stale inverse highlights because CSI cursor movement didn't mark
    rows dirty. Now tracks cursor position changes and marks affected rows
  • Disconnect screen preservation — screen buffer snapshotted on full
    clear (ESC[2J) and restored on disconnect, instead of wiping to blank
  • Session not cleaned up on bookmark connect failure — now properly
    destroys session if TCP connect fails after window was created
  • Replaced all sprintf with snprintf across 15 call sites
    (defense-in-depth buffer overflow protection)
  • Added bounds check to TTYPE/TSPEED subnegotiation buffer in telnet.c

Changed

  • Glyph emoji base relocated from 0x60 to 0x80 to accommodate expanded
    primitive range (0x00-0x66)
  • Lazy allocation of alt-screen and scrollback color arrays — deferred
    until first use, saving up to 38.5KB/session on System 7
  • Screen snapshot moved from shared static to per-session Terminal struct
    for multi-session correctness; only triggers on full-screen clear
    instead of every data receive (~1.5ms/receive saved on 68000)
  • Color default restore deferred to end of row instead of per-run,
    reducing redundant RGBForeColor/RGBBackColor traps by 10-15%
  • Removed idle polling skip counter — eliminates 8.5ms average added
    latency on keystroke echo
  • Single-session fast path in event loop — skips save/load state cycling
    when only one session is open
  • Idle WaitNextEvent timeout reduced from 500ms to 167ms when disconnected
  • SIZE resource increased from 640KB/512KB to 768KB/640KB for 4-session
    color headroom
  • Removed ~450 lines of dead code: deleted dnr.c/dnr.h (superseded by
    dns.c), 14 unused functions, 4 unused defines, deduplicated
    ATTR_HAS_COLOR definition
  • Build size: ~103KB (down from ~110KB after dead code removal)
  • Memory per session: ~79KB System 6 mono, ~92KB System 7 color (initial),
    ~130KB fully loaded with alt screen and scrollback color

Flynn v1.8.1

10 Mar 15:42

Choose a tag to compare

Fixed

  • Add icon family resources (icl4, icl8, ics#, ics4, ics8) for System 7
    Finder compatibility — custom Flynn icon now displays correctly instead
    of generic application icon

Flynn v1.8.0

10 Mar 06:56

Choose a tag to compare

Added

  • System 7 improvements (all conditional, System 6 behavior unchanged):
    • MultiFinder suspend/resume: proper app4Evt handling, cursor blink stops
      when backgrounded, WaitNextEvent sleep increases to 60 ticks when suspended
    • Required Apple Events: kAEOpenApplication, kAEQuitApplication handlers
      for System 7 compliance (Finder can request clean quit)
    • StandardPutFile: modern System 7 save dialog for Save Contents, falls back
      to SFPutFile on System 6
    • Notification Manager: flashes Apple menu diamond when a session disconnects
      while Flynn is in the background
    • Machine type in About dialog: shows "Running on Macintosh Plus" (or SE,
      II, IIci, etc.) via Gestalt

Changed

  • About dialog simplified per Apple HIG: condensed to app name/version,
    machine type, copyright, and GitHub link

Flynn v1.7.1

10 Mar 06:20

Choose a tag to compare

Added

  • Save Contents... (Cmd+S): save terminal scrollback and screen buffer to a
    plain text file via SFPutFile dialog. Creates TEXT/ttxt files readable by
    TeachText. Default filename is the connection hostname.
  • New savefile.c/savefile.h module for file save functionality

Changed

  • File menu reorganized per Apple HIG:
    • "Save Contents..." (Cmd+S) in its own section
    • "Bookmarks..." (Cmd+B) leads the bookmark section
    • Recent bookmarks listed under Bookmarks
    • "Add Bookmark..." (renamed from "Save as Bookmark...") moved after recents
    • Separators between file operations, save, and bookmark management
  • Cmd+S reassigned from "Save as Bookmark" to "Save Contents" (standard HIG
    convention for Cmd+S = save to file)
  • "Add Bookmark..." is now a dynamic menu item, enabling proper bookmark
    section grouping with Bookmarks... as the section leader

Flynn v1.7.0

10 Mar 05:38

Choose a tag to compare

Changed

  • Major codebase refactor: main.c reduced from 3,478 to ~494 lines (86% reduction)
  • Extracted dialogs.c: all dialog handling (connect, bookmarks, about, disconnect)
  • Extracted menus.c: menu management with per-menu dispatch handlers
  • Extracted input.c: keyboard/mouse handling with data-driven key mapping tables
  • Extracted clipboard.c: copy/paste/select all operations
  • Extracted macutil.c: shared utilities (c2pstr, sprintfp, set_wtitlef, clear_window_bg)
  • Extended session.c: font presets, ttype/font string helpers, window resize, init from prefs
  • Collapsed identical telnet option handlers with fallthrough in telnet.c
  • Extracted conn_resolve_host() from conn_connect() in connection.c
  • Split handle_menu() into per-menu handlers (handle_file_menu, handle_edit_menu, etc.)
  • Data-driven key mapping replaces if/else chain in handle_key_down()
  • Total compiled LOC reduced from 12,027 to 10,036 (17% reduction)

Fixed

  • Remote disconnect preserves terminal screen content (was wiped by terminal_reset)
  • Window repaint after disconnect alert restores terminal content in all modes

Removed

  • Dead conn_open_dialog() from connection.c
  • 6 unused TCP wrapper functions from tcp.c (~256 lines)