Skip to content

v0.53

Choose a tag to compare

@andy5995 andy5995 released this 25 Jul 06:22
8f1aa88
  • Support Synchronet's VOTING.DAT: show each message's up/down vote count, show
    polls as messages with their results, and cast your own votes with 'W'.

  • On a UTF-8 terminal, draw text through the wide curses API instead of writing
    raw single bytes, so accented characters no longer disappear or swallow the
    character next to them. CP437 text is mapped to Unicode for display. (#29)

  • Renamed the project from MultiMail to NoCarrierMail. The binary is now
    ncmail, the config file is ~/.ncmailrc (ncmail.rc on DOS/Windows), and
    the default data directory is ~/ncmail. Copy ~/.mmailrc to ~/.ncmailrc
    to keep your old settings.

  • Fix a crash when reopening a Blue Wave packet whose reply had subscription
    changes: reading the saved area-change list walked off the start of the line
    buffer on the blank lines between area entries.

  • Treat a Blue Wave area you are subscribed to (the INF_SCANNING flag) as
    active, even when the packet carries no new mail for it. Before, only areas
    with messages could be unsubscribed, so most areas could not be dropped and
    the "Subscribed" list showed too few areas.

  • Fix a crash (or silent string corruption) when viewing ANSI/Avatar art
    containing an escape sequence with more than one parameter, caused by an
    overlapping strcpy in the escape-parameter parser.

  • Detect QWK packets whose .NDX entries point into a message body instead
    of a header and fall back to indexing directly from MESSAGES.DAT, instead
    of filling the letter list with "ERROR READING MESSAGES.DAT".

  • The C key (toggle console charset) now shows the new charset in a popup,
    so the change is visible even when the current text is all ASCII.

  • When the external viewer (L key) is a GUI program, show a notice on the
    terminal while it is open, so mm no longer looks hung behind it.

  • Accept UTF-8 input in editable fields (To, Subject, taglines, etc.). A
    pasted or composed character is folded to the single-byte internal encoding;
    characters that don't fit become '?'. Fixes mangled non-ASCII names like
    "Björn Felten".

  • In the message list, size the From and To columns to their actual content
    and give the leftover width to the Subject column, instead of a fixed 50/50
    split. Long subjects (QWKE, SOUP, OMEN, or QWK with HEADERS.DAT) now use the
    freed space when the names are short.

  • Fixed a crash (out-of-bounds read) when opening a packet after closing
    another, triggered from the Personal area's message lookup.

  • Fixed a memory leak when cancelling a reply being entered.

  • Fixed a memory leak when a packet fails to open (e.g. a corrupt archive).

  • Fixed undefined behavior (a negative left-shift) when parsing a QWK message
    header whose block count is zero or blank.

  • Cancel the "Max lines per part?" split prompt on empty input, instead of
    silently proceeding with the previous value.

  • Fixed a shell command-injection: paths and filenames are now fully quoted
    before being passed to the external (de)compressor or editor, not just when
    they contain a space.

  • Allow 71-character To/Subject when composing QWK replies if the packet
    ships a HEADERS.DAT, not only when QWKE is enabled -- so full-length
    headers can be entered (and written to HEADERS.DAT) on Synchronet packets
    with QWKE turned off.

  • Fixed an out-of-bounds read in the ANSI viewer (e.g. when showing a
    bulletin), which could crash the reader.

  • Fixed a crash (heap corruption) when editing a saved reply.

  • Fixed a buffer over-read on blank lines in packet control files.

  • Fixed a memory leak in the help window.

  • Choosing "Kill" for existing replies when opening a packet now asks for
    confirmation first, so an accidental "K" no longer deletes them.

  • The packet-delete confirmation in the packet list now defaults to "No"
    (so Enter no longer deletes the highlighted packet).

  • Read Synchronet HEADERS.DAT, when present, for full-length From/To/Subject
    in QWK packets (instead of the 25-character MESSAGES.DAT fields).

  • Write Synchronet HEADERS.DAT in QWK reply (.REP) packets so user-authored
    From/To/Subject fields longer than 25 characters survive the round trip.
    (wmcbrine/MultiMail#22)

  • New "Ctrl-R" key in the packet list jumps to the reply directory, for
    browsing the saved reply (.REP) packets there.

  • The reading view now renders dates with a configurable "DateFormat"
    (a strftime string), defaulting to your locale ("%x %H:%M") instead of a
    fixed US m-d-y. Applies to QWK and .OPX packets and Blue Wave replies;
    Internet (SOUP/Usenet) and BBS-defined dates are still shown as received.
    (upstream issue #6)

  • Build system: switched to Meson for Unix/Linux, macOS, and Windows
    (MSYS2 with ncurses, MSVC with PDCurses), with per-platform CI and a
    unit-test suite (also run under AddressSanitizer/UBSan). The top-level
    GNU Makefile was removed; the DOS/OS2 cross-compiler makefiles remain.

  • New "Viewer" keyword and "L" key in the letter window: open the current
    message in an external viewer -- a terminal pager like "less", or a GUI
    editor like "mousepad" -- so links can be clicked and text selected.
    Defaults to $PAGER, else "less" (Unix) or "more" (Windows/OS2).

The following landed in the MultiMail repository
(https://github.com/wmcbrine/MultiMail) after 0.52 but were never part of a
tagged release; they ship here for the first time:

  • The ANSI viewer now handles Renegade/Telegard pipe color codes, including
    the single-letter Celerity codes.

  • The ANSI viewer interprets Synchronet color codes; the letter viewer strips
    them and skips Synchronet kludge lines.

  • Fixed crashes triggered by some malformed .NDX files.

  • Fixed a segfault on exit with the PDCurses/SDL backend.

  • An empty .MIX file is now tolerated instead of causing an abort.

  • Fixed reading back .PDQ reply files.

  • Preserve the case of existing .XTI and .FDX files, so duplicate copies are
    not archived.