binkpoint - FidoNet/fsxNet Point-Software
Copyright (c) 2026 Michael Geller
Alle Rechte vorbehalten.
All rights reserved.

Changes in binkpoint 1.0.3 (since 1.0.2)
========================================

Message list
- When the window is resized the columns always fit the list width: no
  horizontal scroll bar any more, the "Date" column is at least as wide as
  its content and stays fully visible; a vertical scroll bar is taken into
  account. "Subject" takes the rest.
- Column widths dragged by hand (No., From, To, Date) are kept, saved in
  binkpoint.ini together with the window position and size, and restored on
  start. If the window is too narrow, To and From are shortened for display
  only; when it gets wider again the saved widths come back. Invalid or too
  small values -> defaults. The column order is fixed (columns cannot be
  moved).

Changes in binkpoint 1.0.2 (since 1.0.1)
========================================

Reader
- The message header (From/To/Subject/Date and "No. x/y") keeps its normal
  font size and height when zooming (Ctrl+mouse wheel, Ctrl+Plus/Minus,
  Ctrl+0) and when the font follows the window width. Only the message
  text below it scales; Ctrl+0 works as before.

Changes in binkpoint 1.0.1 (since 1.0)
======================================

Fixes
- About box: on Windows 11 the text (including the JAM notice) was hidden
  behind the links section. The size is now calculated from the real text
  height of the font (also with larger fonts/DPI) and the window stays
  inside the screen work area; if it does not fit, the text becomes a
  scrollable read-only field.
- "Delete boss / Export and delete / Cancel" question: height also from the
  text height.
- Larger fonts: the hint at the bottom of the netmail/message window and
  the language hint in the settings have room for two lines; the own
  name/origin hint is shorter and no longer hidden by the "Backup" group.

Netmail encryption
- Now called "Simple encryption" (tick box in the netmail window, status
  bar hint). A simple cipher, not strong security. Still blocked in
  FidoNet (zones 1 to 6).
- Key 1 to 20 characters (input fields limited), case-sensitive; leading/
  trailing spaces are ignored the same way when encrypting and decrypting.
  The method is detected from the ^ABPCRYPT line. The key is never stored -
  exchange it some other way.

Changes in binkpoint 1.0 (since 0.9)
====================================

About box and help
- Help -> About binkpoint is now a dialog with clickable links (blue, hand
  pointer): e-mail michael@g00r00.com, BBS website https://bbs.g00r00.com
  and join GooseNet 8118:1/0: https://bbs.g00r00.com/goosenet. Still shows
  21:1/177, the copyright and the JAM notice; new line with the main keys.
- Help menu: new entries "Website bbs.g00r00.com" and "Join GooseNet
  (8118:1/0)" (About stays the first entry).
- Only these three fixed addresses are ever opened (ShellExecuteW "open").

Search (Ctrl+F, F3)
- "Search" window: search text, fields From / To / Subject / Body,
  current area or all areas; case-insensitive (umlauts too). Result list
  (area, no., from, subject, found in), double-click or "Go to" jumps to
  the message, F3 = next match (then back to the first, with a message).
  At most 1000 matches.
- Searching runs under the shared JAM lock; while a toss/poll runs you get
  a message.

Thread view (Ctrl+T, View -> Threads)
- Echo areas only. Parent: ReplyTo first, then REPLY CRC = MSGID CRC,
  finally the subject (only messages with "Re:", "RE^2:", "Re[2]:", "AW:"
  ...). Replies indented ("   " per level + "> "), depth at most 31. The
  setting is stored in binkpoint.ini (threads=). Clicking a column header
  switches back to the sorted list.

Area list: description instead of tag (View -> Area descriptions)
- Descriptions from the AreaFix list (areas_<boss>.lst, saved by the
  Areas/AreaFix window). Without a description the tag stays. Stored in
  binkpoint.ini (area_names=). Menu entry only, no new toolbar button
  (the toolbar is already full at 1024 pixels).

Netmail address book (Ctrl+B, Mail -> Address book)
- Name, FTN address, note; New / Save / Delete (with confirmation),
  address check. File addressbook.txt (UTF-8, tab-separated) next to the
  config, at most 500 entries.
- When writing a netmail: "Address book ..." button -> use an entry
  (name + address). Message -> "Add sender to address book" and in the
  list's context menu.

Simple encryption for netmail between binkpoint users
- When writing a netmail: tick "Simple encryption", method Caesar or
  Enigma-style (3 rotors + reflector), shared key. Only the body
  (printable characters) is changed, not kludges, tearline or header.
  Kludge ^ABPCRYPT: <METHOD> 1 <checksum>.
- Not possible in FidoNet (zones 1 to 6: tick box disabled, saving
  refused), never for echomail.
- Reading: hint in the status bar, Message -> Decrypt netmail asks for the
  key (checksum) and only displays the plain text; the base stays
  encrypted. A simple cipher, not strong security.

Settings: backup
- "Back up now" button: ZIP of all message bases (all areas incl. netmail,
  bad, dupes) plus the config, binkpoint.ini, addressbook.txt and
  areas_*.lst in the "backup" folder next to the config, name
  binkpoint-backup-YYYYMMDD-hhmmss.zip. Note: the config inside the backup
  contains the passwords - keep backups private.
- Automatic: off / daily on exit / on every exit (binkpoint.ini
  backup_auto=, backup_last=).

Settings: bosses
- New boss: on saving, the inbound, outbound and netmail base folders are
  created (including intermediate folders), message in the status bar.
- Deleting a boss: the confirmation offers "Delete", "Export and delete"
  and "Cancel". The export is a ZIP (folder "export":
  boss-<name>-YYYYMMDD-hhmmss.zip) with the boss's JAM bases (netmail +
  its echo areas), its area list and its config section as
  boss-<name>.cfg.txt with password=, areafix_password= and pktpwd=
  replaced by "(entfernt / removed)". If the export fails, nothing is
  deleted. As before, the deletion happens on Save.

Toss/export: result in the status bar
- After toss/export/poll the status bar shows the result, e.g. "Export
  finished: OK - Export: 3 message(s) exported (echo 2, netmail 1)",
  "Export: nothing to export", "Toss: 5 message(s) from 1 packet(s)",
  "Toss: no new packets". On an error additionally "ERROR! Details in the
  log (Ctrl+L)"; for a manual toss/export the log pane is then shown.

Writing: no greeting template any more
- A new netmail or echomail starts with an empty body. A reply (netmail and
  echomail) contains only the quote in the existing style (" XY> "),
  nothing above it; the former "Hallo <first name>," line is gone.
- Checked closing template: binkpoint inserts no closing or signature
  template. On saving it only appends (as before, FTN standard) the
  tearline "--- binkpoint 1.0" and, for echomail, the origin line.

Documentation
- README/README.en: Ctrl+G = mark area as read, Ctrl+U = next unread (the
  German README wrongly said Ctrl+U marks the area read).

Tests
- New suite test/v10: unit tests (ZIP writer against unzip -t and Python
  zipfile, cipher round trips, zone check, subject hash, case-insensitive
  search, thread building incl. a 3000-message chain) and GUI tests under
  wine (search, threads, area descriptions, address book, cipher, reply
  without greeting, backup, folders, export, status bar, English).
  Screenshots: screens/v10/.
- Existing suites adapted to 1.0: version text "binkpoint 1.0" (PID,
  tearline, Via), reply in the editor test without greeting; therefore the
  bundle in the export test is 13 bytes smaller (1205 -> 1192 bytes).

Changes in binkpoint 0.9 (since 0.8)
====================================

Reader: selecting and copying text
- Mouse selection by dragging (flowing across lines), with automatic
  scrolling when dragging past the top/bottom edge; double-click selects a
  word, Shift+click extends the selection, a click without dragging clears
  it.
- Ctrl+A selects all, Ctrl+C / Ctrl+Insert copies (when the reader has the
  focus). Context menu (right mouse button, Shift+F10, menu key): Copy,
  Select all, and over a link Open link and Copy link.
- Clipboard as CF_UNICODETEXT: CP437 -> Unicode (umlauts, sharp s, box and
  block characters correct), no ANSI escape sequences, CR LF line ends,
  trailing spaces removed.
- Decision: logical lines are copied. Lines wrapped by the reader are
  joined again (one space at the wrap point, none at a hard break); the
  quote prefix repeated by the wrap is not copied.
- Selection drawn white on blue, also over ANSI colours, at every font size
  (zoom, fit to width) and in wrapped lines.

Reader: clickable links
- http://, https://, ftp://, telnet://, mailto: and www. are detected in the
  message text, not in kludges (not even when shown with Ctrl+K). Drawn
  underlined in the link colour, hand pointer over links, I-beam over text.
- A click without dragging opens the link with ShellExecuteW "open";
  www. is opened as https://www. Errors (e.g. no program for telnet:) ->
  message box with the URL.
- Security: only these six schemes; file://, javascript:, program and path
  names and every other scheme are never opened. The URL is checked again
  right before ShellExecuteW (scheme, printable URL characters only, max.
  2048 characters); no parameters.
- URLs wrapped by the reader (including the hard break of long URLs) are a
  link on every screen row and open in full. URLs split by the author with
  a real line break are not joined.
- New source src/elink.asm; the EXE additionally links shell32.

Tests
- New: test/links/run_link_tests.sh (37 link detection/check cases) and
  test/gui09/run_gui09_tests.sh (selection, clipboard, context menu,
  opening links through a test browser, rejected schemes, kludges, zoom,
  English); screenshots in screens/v09/.
- winprobe.exe also reads the clipboard, the reader metrics and the pointer
  type (window properties bp_cw/bp_ch/bp_hh/bp_top/bp_cur).
- Version strings of the existing tests updated to 0.9.

Not tested: real Windows (browser/mail client via ShellExecuteW, pasting
the clipboard into other programs, hand pointer).

Changes in binkpoint 0.8 (since 0.7)
====================================

Sysop name and origin (Settings, F9)
- New right-hand column "Sysop - defaults for all bosses": name (sysop=)
  and origin text (system=), saved globally before the first section (an
  existing line is replaced in place, otherwise inserted before the first
  "["). They apply to every boss without its own values.
- Per boss: check box "Use own name/origin" (unthemed, readable) with name
  and origin text for this boss. Checked: sysop=/system= in the
  [boss NAME] section (empty field = default). Unchecked: both lines are
  removed from the section and the defaults apply. Disabled for a cfg
  without sections.
- Comments, blank lines and all other lines stay byte-identical.
- Takes effect right after saving (no restart) for the sender of
  echomail, netmail and AreaFix requests, the origin line (editor and
  added by scan) and ZYZ/SYS in the binkp login. Lastread user: still the
  global sysop= from program start.
- Origin length: " * Origin: <text> (<AKA>)" at most 79 characters, so the
  text may be at most 79 - 14 - length(AKA). The dialog shows the limit and
  refuses to save longer texts (message, nothing written) - it never
  silently changes your input. Too long because edited by hand: truncated
  when writing (editor to the limit, scan at most 50 as before), spaces
  before "(" removed, AKA always complete. ASCII only, name max. 35 chars.
- Keys: sysop=, system= (global = default; inside a [boss ...] section =
  this boss only). Documented in binkpoint.cfg.example and the READMEs.

About box
- Additionally: "Author: Michael Geller · e-mail: michael@g00r00.com" and
  "FidoNet/fsxNet BBS: 21:1/177 (sysop: Michael Geller)". Contact info also
  in README.md/README.en.md.

Fix
- AreaFix request from the command line (binkpoint areafix BOSS ...):
  MSGID CRC and UserCRC in the JAM header were 0 (CRC table not built).

Tests
- New: test/gui08/run_gui08_tests.sh (cfg round trip default only /
  per-boss override / unchecked / single format, comments byte-identical;
  origin length check; sender/origin in new echomail and netmail right
  after saving and after restart; AreaFix sender; scan origin per boss;
  truncation of a long origin; unthemed check box; About box; English).
  Screenshots: screens/v08/.
- winprobe.exe also reports check state, enabled state and edit fields
  (never password fields). Older tests: version strings 0.8, Save/Cancel
  coordinates in the wider settings window, 4 check boxes.

Not tested
- Real Windows (wine64 only), no real poll (ZYZ/SYS per boss only in
  code), non-ASCII names are rejected, "New boss..." with own name not
  separately.

Changes in binkpoint 0.7 (since 0.6)
====================================

Deleting messages (GUI)
- The list allows multi-selection (Shift/Ctrl). Delete via Del, menu
  Message -> Delete ... and the list's context menu (right mouse button,
  Shift+F10) -> Delete. Confirmation with the count ("Delete 3
  messages?", Yes/No).
- Marked like smapi JamKillMsg (hpt/sqpack/GoldED): MSG_DELETED + TxtLen 0
  in the header, .jdx entry FFFFFFFF/FFFFFFFF, ActiveMsgs - n,
  ModCounter + 1; under the JAM lock. List and counters are reloaded,
  deleted messages are hidden and never exported. Removed for good when
  the base is packed (e.g. sqpack). Netmail and echo areas.

Log pane
- Hidden by default; View -> Show log (Ctrl+L) is a checkable menu item,
  the layout reflows immediately.
- The list/reader split is scaled with rounding instead of truncation on
  resize (it drifted by 1 px per toggle).

Window settings (binkpoint.ini)
- New: binkpoint.ini in the directory of the configuration file in use
  (section [window]). Saved on exit, restored on start: position/size,
  maximized, splitters, column widths, sorting, reader font size, log
  visible. binkpoint.cfg is not modified for this.
- Position outside all monitors -> default position; too large -> shrunk
  to the work area; nonsense values -> defaults.

Readable check boxes (Windows 11, dark dialogs)
- All check boxes (AreaFix "with rescan, R =", settings auto-poll,
  create new areas automatically, take over bad messages) without the
  visual styles theme (SetWindowTheme), so the light text colour applies.
  There are no radio buttons. Now also linked: uxtheme.
- AreaFix hint: "Create & poll" was shown without the "&" (fixed).

Tests
- New: test/gui07/run_gui07_tests.sh (in run_all.sh), section 4 in
  test/interop/run_interop_tests.sh (GUI delete vs. smapi MsgKillMsg,
  sqpack), jamtool "kill". Existing tests: version 0.7, log pane shown via
  binkpoint.ini in the tests that read log texts; layoutcheck knows the
  hidden log.
- Screenshots: screens/v07/.

Other
- Version 0.7 (banner, PID/tearline, Via, binkp VER, manifest).
- Not tested on real Windows 11 (see README, section 0.7).

Changes in binkpoint 0.6 (since 0.5)
====================================

JAM interoperability (tested against husky smapi/hpt/hptlink/sqpack and GoldED+)
- Scanner: in echo areas an own, not yet sent message (LOCAL, not SENT) is
  now exported even if the JAM header carries the netmail type bit instead
  of the echo bit. Reason: hptlink and sqpack (smapi) write echomail headers
  back with TYPENET when linking/packing; an own reply was then silently
  never exported. Netmail areas unchanged (messages with the echo bit are
  not exported from them).
- New tests test/interop/run_interop_tests.sh (not in run_all.sh, needs
  husky): binkpoint -> smapi (header, kludges, text, CRCs, hptlink linking),
  hpt -> binkpoint (areas, tossing into hpt bases, export of smapi messages,
  sqpack, BaseMsgNum), locking binkpoint <-> smapi incl. concurrent writes.
  GoldED+ and GUI cross-checks: screens/interop2/.

JAM notice
- README.md / README.en.md and the "About binkpoint" window (both languages)
  now contain the notice required by JAM-001:
  "JAM(mbp) - Copyright 1993 Joaquim Homrighausen, Andrew Milner,
  Mats Birch, Mats Wallin. ALL RIGHTS RESERVED."

Other
- Version 0.6 (banner, PID/tearline, Via, binkp VER, manifest); tests
  adapted to 0.6.

Changes in binkpoint 0.5 (since 0.4)
====================================

Echo areas via AreaFix (window Mail -> Areas / AreaFix, Ctrl+E, "Areas" button)
- Per boss a list of areas: tag, description, status at the boss
  (linked / not linked / unknown) and whether the area is configured
  locally.  Source: the AreaFix replies in the boss's netmail area, cached in
  areas_<boss>.lst next to the cfg.
- Buttons for %LIST, %LINKED (or areafix_query), %HELP, %RESCAN [R=n],
  subscribe (+TAG, optionally ,R=n) and unsubscribe (-TAG); the request is
  shown in a freely editable field (one command per line).
- "Create netmail": private netmail (Local+Private) to areafix_name at the
  boss, subject = areafix_password; "Create & poll" then immediately runs
  export + poll + toss for this boss.
- Unsubscribing a locally configured area asks whether the echoarea= line
  should be removed from the cfg; the JAM base is always kept.
- Replies are evaluated again automatically after every poll/toss.
- The subject of AreaFix netmails (= password) is shown only as ******** in
  the list, the reader and the log.

Automatic creation of new areas (tosser)
- When echomail for an unknown area arrives from the boss (packet from
  boss_address), the area is created instead of going to Bad: line
  "echoarea=TAG <areadir>\<tag lower case>" in the boss section (after its
  last setting line, the rest of the file byte-identical), JAM base created,
  tossed into it.  The GUI rebuilds its tree without a restart.
- Existing bad messages of that tag are taken over (movebad, without the
  AREA kludge) and marked deleted in Bad.
- Packets from other senders never create areas.

Configuration (per boss, all optional)
- areafix_name (default AreaFix), areafix_password (subject; empty = empty
  subject, no fallback to password=), areafix_query (default %LINKED),
  autocreate=yes|no (default yes), movebad=yes|no (default yes),
  areadir (default: directory of netmail=).
- Settings dialog: AreaFix name, AreaFix password (masked, set-only like the
  session password), "New echo areas: create automatically / take over bad
  messages".

Command line
- binkpoint.exe areafix <boss> "%LIST;+TAG;-TAG"  (write the request netmail)
- binkpoint.exe areas <boss>  (evaluate replies, print the list, cache)

Other
- Version 0.5.
- Keyboard shortcuts: the table had a fixed length (Ctrl+Num0 was missing);
  the count is now computed.
- Tests: new suite test/areafix (fake Mystic AreaFix fakefix.py); the tosser
  test now also reports failures in its exit code.

Changes in binkpoint 0.4 (since 0.3)
====================================

Language: German / English
- Every visible text exists in German and English: menus, toolbar,
  columns, tree, reader header, status bar, poll line, log pane,
  settings, new boss, confirmations, error messages, About box, compose
  window, kludge view, help/usage and the log lines of
  poll/toss/scan/all.
- Central string tables src/lang_de.inc and src/lang_en.inc (string IDs,
  UTF-16 for the GUI); the language is chosen at start-up in src/lang.asm.
- New cfg key language=de|en|auto in the global section (default auto:
  Windows display language German -> German, otherwise English).
- Command line: -lang de|en (overrides the cfg).
- Settings dialog: "Sprache / Language" drop-down (Automatic, Deutsch,
  English).  Only the language= line is saved, the rest of the cfg stays
  unchanged.  Takes effect after a restart (note shown in the dialog).
- Poll/toss/export started from the GUI run in the GUI's language.
- Not translated: kludges, tearline, PID, origin, message bodies.

Application icon
- New application icon (res/binkpoint.ico, 8 sizes 16-256 px, 256 as PNG):
  embedded as a resource in binkpoint.exe (RT_GROUP_ICON 1 + RT_ICON) so
  Explorer shows it; the main window, settings, compose window and message
  boxes show it in the title bar, the About box also next to its text.

Other
- Version 0.4 (src/version.inc).
- English documentation: README.en.md, CHANGES.txt.

Changes in binkpoint 0.3 (since 0.2)
====================================

Message list
- Only the selected row is highlighted blue (previously all rows were).
- Sorting: default is the JAM message number (Nr) ascending; clicking a
  column header sorts by that column, clicking again reverses the order.
  New: an arrow in the column header shows column and direction (before,
  a sort chosen by a click, e.g. by date, was invisible and stayed active
  for all areas).

Window and layout
- Tree, list, reader and log follow resizing, maximising and restoring;
  the Subject column fills the list width.
- The initial size is limited to the screen's work area; starting
  maximised (shortcut "Maximized") is honoured.

Settings (Mail -> Settings)
- Boss/server per section: own AKA, boss address, host, port, password
  (masked), CRAM-MD5, auto-poll, inbound/outbound/netmail paths, network
  name.
- Create a new boss, delete a boss (with confirmation; the last one stays).
- FTN addresses and port (1-65535) are validated; only the changed lines
  of the configuration file are rewritten.

Reader
- The font size follows the window width (80 columns fill the reader,
  whole pixels, 16 to 48 px).
- Ctrl+mouse wheel, Ctrl+Plus/Ctrl+Minus set the size by hand (10 to
  72 px), Ctrl+0 returns to automatic fitting.
- Word wrap: long lines break at the last space before column 80 instead
  of in the middle of a word ("brewe" / "d"); without a space a hard
  break; continuation lines of quotes get the prefix again ("R> ").
  Lines with ANSI escape sequences or CP437 frame/block characters keep
  the hard break after column 80 so ANSI art stays intact.

Other
- Version 0.3 in one place (src/version.inc): banner, About box, "ready"
  log line, PID/tearline/Via kludges, binkp VER, manifest.
