• src/syncterm/scripts/auto

    From Deuc¿@VERT to Git commit to main/sbbs/m on Thu May 7 16:09:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/f20886b395b1c6fe878bae55
    Added Files:
    src/syncterm/scripts/auto/connected/transfer_app.wren src/syncterm/scripts/ui_logview.wren ui_logview_test.wren ui_progress.wren ui_progress_test.wren src/syncterm/wren_bind_xfer.c wren_bind_xfer.h
    Modified Files:
    src/syncterm/CMakeLists.txt GNUmakefile Wren.adoc src/syncterm/scripts/syncterm.wren ui_demo.wren ui_style.wren wrentest.wren src/syncterm/term.c wren_bind.c wren_host.c
    Log Message:
    SyncTERM: move transfer-window UI to Wren

    Replace the C-side draw_transfer_window/transfer_complete plumbing
    and the per-protocol cprintf progress callbacks with a Wren
    TransferApp driven by a worker thread + bounded mailbox. C side
    runs each protocol on its own thread and pushes pre-formatted
    status lines through xfer_tick_lock/get/unlock; the main thread
    stays in TransferApp's modal loop, which composes ProgressBar and
    LogView widgets.

    Worker-to-main marshalling covers the two thread-unsafe UI paths: duplicate-file resolution and the YMODEM->XMODEM filename prompt
    fallback. All six protocol entry points (zmodem recv/send/batch,
    xmodem/ymodem recv/send/batch, cet recv) now flip binary mode and
    hand off to wren_run_transfer; lputs auto-routes via the mailbox
    when xfer_session_active().

    Drops ~1100 lines of C Ä the legacy log_ti/progress_ti/transw_ti
    windows, ask_overwrite, the per-protocol progress functions, and
    the cputs-into-window logging path.

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/m on Fri May 8 21:16:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/4bff151e82908c31a779210b
    Added Files:
    src/syncterm/scripts/auto/connected/transfer_pick.wren
    Modified Files:
    src/syncterm/scripts/auto/connected/keys_default.wren online_menu.wren src/syncterm/scripts/syncterm.wren src/syncterm/term.c term.h wren_bind.c wren_bind_conn.c wren_bind_conn.h wren_bind_xfer.c wren_bind_xfer.h
    Log Message:
    SyncTERM: move begin_upload / begin_download to Wren

    Replace the C-side begin_upload() and begin_download() uifc dialogs
    with Wren UploadApp / DownloadApp classes Ä protocol picker uses
    ListView, file selection goes through Host.pickFile / pickFiles
    (uifc filepick wrapper), XMODEM filename via Prompt.

    Three new Transfer foreigns dispatch into the existing protocol
    entry points: Transfer.upload(kind, path, lastCh),
    Transfer.uploadBatch, Transfer.download. Kinds are stringly-typed
    ("zmodem", "ymodem-g", "xmodem-1k", "cet", ...) so the C side can
    fan out to the right xmodem_*/zmodem_*/cet_telesoftware_download
    call without exposing mode flag bits to Wren.

    The foreigns can't run wren_run_transfer directly Ä wrenCall is
    forbidden from inside a foreign method (wren.md 7). They record
    the user's choice in a single-slot xfer_pending struct and return
    immediately; xfer_drain_pending(), called from doterm() at C
    top-level, runs the actual dispatch. Auto-Z drains right after wren_run_upload_app() returns; Alt-D / Alt-U are picked up at the
    next outer-loop iteration.

    Hook.onKey for Alt-D / Alt-U lives in keys_default.wren (matches
    the Alt-B / Alt-C / Alt-X migration pattern). Conn.upload() and Conn.download() Wren foreigns are gone Ä online_menu now calls
    UploadApp.run / DownloadApp.run directly.

    Deletes ~210 lines of C: begin_upload, begin_download, the Alt-D /
    Alt-U switch cases in doterm(), fn_Conn_upload / fn_Conn_download.

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/m on Sat May 9 18:36:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/fe8b2f6258f746aafb9e0a57
    Added Files:
    src/syncterm/scripts/auto/connected/font_pick.wren
    Modified Files:
    src/syncterm/scripts/auto/connected/keys_default.wren online_menu.wren src/syncterm/scripts/syncterm.wren ui_list.wren src/syncterm/term.c term.h wren_bind.c wren_bind_conn.c wren_bind_conn.h wren_bind_fs.c wren_bind_fs.h wren_bind_screen.c wren_bind_screen.h
    Log Message:
    SyncTERM: move font_control to Wren

    Replace the C-side font_control() uifc dialog with a Wren FontApp
    class. The picker uses ListView over Font.name(0..count-1), with
    Insert keying into Host.pickFile + Font.load(file). Hook.onKey
    for Alt-F lives in keys_default.wren; online_menu's "Font Setup"
    entry now calls FontApp.run() instead of Host.fontControl().

    Two new foreigns:
    - CTerm.altFont / CTerm.altFont=(slot) Ä getter/setter for
    cterm->altfont[0]. Setter calls ciolib_setfont(slot, false, 1)
    and updates the cache.
    - Font.load(file) Ä takes a File foreign (not a path string) and
    extracts the path internally via the new wren_file_path() helper
    in wren_bind_fs. Keeping bare paths out of Wren preserves the
    consent-token model: only paths the user explicitly approved
    through a picker can be opened.

    Two pre-existing bugs surfaced by this work, fixed in passing:
    - ListView.preferredHeight returned the unbounded item count, so a
    pane with fitContent() over the 100+ populated font slots
    overflowed the screen. Cap it at screen height minus a chrome
    budget (ListView already scrolls).
    - ListView.handleKey_ didn't guard `cp` before `cp >= 0x20`, so any
    extended key with null codepoint (Insert, function keys, arrows)
    that fell through the explicit handlers crashed with
    "Null does not implement '>=(_)'".

    Deletes ~75 lines: font_control() in term.c, the Alt-F switch case
    in doterm(), fn_Host_fontControl() shim, Host.fontControl()
    declaration.

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/m on Sun Jun 28 12:34:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/c060d433df60ef5077b9c363
    Added Files:
    src/syncterm/scripts/auto/connected/host_popup.wren
    Modified Files:
    src/syncterm/Wren.adoc src/syncterm/scripts/ui_popup.wren ui_popup_test.wren src/syncterm/term.c wren_host.c wren_host.h wren_host_internal.h
    Log Message:
    Route terminal popups through Wren alerts

    Co-Authored-By: OpenAI Codex <codex@openai.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/m on Sun Jul 19 13:28:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/78c47f4897fa64b70557d6b5
    Added Files:
    src/syncterm/scripts/auto/picker/file_picker.wren src/syncterm/scripts/syncterm_picker.wren src/syncterm/wren_bind_picker.c wren_bind_picker.h
    Modified Files:
    src/syncterm/CMakeLists.txt objects.mk src/syncterm/scripts/menu_theme.wren picker_bootstrap.wren syncterm.wren src/syncterm/wren_bind_fs.c wren_bind_internal.h wren_picker_host.c wren_picker_host.h
    Log Message:
    wren: route file selection through the picker VM

    Run file selection in a third persistent Wren VM so menu and
    connected scripts never execute the picker implementation directly.

    Expose only directory listings, path resolution, metadata, and a
    one-shot completion object to picker scripts. Preserve the existing
    single, directory, save, and cross-directory multi-select behavior.

    Carry create-versus-overwrite consent out of the picker explicitly.
    Save and restore screen, mouse, and cursor state in C, with input
    barriers on both ownership transitions.

    Keep picker errors inside a recovery screen where Escape cancels and
    Ctrl+` opens the picker-local REPL.

    Co-Authored-By: OpenAI Codex <noreply@openai.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/m on Sun Jul 19 13:28:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/1ca9a7c2d626fbe600ea029d
    Modified Files:
    src/syncterm/scripts/auto/picker/file_picker.wren
    Log Message:
    wren: center the file picker pane

    Inset the picker frame by two columns on each side so its body is
    centered while the two-column right shadow occupies the remaining edge.

    Start the frame on the second row and leave the final row for its bottom shadow. This preserves the existing top line without unnecessarily
    shortening the file lists.

    Co-Authored-By: OpenAI Codex <noreply@openai.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/m on Sun Jul 19 13:28:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/e8d5754b7f126d0a2e4c532e
    Modified Files:
    src/syncterm/scripts/auto/connected/font_pick.wren src/syncterm/scripts/menu_settings_ui.wren
    Log Message:
    wren: restore font picker options

    Match the custom-font editor with its C predecessor by enabling direct
    Path entry and leaving its size-specific mask editable.

    Restore the connected Alt+F loader to its original no-option behavior.
    Both Wren migrations had substituted literal bit 1, which locks the mask,
    for the distinct flags used by the previous callers.

    Co-Authored-By: OpenAI Codex <noreply@openai.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/m on Sun Jul 19 13:28:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/3e5ea94e13fc40f66633e807
    Modified Files:
    src/syncterm/scripts/auto/picker/file_picker.wren
    Log Message:
    wren: keep picker lists visually active

    Render both the directory and file lists with the active picker palette, regardless of which list currently owns keyboard focus.

    Focus continues to control event routing and selection, but no longer
    recolors the other half of the file browser as an inactive pane.

    Co-Authored-By: OpenAI Codex <noreply@openai.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/m on Tue Jul 21 09:28:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/a50e69645ff75924840895fc
    Modified Files:
    src/syncterm/scripts/auto/menu/main_menu.wren
    Log Message:
    Allow menu console from submenus

    Register Ctrl+` directly in the App global keymap instead of through
    the main-menu binding helper. That helper intentionally ignores commands
    while a modal is open, causing the console shortcut to be consumed without opening the REPL in settings, help, and editor panes.

    Keep the top-level guard for ordinary menu commands while allowing the
    current modal to remain mounted behind the console.

    Co-Authored-By: OpenAI Codex <noreply@openai.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/m on Thu Jul 23 20:26:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/8965e8be8e8ff9078b93ea53
    Modified Files:
    src/syncterm/scripts/auto/picker/file_picker.wren
    Log Message:
    wren: clarify invalid picker start paths

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net