• src/syncterm/term.c

    From Deuc¨@VERT to Git commit to main/sbbs/master on Wednesday, January 08, 2025 16:33:58
    https://gitlab.synchro.net/main/sbbs/-/commit/1fe1adc1757d2e778d57044d
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Don't fiddle with the status bar fonts if we're not going to update it.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Thursday, January 09, 2025 08:32:09
    https://gitlab.synchro.net/main/sbbs/-/commit/430629d878abb64bc7f852b7
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Let time get big enough to be too big

    Previous commit capped it too early.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Sunday, January 12, 2025 11:52:06
    https://gitlab.synchro.net/main/sbbs/-/commit/3c9e6b01e1a15486dfacdb32
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Don't sleep() after receiving input.

    2.1 seconds.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Sunday, January 12, 2025 12:13:57
    https://gitlab.synchro.net/main/sbbs/-/commit/9ab17ee464c2f66b5570863a
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Don't egregiously use strlen() for ZRQ and OOII buffers.

    We're building these one byte at a time, we know the length.
    1.98s

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Monday, January 27, 2025 09:08:14
    https://gitlab.synchro.net/main/sbbs/-/commit/855af348ce4a9b189aa553aa
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix legacy attributes when redrawing status bar

    legacy_attr is the CGA attribute, not ANSI colours. :D
    Fixes ticket 183.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Tuesday, January 28, 2025 17:15:28
    https://gitlab.synchro.net/main/sbbs/-/commit/985cc21745ba1a7c166c31d8
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Send login info in a single conn_send() call

    Should "fix" the timing difference in login info between modes.
    This removes a 10ms SLEEP() between the different pieces of data,
    and would likely have resolved ticket 185 if it wasn't already
    closed.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Friday, February 14, 2025 01:08:40
    https://gitlab.synchro.net/main/sbbs/-/commit/5024cc95cb2bb8845dfe4105
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix up the Mode 7/Prestel key bindings to match Commstar

    This mostly just changes the arrow key bindings and adds support
    for Ctrl+Fx and Shift+Fx, and makes End Copy.

    The big change though is that Page Down, not Tab now toggles reveal
    mode. Sorry all you guys with 60% keyboards.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Friday, February 14, 2025 01:14:19
    https://gitlab.synchro.net/main/sbbs/-/commit/9ffa3a6e6b9d366918fc1aeb
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Make F3 toggle reveal just like PgDown

    That's what Commstar uses in Prestel mode after all.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Monday, February 24, 2025 20:36:28
    https://gitlab.synchro.net/main/sbbs/-/commit/5d91359891c85012a9f6c1c6
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Set up CP437 mode before zmodem auto up/download

    Fixes use of system font during up/downloads when auto-started.

    Ticket 194

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Saturday, March 01, 2025 15:44:35
    https://gitlab.synchro.net/main/sbbs/-/commit/d6e4f682df39c17355dea370
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Pass all control keys through to remote in Beeb mode

    Implements feature request #104

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Monday, September 22, 2025 20:38:59
    https://gitlab.synchro.net/main/sbbs/-/commit/b5dd8353c73260d7f2737fe9
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Avoid the need for *00 at end of CET Telesoftware download

    Just buffer everything from the last clear-screen to the end of
    the transfer, then display it after the download.

    While we're here, clean up the error handling a bit, and complicate begin_download() to offset that.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Wednesday, September 24, 2025 08:31:38
    https://gitlab.synchro.net/main/sbbs/-/commit/148287b048d2425c44980160
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix a couple double-free issues

    With the cleanup code added, any free()s need to be set to NULL...
    But there's no reason to call free in the first place anymore.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Wednesday, September 24, 2025 08:47:40
    https://gitlab.synchro.net/main/sbbs/-/commit/8bdf5018a802f31d838ecc36
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix two issues

    When the terminal was 40 columns wide, the status bar update wrote
    out of bounds of the allocation. Fixed two ways.

    Remaining blocks in CET Telesoftware downloads were not properly
    updated for retries.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Thursday, September 25, 2025 23:59:53
    https://gitlab.synchro.net/main/sbbs/-/commit/b5052ce242827c2c19e1bf48
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Remove telstar detection and slowing down

    All Glass TTY nodes have been updated to fix the issue now.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Friday, September 26, 2025 00:08:04
    https://gitlab.synchro.net/main/sbbs/-/commit/f1fcd09eb056e38bbf8991db
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Whoops, we need limits.h for DBL_MIN

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Friday, September 26, 2025 00:11:49
    https://gitlab.synchro.net/main/sbbs/-/commit/1b33f1ebf9082148a197cd9b
    Modified Files:
    src/syncterm/term.c
    Log Message:
    DBL_MIN is in float.h, not limits.h

    Harumph.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/m on Saturday, September 27, 2025 20:08:00
    https://gitlab.synchro.net/main/sbbs/-/commit/8dee93ee8ead84c83c971e56
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Use enum values for mouse mode.

    Also, in RIP mode, scroll wheel up enters scrollback, it doesn't
    send XTerm mouse commands to the remote. :D

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Friday, October 24, 2025 20:16:26
    https://gitlab.synchro.net/main/sbbs/-/commit/b9cfc7e81c0d260458d6f89c
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix download window corruption

    Probobly introduced by eb1fd0eeb6d, the progress window would scroll
    when the progress bar was displayed.

    Two changes here... save/restore the window and cursor position
    in the _progress() functions, and disable window scrolling when
    updating the progress window.

    The first is just good hygene, the second is the actual fix.

    Should fix ticket 210

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on ChromeOS)@VERT to Git commit to main/sbbs/master on Sunday, November 30, 2025 15:19:45
    https://gitlab.synchro.net/main/sbbs/-/commit/a05fec3af8ef4c76dbbaddde
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Use GNU printf attribuite to detect (and fix) several printf-formatting bugs

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on ChromeOS)@VERT to Git commit to main/sbbs/master on Sunday, November 30, 2025 15:19:45
    https://gitlab.synchro.net/main/sbbs/-/commit/62e58702ea70431b411b170b
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Display a sensible error message if the X/YMODEM receive file is a directory

    Previously, it'd just display "Error 21 creating path/<filename>"

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on ChromeOS)@VERT to Git commit to main/sbbs/master on Sunday, November 30, 2025 15:19:45
    https://gitlab.synchro.net/main/sbbs/-/commit/453cf4861513ea2b2b85fdaa
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Eliminate double-slash in download file path if download dir ends in slash

    If the user-specified download path ends in a slash, we'd create a download path for x/ymodem-downloaded files with a double-slash. Fix that.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Friday, December 05, 2025 21:21:09
    https://gitlab.synchro.net/main/sbbs/-/commit/76b61fd28481eb60d6d7db89
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Use snprintf() appropriately when copying dldir

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Monday, December 15, 2025 17:20:56
    https://gitlab.synchro.net/main/sbbs/-/commit/61b94cdff4db351ae0d5805a
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix warning for xmodem printf for status line

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Sunday, March 15, 2026 01:06:05
    https://gitlab.synchro.net/main/sbbs/-/commit/d5e37e7999b5adf959d31e60
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix buffer overflows and missing NULL checks in term.c

    apc_handler(): two strcat(fn, p) calls append data from APC escape
    sequences (received from the remote BBS) into fn[MAX_PATH+1] without
    length checks. Changed to strlcat(fn, p, sizeof(fn)).

    mousedrag(): sbufsize was declared int but holds
    width * sizeof(vmem_cell) * height, which is assigned to malloc().
    On very large terminal dimensions the int multiplication can wrap,
    causing an undersized allocation. Changed sbufsize to size_t with
    an explicit (size_t) cast on the first operand. Also added a NULL
    check on the three malloc() calls Ä previously a failed allocation
    would be passed straight to vmem_gettext()/gettext() and crash.

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Sunday, March 15, 2026 01:06:05
    https://gitlab.synchro.net/main/sbbs/-/commit/95e02a29689ac912ba72c058
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix NULL deref, buffer overflow, and over-allocation in term.c

    NULL deref in cet_telesoftware_try_get_block() (line 1269): malloc()
    result dereferenced without NULL check. The caller already handles a
    NULL return via retry loop.

    strncat overflow in apc_handler() (line 4352): The SyncTERM:C;S APC
    handler appended a network-controlled filename to fn[MAX_PATH+1]
    using strncat, whose third argument limits source bytes, not
    destination space. A malicious server sending a long filename in the
    APC sequence overflows the stack buffer. Replace with strlcat bounded
    by sizeof(fn).

    b64_decode_alloc() over-allocation (line 3538): Operator precedence
    bug: "slen * 3 + 3 / 4 + 1" computes slen*3+0+1 (since 3/4 is 0 in
    integer division) instead of the intended base64 size. This wastes 4x
    memory on 64-bit and can wrap size_t on 32-bit. Fix to the standard
    formula (slen+3)/4*3+1.

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Sunday, March 15, 2026 14:09:13
    https://gitlab.synchro.net/main/sbbs/-/commit/7b847a23bef419ee2ec96e6f
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix multiple bugs in term.c

    - CET telesoftware: invert success flag (was "success = st.aborted",
    now "success = !st.aborted").
    - CET telesoftware: when frame count exhausts without end-of-file
    marker, set frames_remaining to 999 (unknown) and continue rather
    than silently underflowing on next decrement.
    - CET block allocation: add +1 byte for NUL terminator to prevent
    off-by-one write past flexible array member.
    - get_cache_fn_base/get_cache_fn_subdir: add bounds checks before
    strcat to prevent buffer overflow with long BBS names or subdirs.

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Sunday, March 15, 2026 19:01:12
    https://gitlab.synchro.net/main/sbbs/-/commit/fe6b7aceafcd4768736620c7
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix truncated conn_send() lengths for keyboard escape sequences

    43 conn_send() calls were passing incorrect buffer lengths, causing
    truncated escape sequences to be sent to the remote host:

    - Delete key (non-DECBKM): sent 1 byte of "\x1b[3~" instead of 4
    - F1-F5: sent 3 bytes of 5-byte sequences (e.g. "\033[11~")
    - Shift+F1-F5, Ctrl+F1-F5, Alt+F1-F5: sent 3 bytes of 7-byte
    sequences (e.g. "\033[11;2~")
    - Shift+F6-F12, Ctrl+F6-F12, Alt+F6-F12: sent 5 bytes of 7-byte
    sequences (e.g. "\033[17;2~")

    The lengths appear to have been copy-pasted from the 3-byte arrow key
    sequences without being updated for the longer function key strings.

    Unmodified F6-F12 (5-byte) and arrow/nav keys (3-byte) were already
    correct.

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Monday, March 16, 2026 21:53:14
    https://gitlab.synchro.net/main/sbbs/-/commit/352aeaaf9bf5499ef4c558e0
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Skip hyperlink hover tracking when status bar is disabled

    Prevents stale hover_hyperlink_id state and avoids blocking
    update_status() when there is no status bar to update.

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

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Monday, April 20, 2026 10:33:00
    https://gitlab.synchro.net/main/sbbs/-/commit/0df1dbb7a7fe58def3731ac5
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Move hangup handing into helper function

    This enables splitting key handing into pre/post CTerm processing.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Monday, April 20, 2026 10:33:00
    https://gitlab.synchro.net/main/sbbs/-/commit/0f163cedfd53e8c662123a62
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix doorway mode

    We have a small number of controls that are ALWAYS available in
    SyncTERM. These are checked before cterm_encode_key().

    The rest are only checked if cterm_encode_key() didn't send anything.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Thursday, April 23, 2026 18:36:01
    https://gitlab.synchro.net/main/sbbs/-/commit/93f9184e28878700f6b175af
    Modified Files:
    src/syncterm/term.c
    Log Message:
    SyncTERM: include modifier keys in mouse reports

    fill_mevent() ignored mouse_event.kbmodifiers, so Shift/Ctrl/Alt chords
    on the mouse always arrived at the host with the modifier bits cleared. BBS-side code could not distinguish Ctrl+Click from a plain click.

    Map CIOLIB_KMOD_SHIFT/ALT/CTRL to xterm's Cb modifier bits (4/8/16) and
    OR them into the reported button code for both legacy (CSI M) and SGR
    (CSI <) reporting. X10 compatibility mode (DECSET 9) is press-only and button-bits-only per spec, so modifiers are suppressed there.

    In the legacy branch the OR happens after the "release -> button = 3"
    clamp, so release events still carry modifiers. The modifier bits
    (4/8/16) do not collide with the existing +61/+121 high-button offsets
    or the +32 motion bit.

    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/master on Friday, April 24, 2026 23:12:39
    https://gitlab.synchro.net/main/sbbs/-/commit/e8f12ae5ea662c60c31d1dea
    Modified Files:
    src/syncterm/term.c
    Log Message:
    syncterm: guard SFTP UI calls in term.c with WITHOUT_DEUCESSH

    term.c referenced sftp_browser_run, sftp_degraded_run,
    sftp_queue_activity, and sftp_queue_screen_run unconditionally, but
    their .c files (sftp_browser.c, sftp_degraded.c, sftp_queue.c, sftp_queue_screen.c) are gated behind NOT WITHOUT_DEUCESSH in CMakeLists.txt:319. When the MSVC builder auto-flips WITHOUT_DEUCESSH
    ON (vendored Botan unavailable), the link fails with four LNK2019s.
    Wrap the four call sites and the four sftp_*.h includes in
    #ifndef WITHOUT_DEUCESSH, matching the pattern used in syncterm.c,
    conn.c, and bbslist.c.

    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/master on Friday, April 24, 2026 23:19:17
    https://gitlab.synchro.net/main/sbbs/-/commit/fc9b42001112bdca45726087
    Modified Files:
    src/syncterm/term.c
    Log Message:
    syncterm: hoist sftp_up/dn_active out of WITHOUT_DEUCESSH guard

    term.c references sftp_up_active / sftp_dn_active again at the col-28/29 status-bar update (lines 581/591), outside the activity-poll block that e8f12ae5ea wrapped in #ifndef WITHOUT_DEUCESSH. Move the declarations
    above the guard so the variables are still in scope (and zero, so the
    status bar shows idle) when SSH is compiled out.

    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/master on Monday, April 27, 2026 07:32:51
    https://gitlab.synchro.net/main/sbbs/-/commit/82f672dacffa7852f5997ea2
    Modified Files:
    src/syncterm/term.c
    Log Message:
    I meant , not 

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Sunday, June 07, 2026 22:31:03
    https://gitlab.synchro.net/main/sbbs/-/commit/a44a81fca9fe696ff5fac317
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix reading of PBM P4 files

    If the width is not a multiple of eight, ignore the last padding bits
    at the end of each line.

    But really, there's no reason to create a PBM where the width isn't
    a multiple of eight.

    Fixes issue reported by DigitalMan on Discord

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Friday, June 26, 2026 10:16:48
    https://gitlab.synchro.net/main/sbbs/-/commit/8e92a64682904c7f3210751a
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Actually hook up lf_expand

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¨@VERT to Git commit to main/sbbs/master on Monday, July 13, 2026 14:04:41
    https://gitlab.synchro.net/main/sbbs/-/commit/bc7374d01c25c85883f9f521
    Modified Files:
    src/syncterm/term.c
    Log Message:
    Fix SGR pixel mouse coordinate origin

    DECSET 1016 reports one-based pixel coordinates, but the conversion
    from ciolib's zero-based high-resolution mouse position subtracted the one-based cterm origin directly. This removed one full character cell
    from each axis and could report zero or negative coordinates near the
    top or left edge.

    Use the zero-based pixel origin implied by the one-based cterm cell
    origin instead, and treat high-resolution coordinates as present only
    when both axes are non-negative. This keeps valid zero-valued pixels
    from being mistaken for missing data while preserving the text-coordinate fallback for backends that do not provide pixel positions.

    Fixes SourceForge ticket 267.

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

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