Release Log for FDLog and FDLog_Enhanced
We have added 129 enhancements to the original FDLog so far.

This release log has the present back to the beginning of FDLog in 1984.

Scott Hibbs at gmail.com (email ideas for enhancements/bugs)

To Do and Ideas:

  v2026_Beta 4.3.1 05Jul2026 N1MM+, MSHV, and Stability

	+ 129 Sign-in form feeds the visit/participation bonuses automatically
	  (live on the InfoTable score): anyone signed in with age 18 or under
	  counts toward the Youth Participation bonus (replaces .set youth and
	  the setup question), and "Elected official visit" / "Agency rep
	  visit" checkboxes on the sign-in form record the visitor's name and
	  earn the 100 pt site-visit bonuses (replaces .set svego / .set svroa
	  and their setup questions).
	+ 126 N1MM+ integration: auto-log contacts from N1MM+'s UDP broadcasts
	  (port 12060). Networked N1MM+ stations are handled - only original
	  contacts are logged, not every station's rebroadcast of the shared
	  log. Contact edits and deletes in N1MM+ are ignored with a console
	  note. Menu, settings dialog, and status label like the other
	  integrations.
	+ 127 MSHV integration: auto-log contacts from MSHV (same protocol as
	  WSJT-X, port 2237). Fixed connection status showing "Disconnected"
	  forever for MSHV (it never sends heartbeats); benefits WSJT-X and
	  JS8Call too. Warns if WSJT-X and MSHV are both set to the same UDP
	  port - on Windows both silently bind and datagrams split
	  unpredictably.
	+ 128 Station alias: give a node a friendly display name (asked at first
	  setup, or .alias <name> / .alias off). Shown on the InfoTable
	  STATIONS panel and band tooltips.
	- Band idle timeout (from Alan Biocca's FDLog): a band reservation
	  is released after N minutes with no operator activity, freeing the
	  transmitter. Warning beep 30 seconds before. Keystrokes, pastes,
	  band clicks, and auto-logged QSOs (WSJT-X etc.) all count as
	  activity. Set at event setup or with .set idletm <minutes>
	  (PIN-gated, network-wide, 0=off). Replaces the old .kick
	  autokicker, which could kick an actively-typing operator.
	- QST messages expanded (from Alan Biocca's FDLog) from 40 to 80
	  characters with a wider character set; messages can start with *
	  as well as #. Long messages split into two log lines that sort
	  together.
	- Old computer support: pandas and plotly removed, WAS map rebuilt
	  in pure Tkinter (exe 59.6MB -> 35MB). Fixed exe instantly closing
	  on pre-2009 CPUs: modern NumPy kills the process during startup
	  on CPUs without SSE4 - now detected before loading, voice
	  recording disabled instead of crashing. Confirmed on a real
	  Win10 machine.
	- Fix missing QSOs: on Windows, one oversized network packet could
	  permanently kill a node's receiver thread - the node looked alive
	  but heard nothing and never answered fill requests. Receive
	  buffer raised, error guarded, and fill responses kept under one
	  packet for old versions too.
	- Clock sync overhaul: fixed corrections oscillating forever
	  (measure-during-slew, mid-slew replacement, asymmetric slew rate,
	  NTP jitter stepping the master, sub-second limit cycle). Adopted
	  Alan Biocca's clock "jerk" for fast startup convergence. Clock readings
	  now pause during block-fill bursts so catch-up traffic can't
	  inflate corrections.
	- New nodes catch up much faster: journal writes from the network
	  are batched (one commit per second instead of per record, ~370x
	  faster) and the status bar shows "Filling (n gaps)" instead of
	  "Alone?" while it happens. One console line per fill gap instead
	  of one per held record.
	- Log window entries now stay in time order even when old records
	  arrive late from a network fill.
	- Fix .set idletm and the admin PIN never syncing to other nodes
	  (neither was registered in the shared-data table; the captain's
	  idle timeout silently never applied anywhere).
	- Fix GUI freeze when connecting to an integration that isn't
	  running (status updates fired from listener threads; now
	  marshaled to the main thread). All integration menu actions now
	  report "Error" instead of hanging or crashing.
	- All 9 integration menus consolidated under one "Integrations"
	  menu; Help moved to the end of the menu bar. Status labels only
	  appear for integrations that are actually running.
	- InfoTable display round 2: header reorganized, STATIONS panel
	  (active and idle nodes with operator/logger names, aliases, and
	  invitation phrases on idle seats), OVERALL leader column, WAS and
	  Sections progress click to open the maps, attendance log viewer
	  ("  -  " shown for attendees without a callsign), GOTA QSOs shown
	  separately in the mode breakdown, no more flash on the 10-second
	  refresh.
	- Band tooltips show the operator and logger full names.
	- "Contestants Working" button removed (the InfoTable STATIONS
	  panel shows it better).
	- Contestant and Logger buttons show just the name (no initials),
	  and turn green when someone is seated. Selected band button is
	  green instead of white (red still warns of two nodes on one
	  band/mode).
	- Phonetic display: "Call" mode label shortened, output shown on
	  green, refreshes when opened, and a new RR button - "Roger Roger,
	  Please Copy <class> <section>" spelled out phonetically.
	- Multiple changes to window layout and graphics: the main window
	  no longer resizes itself as things appear and disappear - it
	  opens at a fixed size at the top-left of any screen and stays
	  the size you make it. F-key bar buttons squeeze to fit any
	  window width, with mouseover showing clipped text.
	- Version number now lives in one place at the top of the file -
	  the banner, title bar, and network broadcast can't drift apart
	  again (console showed 4.2.0 while broadcasting 4.3.0).
	- miniweb v3.2: fixed the share server going deaf after the first
	  visitor (browser preconnect blocked the single-threaded server).
	  Simultaneous downloads now work.
	- build.py deletes the old exe before building and stops loudly if
	  a running FDLog has it locked - a rebuild can no longer silently
	  leave the old exe in place to test against.
	- Test suite expanded from 141 to 266 tests.
	- Documentation updated: logcaptain.txt (idle timeout, aliases,
	  QST changes), Keyhelp.txt.

  v2026_Beta 4.3.0 02Jul2026 Internet Nodes

	+ 122 Internet node support! Remote operators can now join the club
	  network over the internet. The InfoTable node is the hub; remote
	  nodes connect via the Internet menu or --remote on the command line.
	- Two free connection paths, no accounts required: UPnP automatic
	  router port forwarding (TCP 5100) and Cloudflare Quick Tunnel
	  (port 5101, cloudflared downloaded automatically on first use).
	- UPnP and Cloudflare Tunnel are separate explicit toggles so the
	  operator decides what touches the router. Internet controls only
	  appear on the dedicated InfoTable node.
	- Full two-way sync between LAN and internet nodes: QSOs, deletes,
	  participants, operator assignments, elections, and block fills.
	- Internet nodes are excluded from clock calibration and from
	  winning the time-master election - tunnel delay would otherwise
	  be misread as clock error. Internet nodes sync via NTP instead
	  and warn the operator if NTP is blocked.
	- Internet nodes cannot be designated time master (.tmast refuses,
	  and a designation is auto-removed if that node moves to the
	  internet).
	+ 123 Previous Field Day history: bundled N1MM+ community call history
	  (FD_2026-LAST.txt, 13,716 calls) loads at startup. Known stations
	  show an orange "Previous FD participant" line with pre-fill.
	+ 124 Add your club's previous log via File -> Load Previous Contest Log
	  (ADIF, handles N1MM+ exchange fields).
	- InfoTable window is now scrollable so nothing is cut off on
	  smaller screens.
	- InfoTable Active Bands panel shows each node's band, mode,
	  operator, power, and per-band QSO counts live.
	- Attendee count displayed next to the InfoTable sign-in button.
	- "View Info Table" button added to the main window.
	- Crash logging: unhandled errors now write fdlog_error.log next
	  to the program for easier bug reports. reset.py cleans it up.
	- Fix network receiver thread being killed permanently by a single
	  bad packet, leaving the node deaf until restart.
	- Fix menu rebuild crash when operator changes arrive from the
	  network ("can't delete Tcl command").
	- Fix N3FJP client repeating connection errors when N3FJP is not
	  running (now reports once).
	- Fix shutdown error in the packaged exe version.
	+ 125 .testq now generates realistic test QSOs from the bundled call
	  history and requires the same station setup as real QSO entry.
	- Updated scoring to the current ARRL Field Day rules: power
	  multiplier is x2 up to 100 watts and x1 above (the old 150W
	  threshold ended in 2023; over 500W scores zero), and the GOTA
	  500-QSO cap is removed (current rules have no limit).
	- InfoTable now shows the true total score: bonus points are
	  computed live with the same math as the entry report (new shared
	  calc_bonus_points) and shown as QSO score + bonus breakdown.
	- Class D stations no longer get points for working other Class D
	  stations (rule 4.4). The QSO is still logged with a warning at
	  entry time, but scores zero.
	- Exporting the entry report now checks every QSO against the
	  Field Day operating period (1800 UTC Sat - 2059 UTC Sun, fourth
	  full June weekend) and warns about QSOs ARRL will not count.
	  Warning only - test QSOs logged off-season are never blocked.
	- Reference files updated to the official 2026 ARRL documents:
	  Rules.pdf and W1AW.pdf. Section list verified current against
	  ARRL (85 sections).
	- build.py stays open on any failure and re-shows the error lines
	  from build_log.txt so the message is readable.
	- Documentation updated: Log Captain manual (logcaptain.txt) covers
	  internet nodes, the 2026 power rules, the period check, and new
	  troubleshooting entries (crash log, tunnel died). Keyhelp.txt and
	  README.md refreshed to match.
	- InfoTable: when UPnP succeeds, the External IP display shows the
	  router-reported address instead of the web-detected one (a VPN
	  on the PC fools the web check).
	- Test suite expanded from 80 to 141 tests: N3FJP and rigctld
	  protocol parsing, WSJT-X band/exchange helpers shared by five
	  integrations, and the internet relay TCP framing format.
	- macOS build support: double-click build_mac.command, Xcode tools
	  auto-detected, icon format fixed. Build output now streams live
	  and is saved to build_log.txt.

  v2026_Beta 4.2.9 10Feb2026 N3FJP Integration Polish

	- Handle DELETECONTACT/CONTACTDELETE events from N3FJP. Displays
	  a notification in the billboard (no auto-delete for safety).
	- Handle CONTACTREPLACE as an edit notification instead of
	  re-logging the QSO (which caused dupe check rejections).
	- N3FJP server now notifies connected clients when FDLog logs
	  QSOs locally, keeping N3FJP-compatible loggers in sync.
	- N3FJP server now responds to SETUPDATESTATE with proper
	  SETUPDATESTATERESPONSE confirmation.
	- Add missing integration files to distribution zip: n3fjp,
	  wsjtx, voice_keying, fldigi, and rigctld modules.

  v2026_Beta 4.2.8 10Feb2026 Election Timeout Recovery

	- Fix stalled election when judge crashes mid-election. Non-judge
	  nodes now track how long telect='election' has been stuck. After
	  60 seconds (well beyond the 10s collection period), the node
	  re-checks if it should become judge — by then the old judge's
	  entry has aged out and the next-lowest node takes over.

  v2026_Beta 4.2.7 10Feb2026 Network Packet Hardening

	- Protect rcvr() against malformed UDP packets. Added field count
	  validation before tuple unpacking for s, r, q, and u packet types.
	  A malformed packet from a buggy node no longer crashes the receiver
	  thread (previously killed all network comms for the node).
	- Added outer try/except safety net around packet parsing with
	  rate-limited warning messages (first occurrence + every 10th).

  v2026_Beta 4.2.6 05Feb2026 N3FJP Integration Fixes

	- Fix N3FJP API v2 protocol support. Rewrote XML parser to handle
	  N3FJP's wrapper-tag format (<CMD><ENTEREVENT>...</ENTEREVENT></CMD>).
	- Fix connection handshake — SETUPDATESTATE command now uses proper
	  N3FJP API v2 wrapped format (was causing CMD_NOT_FOUND).
	- Fix Field Day exchange parsing — added ARRL_SECT and CLASS field
	  lookups matching what N3FJP Field Day Contest Log actually sends.
	- Fix mode mapping — added PH (phone), DIG and DG (digital) modes
	  that N3FJP uses instead of SSB/DIGI.
	- Fix band change tracking — falls back to BAND+MODE fields when
	  FREQ is 0 (common when N3FJP has no radio connected).
	- Fix dupe tracking and click-to-edit for N3FJP entries — lowercase
	  calls from N3FJP to match FDLog's internal format.
	- Use FDLog's own clock for QSO timestamps (consistent with all
	  other QSO sources).
	- Added handlers for CALLTABEVENT, UPDATE, CONTACTREPLACE,
	  PROGRAMRESPONSE message types.
	- Menu: renamed "The Manual" to "Log Captain".

  v2026_Beta 4.2.5 05Feb2026 Bug Fixes and Distribution Improvements

	- Fix shared NTP server not adopted promptly by other nodes.
	  Moved shared NTP check before the 300-second sync guard so nodes
	  pick up a shared server within 30 seconds and query it immediately.
	- Fix stalled election when another node publishes an election but
	  the judge never adopts it (e.g., designated master steps down or
	  goes offline). Judge now detects and takes over in-progress elections.
	- Fix band button tooltip never appearing when hovering over other
	  nodes' bands. Old code checked the entire dict as one string so
	  any node with band="off" suppressed all tooltips.
	- Fix "worked on different bands" log entries printing twice.
	  Removed redundant second call to showthiscall().
	- Compact .tmast status output into two-column layout.
	- Fix RuntimeError iterating net.si.nodes.values() by copying to list.
	- Election now looks up remote nodes' actual GPS/NTP status from
	  broadcasts instead of assuming lowest priority.
	- Nodes broadcast gps_locked and ntp_ok flags in status packets
	  with backwards compatibility for older nodes.
	- Shared NTP server (tntp global) published across the network so
	  all nodes use the same custom NTP server.
	- GPS Sync dialog: renamed "GPS NTP Address" to "Custom NTP Address",
	  shows default NTP servers, live feedback on custom entry, only
	  publishes changes when values actually change.
	- Designated master stepping down triggers immediate election.
	  Designated master excluded from election candidates.
	- Election re-triggers when a better candidate (e.g., GPS node) joins.
	- Elected standby backup when designated master is online.
	- .tmast shows active NTP server and shared NTP server.
	- Test mode prompt shows (.testq <n>) hint.
	- Menu reorder: "Empty" before "Add New" for Contestant/Logger.
	- build.py: platform-specific executable names (FDLog_Enhanced.exe,
	  FDLog_Enhanced_linux, FDLog_Enhanced_mac). Press Enter to exit.
	- share_fdlog.py: auto-includes platform executables if found.
	  Added share_fdlog.py and icon files to distribution zip.
	- miniweb.py v3.1: prevents multiple instances on same port.

  v2026_Beta 4.2.4 - Time Master Election Protocol
	- Add election judge system (lowest named active node)
		- Add telect global for elected time master tracking
		- Judge announces election via telect="election", then winner
		- Priority chain: tmast (designated) > telect (elected) > client
		- Election triggers when tmast/telect offline or no master for 90s
		- Winner selection: GPS-locked > NTP-synced > lowest node name
		- Add .tmast command for status, clear, elect, and setting master
		- Dialog shows online/offline status for time masters
		- Fix lock safety with try/finally in update()
		- Move broadcast outside lock to prevent deadlock
		- Proper state transitions when tmast returns/leaves
		- Update Manual.txt with time sync documentation

  v2026_Beta 4.2.3 30Jan2026 Enhanced Time Sync with NTP and Auto-Election

	+ 121 Enhanced Time Synchronization
		- Three-tier time master priority: Designated GPS master > NTP > Auto-election.
		- Opportunistic NTP sync using raw UDP (no external dependencies).
		  Queries pool.ntp.org, time.nist.gov, time.google.com every 300 seconds
		  in a background thread. Nodes with NTP auto-promote to level 0.
		- Automatic time master election when designated master and NTP are both
		  unavailable for >90 seconds. Lowest node name among active peers wins.
		  Deterministic — all nodes agree on the same winner.
		- Designated GPS master (set during Initialize) always takes priority
		  and reclaims master role immediately when it returns.
		- Auto-elected master yields when a designated master or NTP source appears.
		- Startup message shows time sync priority chain on non-master nodes.

  v2026_Beta 4.2.2 30Jan2026 Hamlib rigctld Integration

	+ 120 Hamlib rigctld Rig Control Integration
		- TCP client connects to hamlib's rigctld daemon (default port 4532)
			to poll rig frequency and mode.
		- Polls frequency (f) and mode (m) commands on a configurable interval.
		- Auto-switches FDLog band when rig frequency changes band.
		- Pushes frequency to rig when FDLog band changes (configurable).
		- Maps rigctld modes (USB, LSB, CW, RTTY, PKTUSB, etc.) to FDLog
			mode suffixes (p/c/d).
		- Auto-reconnect with exponential backoff on disconnect.
		- Rig menu with Settings dialog, Connect, and Disconnect commands.
		- Settings dialog with host, port, poll interval, auto-band, and
			push frequency options, plus connection status display.
		- Connection status label in info bar (green=connected, gray=off).
		- Settings persist across sessions via globDb.
		- Unit tests for protocol parsing, command building, mode mapping,
			and config defaults (20 tests).

  v2026_Beta 4.2.1 30Jan2026 N3FJP API Integration (Client + Server)

	+ 119 N3FJP API Integration (Client + Server)
		- TCP client connects to an N3FJP-compatible server (default port 1100)
			to receive QSO notifications and band/frequency changes.
		- TCP server accepts connections from N3FJP-compatible programs, allowing
			them to log QSOs, query dupe status, and read band/mode/frequency.
		- XML-style <CMD>...</CMD> protocol with \r\n terminator — no external
			dependencies, uses Python's built-in socket and threading modules.
		- Client features: auto-reconnect with exponential backoff, ENTEREVENT
			QSO logging, READBMFRESPONSE band tracking, push frequency/callsign.
		- Server features: multi-client support, handles UPDATE+ENTER sequences,
			ADDADIFRECORD (ADIF parsing), CONTESTEX, READBMF, QSOCOUNT,
			DUPECHECK queries.
		- N3FJP menu with Settings dialog, Connect/Disconnect Client,
			Start/Stop Server commands.
		- Settings dialog with separate client and server sections, connection
			status display for both, auto-log and auto-band options.
		- Connection status label in info bar (green=active, gray=off).
		- Settings persist across sessions via globDb (host, ports, enable flags,
			auto-log, auto-band).
		- Band change hook pushes frequency to N3FJP client when FDLog band changes.
		- Unit tests for protocol parsing, command building, ADIF parsing,
			and mode mapping (15 tests).

  v2026_Beta 4.2.0 29Jan2026 fldigi Integration (Two-Way)

	+ 118 fldigi Integration (Two-Way)
		- Two-way integration: QSOs logged in fldigi appear in FDLog, band changes
			in FDLog push frequency to fldigi via XML-RPC.
		- Polls fldigi XML-RPC interface (default port 7362) — no external dependencies,
			uses Python's built-in xmlrpc.client.
		- QSO detection via call-field transition: caches fields while call is populated,
			processes QSO when call clears.
		- Automatic frequency-to-band mapping reuses wsjtx_integration helpers.
		- Push frequency: when FDLog band changes, sends default frequency to fldigi.
		- Optional push callsign to fldigi log fields.
		- fldigi menu with Settings dialog, Connect, and Disconnect commands.
		- Connection status label in info bar (green=connected, gray=disconnected).
		- Settings persist across sessions (enable/disable, host/port, poll interval,
			auto-log, auto-band, push frequency, push callsign).
		- BAND_FREQ_MAP: reverse mapping from FDLog band string to default frequency.
	UI Layout Fixes
		- CW and Voice status labels always visible (greyed out when module unavailable).
		- CW, Voice, WSJT-X, JS8Call, fldigi labels moved to a second row under the
			network bar.
		- Network bar now uses pack layout: network label fills available width,
			node/time labels fixed on the right.
		- Select Contestant / Select Logger labels no longer clip — both get
			weight=1, minsize=150.

  v2026_Beta 4.1.9 29Jan2026 JS8Call Integration

	+ 117 JS8Call Integration
		- JS8Call uses the identical QDataStream UDP protocol as WSJT-X (default port 2442).
		- JS8CallListener subclasses WSJTXListener — inherits all protocol parsing,
			heartbeat tracking, and QSO processing logic.
		- JS8Call menu with Settings dialog, Connect, and Disconnect commands.
		- Connection status label in info bar (green=connected, gray=disconnected).
		- Settings persist across sessions (enable/disable, UDP port/IP, auto-log, auto-band).
		- Refactored WSJTXListener to use _log_prefix property for clean subclassing.

  v2026_Beta 4.1.8 29Jan2026 WSJT-X Integration

	+ 116 WSJT-X Integration
		- One-way integration: QSOs logged in WSJT-X automatically appear in FDLog.
		- Listens for WSJT-X UDP packets (default port 2237) using native Qt QDataStream
			binary protocol parser — no external dependencies required.
		- Parses Field Day FT8 exchanges (class + section) from logged QSO data.
		- Automatic frequency-to-band mapping for all HF/VHF bands (160m–2m).
		- Dupe checking applied before logging.
		- Auto-band-switch option: FDLog band follows WSJT-X frequency.
		- Connection status label in info bar (green=connected, gray=disconnected),
			detected via heartbeat timeout (15s).
		- WSJT-X menu with Settings dialog, Connect, and Disconnect commands.
		- Settings persist across sessions (enable/disable, UDP port/IP, auto-log, auto-band).
		- Graceful fallback: menu and label hidden if integration module not present.

  v2026_Beta 4.1.7 28Jan2026 F-Key Bar, CW Sidetone, Prefix Search, and UI Improvements

	F-Key Bar
		- F-key bar hidden by default, toggled by clicking CW/Voice status labels.
		- CW/Voice status labels show [Show]/[Hide] hint when active.
		- CW/Voice status labels greyed out until a CW (c) or Phone (p) band is selected.
		- F-key buttons now display two lines: F-key number on top, configurable label below
			(N1MM-style defaults: CQ, Exch, Exch Only, QSL TU, His Call, QSL Exch, etc.).
		- Right-click any F-key button to edit labels; labels persist across sessions.
		- ESC/Stop button now only stops the active mode (CW or Voice), not both.
	CW Sidetone Simulation
		- When no CW keyer is connected, F-key presses play a simulated sidetone through PC audio.
		- Cross-platform support: winsound on Windows, aplay on Linux, afplay on macOS.
		- Full Morse timing (dit=1 unit, dah=3, inter-character gap=3, word gap=7).
		- ESC aborts sidetone playback immediately.
		- Status label shows "Sending: ..." during sidetone playback.
	Voice Keyer
		- "Stopped" status now resets to "Ready" after 2 seconds.
	+ 115 Prefix Search
		- Typing a prefix (e.g., wa2) + space shows all logged calls matching that prefix across
			all bands.
		- Prefix remains in the input buffer so the user can continue typing the suffix.
		- ESC now clears both the input buffer and the stored suffix.
	Band Button Tooltips
		- Hovering over band buttons now shows a popup tooltip near the cursor instead of printing
			to the text widget.
	Contestants Working
		- Now shows initials, full name, and current band (e.g., node1: SAH, Scott Hibbs on 40c).
	Application Icon
		- Wagon wheel FD Log icon on window title bar and executable.
		- Cross-platform: .ico for Windows, .png for Linux/macOS.
		- Icon embedded in PyInstaller build.
	Bug Fixes
		- Participant add/update beep now respects the Sound Enabled setting.
		- Fixed syntax error in sidetone temp file cleanup.

  v2026_Beta 4.1.6 28Jan2026 Edit Participant and GUI Changes
  
	Admin PIN Protection for Editing Participants
		- PIN setup in initialize() — Added a 4-digit admin PIN prompt during event setup (before the deploy question). PIN is
			stored as an MD5 hash in the shared database.
		- EditParticipantDialog class — New dialog (Properties > Edit Participant) that requires PIN verification. Shows a
			listbox of participants, displays initials as read-only, and allows editing name, call, age, and visitor title with
			the same validation as Add Participant.
		- .set adminpin command — GUI dialog to change the PIN (verifies old PIN first if one exists).
	Empty Contestant And Logger 
		- added ability to empty the participant from the contestant or logger position. 
		- clearoper() now calls bandset('off') immediately when the contestant is cleared, rather than leaving the band
			visually on the previous selection.
	GUI Updates: 
		- Title Bar Date Format change and also show local time.
		- Title label changed from "FIELD DAY - {name}" to "{grpnam} Field Day".
		- Date/time display moved from the header row to above the "Sign In Here Please" button in different format.
		- All labels on the infonode form bumped to 24pt Helvetica bold (leaderboard entries to 20pt Courier)
  
  v2026_Beta 4.1.5 27Jan2026 New: Voice Keyer Integration (needs real world testing)

	+ 114 New file: voice_keying.py — complete voice keyer module mirroring cw_keying.py's pattern:
		- VoiceConfig — settings for TTS speed, volume, voice selection, and PTT control
		- VoiceKeyer — TTS engine (pyttsx3) and recorded WAV playback (sounddevice/soundfile), with PTT keying before/after
			audio
		- VoiceMacroManager — F1-F12 voice message management with variable substitution and per-slot TTS/recording mode
		- VoiceSettingsDialog — speed, volume, voice selection, and full PTT config (own port or reuse CW port, RTS/DTR,
			lead/tail delays)
		- VoiceMacroEditorDialog — edit F1-F12 text messages, TTS/Rec mode toggle, record button with duration display
		- Voice keyer import with graceful fallback (like CW)
		- Voice helper functions: load/save config, load/save macros/modes, status updates, settings/macro dialogs
		- Voice keyer initialized after root, wired to reuse CW port PTT callbacks
		- F-key routing by band mode: Phone bands (p) → voice keyer, CW/Digital bands (c/d) → CW keyer
		- ESC stops both CW and voice playback
		- "Voice" menu with Settings and Macro Editor
		- F1-F12 + ESC button bar below the phonetics row for mouse operation (uniform fixed-width buttons)
  	
  v2026_Beta 4.1.4 27Jan2026 - Easy Distribution and Infotable Changes

	miniweb.py - Version 3.0
		- Reliable LAN IP detection using UDP socket instead of gethostbyname()
			which often returned 127.0.0.1
		- Serves from a share/ subdirectory by default instead of exposing the
			entire project directory
		- Error handling for port-in-use with input() pause so the console window
			stays open
		- Graceful Ctrl+C shutdown using signal.SIGINT handler with server_close()
		- Revision history moved from runtime variable to comments
		- serve() function accepts directory argument, can be imported by other
			scripts
	+ 113 share_fdlog.py - New file
		- Creates a distribution zip of the full project source (Python scripts,
			data files, docs, PDFs, tests, build config) into share/FDLog_Enhanced.zip
		- Zips into a FDLog_Enhanced/ folder for clean extraction on any platform
			(Windows, Mac, Linux - Just run build.py)
		- Starts miniweb to serve the zip over the LAN
		- Pause-on-error so the console window stays open for diagnostics
	FDLog_Enhanced.py - initialize() changes
		- Section input now accepts 2-3 letter ARRL abbreviation (e.g. IN, EMA,
			STX) instead of old IN-Indiana format
		- Validates input against Arrl_sections_ref.txt, rejects invalid entries
			with examples
		- Auto-uppercases section input
		- Updated sect field definition: regex, max length, default value, and
			description to match new format
		- Added deploy question after time master: "Do you need to deploy this
			program to other computers?" which launches share_fdlog.py in a new
			console window
		- Finds Python interpreter via shutil.which() to handle launching from
			PyInstaller exe
	FDLog_Enhanced.py - InfoTableWindow changes
		- Header fields (FD Call, Group Name, GOTA Call) now refresh every 10
			seconds via update_header() instead of only being read once at
			construction
		- GOTA Call label always displayed (was previously hidden when not set at
			startup)
		- Leaderboards show participant name and call (e.g. "Scott Hibbs
			(KD4SIR)") instead of just initials
		- InfoTable now broadcasts on the network every 10 seconds via
			net.bcast_now() to prevent "Alone?" warnings on other nodes
	FDLog_Enhanced.py - NewParticipantDialog
		- Escape key closes the Add New Participant window
	reset.py  (used only for testing/development)
		- Data file deletion and exe rebuild are now independent yes/no questions
		- User can skip data deletion and still rebuild the exe, or any
			combination  

  v2026_Beta 4.1.3 26Jan2026 - Automated Testing
	112 Added automated test suite (pytest)
		- Created tests/ directory with 80 automated tests across 5 modules
		- test_utils.py — Tests for ival(), tmtofl(), and tmsub() utility functions
		- test_parser.py — Tests for CallSignParser: callsign validation, prefix/separator/suffix parsing, country lookup via
			cty.dat, and end-to-end parsing
		- test_qparse.py — Tests for QSO line parser: full QSO entries, partial input states, slash callsigns, length limits,
			and edge cases
		- test_scoring.py — Tests for cleanlog() filtering (deletes, time window, zero power, special bands, GOTA separation)
			and band_rpt() scoring (CW/digital 2x multiplier, GOTA 500 QSO cap, natural power, satellite tracking)
		- test_dupes.py — Tests for duplicate detection: call-band matching, suffix lookup, mode/band separation, GOTA
			separate dupe space, and network dupe logic
		- Added pytest>=7.0.0 to requirements.txt
		- Run with: pytest tests/ -v

v2026_Beta 4.1.2 23Jan2026 - CW Added, Power limits, and Audio update

	+ Fixed viewtextf() path resolution for Linux/Raspberry Pi:
		- Text files now found correctly regardless of working directory
		- Added UTF-8 encoding for cross-platform compatibility
	111 Added Sound toggle checkbox (off by default):
		- Audio notifications for duplicate contacts
		- Audio notifications for QST messages
		- Default off for digital mode compatibility
	+ Fixed cross-platform file opening for PDFs and text files:
		- Works on Windows, macOS, Linux, and Raspberry Pi
		- Uses system default application (xdg-open on Linux)
	+ Improved error handling in CW keying module:
		- Replaced 20 bare except: clauses with specific exceptions
		- Better debugging and error diagnostics
	110 Added class-based power limits per ARRL Field Day 2026 rules:
		- Classes A, B, C: 500 watts PEP maximum
		- Classes D, E, F: 100 watts PEP maximum
		- Power is automatically capped based on your configured class
		- Updated Power menu with class-appropriate options:
			- 0 Watts
			- 5 Watts (QRP)
			- 100 Watts (Class D/E/F max)
			- 500 Watts (Class A/B/C max)
			- Alt/Nat options for 5W, 100W, and 500W (rule 7.3.8)
	109 Added Natural/Alternate Power countdown display:
		- Shows progress toward 100-point bonus (5 QSOs required)
		- Displays "Nat: X/5" next to Natural checkbox
		- Gold background while working toward goal
		- Green background with checkmark when bonus achieved
	108 The CW keying interface has been fully implemented.
		New file: cw_keying.py - Contains all CW keying classes
		Features Implemented
			Serial keying via DTR or RTS
			Winkeyer support (K1EL protocol)
			CAT keying for Flex SmartSDR and Icom 7300/7610
			F1-F12 macros with variable substitution ({MYCALL}, {CALL}, {RST}, {CLASS}, {SECT})
			PTT control with configurable lead-in/tail timing
			Speed control via PgUp/PgDn (2 WPM increments)
			ESC key aborts transmission
			CW status display in main window
			Settings persistence via globDb
		
2026_beta 4.1.1 20Jan2026 Claude Code Updates 

	107 Fixed oldest bug from 1984. The program could not handle international
	    callsigns. Using https://github.com/scotthibbs/Call_Sign_Parser_and_Lookup 
		Claude Code was able to fix this bug. 
	+ 	WAS Map Fix - Now opens even when no states have been worked (shows blank map)
	+ 	Fixed Font changes to be more robust (some fonts were being missed)
	106 Network Dupe Checking - Automatic duplicate detection during network fills:
		- Detects when two disconnected nodes worked the same station on the same band
		- Compares timestamps and keeps the oldest contact
		- Deletes the newer duplicate automatically
		- Delete markers propagate across the network

2026_beta 4.1.0 19Jan2026 Claude Code Updates
	
	105 Info Table Node added:
		- Node selection: Type "info" to launch the information table display
		- Header: Club name, FD Call, GOTA Call (if set), and current time
		- Score panel: Total score with CW/Digital/Phone breakdown
		- Leaderboards: Top 5 Contestants and Top 5 Loggers
		- Progress tracking: Worked All States (X/50) and Sections (X/84)
		- Visitor registration: Green button that opens the full participant dialog
		- Auto-refresh: Updates every 10 seconds
	104 Phonetic Alphabet Display - Added at the bottom of the GUI with:
		- Radio buttons: Callsign (default), CQ, QRZ
		- Shows appropriate phonetic response format
		- Uses GOTA call for gotanode, FD call for others
		
2026_beta 4.0.1 19Jan2026 Claude Code updates

	103 Added Worked All Sections map and log report
	+ Consolidated font functions
     	- Replaced 10 separate font functions (fntcourier10, fntcourier11, etc.)
       		with single set_font(face, size) function
     	- Updated menu commands to use lambda: set_font("Courier", 12)
     	- Font changes no longer print "-Call-Class-Sect-" repeatedly
	+ Fixed WAS Map crash
	     - Fixed get_have_states() ValueError when parsing report
    	 - Map now displays correctly with contacted states colored
	102 Added command-line arguments
	    - --node, -n : Station node name (e.g., station1, gota)
    	- --auth, -a : Authentication key (e.g., 24 for 2024)
     	- --help, -h : Show help
     	- Example: python FDLog_Enhanced.py --node station1 --auth 24
	101 Added requirements.txt
	     - Lists dependencies: pandas, plotly
    	 - Install with: pip install -r requirements.txt
	100 Added PyInstaller build system
    	 - build.py : Build script
     	- FDLog_Enhanced.spec : PyInstaller configuration
     	- Creates standalone 43MB executable
     	- Users don't need Python installed
	+	Fixed fingerprint() for standalone builds
		- Handles FileNotFoundError when running as bundled exe
		- Displays "(standalone build)" instead of hash
	+	NEW FILES CREATED:
		- requirements.txt
		- build.py
		- FDLog_Enhanced.spec
		- FDLog_Enhanced.exe (43MB standalone executable)
	+	TO DISTRIBUTE:
			1. Zip the entire FDLog_Enhanced folder
			2. Users extract and double-click FDLog_Enhanced.exe
			3. No Python installation required

2023_beta 4.0.0 03Dec2023 
	NOT COMPATIBLE WITH PREVIOUS VERSIONS
	Contestant Tracking - stable
	
 95 fixed the ability to edit participants. Can't delete/edit initials by design. 
 96 Nodes send "user" packets which communicate the contestant, logger, and band.
 97 Contestants are now tracked and maintained by each node. 
 98 Nodes can't select a contestant that is currently working a node (current or another node).
	(can't operate two radios, but can be control operator of two radios - aka the logger)
 99 Added a "Contestants Working" button that will show who is working at each node.
 +  The off buttons keeping the red color when not selected is the nature of tkinter for linux. 
	There is no fix for this. Bug removed.

 
2022_Beta 3.1.3 13Aug2022 
	Mouse over better update
	
 + Bug fix: Mouse over bands (wof function) erronously remembered all previous bands. (minor) -KD4SIR
 + Mouse over, enhancement #6 and 34, now shows the node on the band/mode instead of all of them. -KD4SIR
 + fixed bug to reject 0 power contacts from getting into the log (python 2 to 3 fix) - KD4SIR
 

2022_Beta 3.1.2 10Aug2022   
	Inactivity timer update
	
 + Timer label (#91) modified to show minutes of inactivity while on band. -KD4SIR 
94 Inactivity feature: ".set kick 30" command will now set thirty minutes to kick a user off the band without activity. 
    The default is 10 minutes. Set to 0 to turn this feature off.  -KD4SIR

2022_Beta 3.1.1 09Aug2022   
    Font update

 93 Added a "Font" menu that will redraw the program in Courier or Consolas (shlash zero) fonts with sizes between 10-14. 
	Needs testing on Linux and Mac - Scott Hibbs KD4SIR   

2022_Beta 3.1.0 06Aug2022
	Major update and rearrangement of the GUI
 +  Moved main program code to be more readable, grouped all the grids together.  
 86 The log window will now reprint when it recieves a deleteq record from another node. - Scott Hibbs KD4SIR
 87 left arrow act like backspace instead of nothing. - Scott Hibbs KD4SIR
 +  QST messages now allow upper case characters in them.
 88 Added an "All CW", "All Digital" and "All Phone" log choice in the logs menu - Scott Hibbs KD4SIR
 89 CW and Digital scores are now separated instead of adding together. - Scott Hibbs KD4SIR
 90 Moved the network status label (enhancement #3) and node id under the menu and above the band selection. 
	Also put the port number with the node id - Scott Hibbs KD4SIR
 91 Timer label added showing "Time Away" (red) if band is off or "Time on Band" (grey). Also cleaned
	up the title to program name, class report and section, and current time. - Scott Hibbs KD4SIR
 +  Cleaned up the Contestant and Logger label to just show the initials and name - Scott Hibbs KD4SIR
 +  tweaked enhancements 8, 9, and 10 (individual scores) to be more readable. 
 92 Added a row to the GUI for function buttons like redraw log window etc.
 +  Enhancement 84 now has a button in the "function button" row to redraw the log window instead of a menu.
 
2022_Beta 3.0.3 02Aug2022
 85 Previous contacts on another band/mode will now populate the report as well so that no further typing is needed 
	to log the call again.	- Scott Hibbs kd4sir
		
2022_Beta 3.0.2 31Jul2022
		Fixed the GlobalDb() being called twice. 
		Added all the staticmethod decorators that where necessary.
		Removed all the power settings above 100w. 
		Fixed "After QSO edit display log prints all blue and not sorted."
		Added def logwredraw() to reprint the log display window on command.
 84	Ability to reprint the log window with a clean log. A menu item for now, but will be a button later. - Scott Hibbs kd4sir		
		
2022_Beta 3.0.1 21Jul2022
	Fixed edit/deleteq that became broken. Still needs to be sorted and have this reprint in the correct colors. (Currently all blue)

2022_Beta 3.0 21Jul2022
 83 Thanks to David and his work on B1QUAD/FDLog_Enhanced_python3, I have finished porting this to 
	Python 3. - Scott Hibbs KD4SIR
	
	updated miniweb.py to version 2.0 - now also ported to python 3. - Scott Hibbs kd4sir
	
2022_v2.3 12Jul2022 (Last Python 2.7 version) Released
	Finished all python corrections as recommended by pycharm. I learned a ton! Fixed copy/paste errors when nothing was selected. 
	Fixed an error if a person typed (not pasted) a bad exchange.  I will now test this to see if it is stable enough for a release. 
	Maybe work on documentation? - Scott Hibbs KD4SIR 
	
	Updated miniweb.py to version 1.8 - Removed unused import, restructure, and beautification.  - Scott Hibbs KD4SIR 

2022_Beta 2.2 10Jul2022
 82 Control-v and Control-c now both work. With the up arrow too. More python corrections. Fixed WAS report 
	(Can't have multiple spaces in this file). Entry window will now always show the bottom line. 

2022_Beta 2.1 09Jul2022
 81 Mouse Copy and Paste now work!! Tested on windows 10, must use the same format as the program entry which 
	is "kd4sir 1d in" or it will reject, also checks dupes, section etc. Keyboard shortcuts 
	(Control c,and v) will be easy to add next. - Thanks to Weo's suggestion (found in code notes probably in the 90's) - Scott Hibbs KD4SIR 08Jul2022    
 79 update: Restructured again. The main program is now located at bottom of the file. All major pycharm errors have
	been corrected. Minor errors will be worked on next when porting to python 3. 
	

2022_Beta_2 05Jul2022
 80 Found our memory leak - removed unnecessary root.update() and root.deiconify() - Scott Hibbs KD4SIR 03Mar2022
 79 Major code restructure!! (and updating with pycharm suggestions) Moved main program elements to be more 
	readable. - 05Jul2022  

 *  Although a different program included with FDLog, I corrected a compatibility issue with Win10 so miniweb.py would work. 
	Changed from blocked port 80 to five fives - 55555. Adding a zip file of this project in the same folder makes it easy to 
	share accross the same network as computers show up for field day. - Scott
 
 *  If a new node "catches up" after field day starts, the display log window is out of date order. I tried and failed for a 
	week to get this log display window to redraw the log again from the database after all the fills. Not a big deal, 
	but would recommend in the documentation to restart the program on the new node after it catches up. 
	Maybe someone who actually knows how to program can look into this. -Scott (fixed in 3.0.2)

Started looking at the program again out of curiosity around 2022 Field Day. Joined Tristate Amateur Radio Society in 
Evansville Indiana a couple years ago and they successfully use N3FJP-FD version. This will never replace that program 
as long as it doesn't integrate with other programs or do cw keying etc. But I miss programming, it's fun.

2022_Beta_1.1 (Working toward a stable 2023_Field_Day Release) 
 78 All txt files converted to Unix EOL Conversion - Scott and Curtis
 77 W1AW schedule is now a PDF file. - Curtis E. Mills WE7U 20Jun2019 
 76 Changed colors to be less garish: Yellow to gold, orange to dark orange, green to pale green, 
	grey to light grey. - Curtis E. Mills WE7U 21Jun2019 
 75 Spell check and comment cleanup - Curtis E. Mills WE7U 25Jun2019 and Scott Hibbs 18Jun2022  
 74 Added reminder that the space bar will check prefix, suffix and calls for dupes. 
 73 Changed New Participant window to be more user freindly - Curtis E. Mills WE7U 25Jun2019
 72 Worked on other bands and dupe checking responses are nicer and are more readable, also reminds user to up arrow.   
 71 Fixed dupe checking against club call and gota call that could have been entered with upper case and missed.
 70 Changed the file name from FDLog_SCICSG to FDLog_Enhanced.
	Two reasons, it's slightly confusing and I sadly moved away from this awesome group of hams. :( 
 

2019_Beta_1 (posted on github, not tested)

 69 Winter Field Day update added - -Art Miller KC7SDA
 68 Found and fixed memory leak (updatebb() method.bind) -Art Miller KC7SDA
 67 Cleaned whitespace code (ie all revision history moved to readme file) -Art Miller KC7SDA
 66 added python path shebang so program can run from command line - Art Miller KC7SDA Jul/1/2018
 65 Corrected code as suggested by pylint - Scott Hibbs KD4SIR Jun/28/2018
 64 Streamlined the networking section of the code - netmask removed. Art Miller KC7SDA Jul/1/2018
 63 Allowed upper case entry for several settings. Art Miller KC7SDA Jul/1/2018
 62 After an edit, the log window is redrawn to show only valid log entries. Scott Hibbs KD4SIR Jul/3/2018
 61 Removed unused code and comments - Scott Hibbs KD4SIR Jul/3/2018
 60 Up arrow will now retype the last entry (just in case enter was hit instead of space) - Scott Hibbs KD4SIR Jul/06/2018

2017_Field_Day Release 

SCICSG will be at The Rock Church for our third year. 

 59 Port is now populated in the header (if needed for firewall rules) (thanks K9MAF)
 58 Added a dupe check when editing entries. (thanks K9JAJ)
 57 Can no longer edit previously DELETED log entries (thanks K9JAJ)
 56 Program no longer counts edited entries toward individual scores. (thanks K9JAJ)
 55 Updated the arrl sections to be current - removed made up sections from FDLog.
 
 
2017-beta-6 (unreleased - tested)
	54 Fixed who's on the bands reporting - now nice print out (from .ba report). 
	53 Fixed freezing for the gota station.. gota is now gotanode.
	52 Changed clock slew to a bigger number (0.75931) 
	51 Class reporting should be correct now. Free VHF too. (reworked)
	50 Protected against putting ourselves (fdcall and gota call) in the log. -it could happen maybe.
	49 Fixed the .node command - discovered it was broken.
	48 Updated all the documentation files. 
	47 Removed the wireless information menu - no longer needed.
	46 Removed the propagation report. (Anyone use it?)
	45 Removed duplicate arrl_sect.txt file needed by program. 
	44 Removed frequency.txt file needed by program - arrl band chart gives same info.
	43 Changed names of some of the files for simplicity 
	42 Created a W1AW menu with the schedule and the NTS message file.
	41 Contestant or Logger needs a license to enter a QSO.
	40 Operator now called Contestant. This allows non-hams to operate with a control operator.

                The Operator field caused debate on if the person was Control Operator. We made a version 
				that required a license for the operator. The problem then, was that a ham & non-ham pair 
				had no idea who operated the radio or logged since it could only be entered one way. 
				The ham got credit for contacts while logging and the non-ham had no idea the number 
				they logged or contacted (added together). So the Radio Operator and Control Operator 
				are different and confusing. Non-hams are after all allowed and encouraged to operate with 
				a Control Operator logging. This program has always tracked who's the logger. So the 
				Operator field is renamed Contestant for person at radio. Thus, we can track the number 
				of contacts or data entries, and accurate logs for everyone, even for non-hams. 
				Hams can accurately know how many contacts they worked and logged for themselves or 
				someone else and know who. This maintains a score for contacts and a score for 
				logging them. The program will check for a Control Operator (license needed for 
				Contestant or logger) before allowing a contact. - Scott Hibbs KD4SIR Mar/29/2017

    39 "Add New Participant" window uses the Enter key to save to facilitate multiple entries.
	38 Can not edit previously EDITED log entries. 
2017-beta-5 (stable needs testing)
	37 Can enter official visitors and youth (not the points yet) with age and title.
	36 Added participant check after an enter key for a call (participants can't contact us from home)
	35 slowed clock slew rate and to a more odd number 
2017-beta-4 (unreleased)
	- Added "WHO" button before operator so that this can be clicked for whose on bands.
     		# Determined that this is not needed now that the mouse over report is cleaner.
	- I added a mouse over pop up 
	 	# but this turns out to be very annoying so it was removed.
	34 Mouse over who's on the bands report is super clean now.
	33 Fixed the output of the sections so it prints cleaner as well.
2017-beta-3 (stable needs testing)
	32 Now checks for valid sections. Thanks W6AKB
		(this was modified from 153d version of FDLog) 
2017-beta-2 (stable needs testing)
	31 Fixed the Class not updating when clicking on an HF band 
	30 Removed bug that would not allow edits if the call and band are the same.
      		Now can't edit a deleted log entry, and can't edit unless it is in the log.
       		-- Need to display the latest log entry if an entry has been edited previously.
	29 Removed the extra lines in the gui for the port and for the list of nodes on on each band. 
		- reverted back to the way it was for now but added the port to the header.
    Next item to work on will be the popup that will show the station on the band clicked.
2017-Beta-1
   Obviously, I never released v2015-beta-5 which is what this is.
   There were no releases in 2016, as we used the previous stable version.
   The unreleased 2015Beta4 and 2015Beta4.1 turned out to be a "time" bridge to far.
   During FD2016 one of the computers was receiving but was not sending.
   Since that computer had the time within a minute there were no conflicts with the
   database. This happens a lot, computers in and out of the network and no serious consequences. 
   Especially since we don't have more than one person on a band...
   Which made me think that there was no need for hyper-accurate time devices or synch routines. 
   So, beta 5 will revert back to a simple time master like before.
   Internet time may be kept but having Internet distracts the operators so our focus will be on new features.
	28 Prevented the ability to edit previously DELETED log entries. Thanks K9JAJ
	27 Adding a statement to check for uppercase. Previously unresponsive while capped locked. 
		Thanks WW9A for pointing out that the program isn't randomly freezing.
	26 Made the -Call-Class-Sect- persistently above the input line. Thanks K9MAF
	25 Added the port number to the header. Thanks K9MAF
	24 "wa6nhc 5/2013 suggests precluding site operators from being logged as Q's"
		Done. Added the ability to "dupe check" participants outside the dupe log. Thanks WA6NHC


2016 updates

SCICSG had Field Day at The Rock Church in Columbus Indiana again. We used the 
v2015 stable release again. There was discussion on using other software so 
development slowed but the group came to the conclusion that this was familiar 
and it just works. Because we used a previously stable version we were able to 
find several bugs and got several suggestions for 2017 release. Work was done to 
incorperate fdlog's time functions and operate the program over the internet but 
both were abandoned. It was decided to focus on bugs and usability. We were 5A 
with 6 operators with a lot of visitors (a lot of hams from the area) 
with 944 points. We did not turn in our results. 


2015 updates

SCICSG held field day in a field next to "The Rock" Rocky Ford Free Methodist Church 
in Columbus IN. We had 9 members in the log with many more visitors. We only used 
natural power. 6A with a total of 1644 points. 

 23 Now a Repository on Github called FDLog_Enhanced July 2015
 22 File is renamed FDLog_SCICSG.py
 21 Versions also renamed. v2015 is the first stable release on Github.
 20 Code rework from Biocca's fdlog (time functions and sql updates abandoned). 
 19 Made initialize setup routine for FD setup. 

2015_beta-3
	This is actually stable but it isn't 100% working. Now we 
	make the program work and start upgrading it.  
2015_beta-2 
	More code intigration from the original fdlog. This one
	from the beta 152i. We need to work on getting this stable. 
2015_beta_1
	Combined our stable version with the latest beta from 1-152-n.
	This includes the sql database and the fixed time function. 
	We need to get this stable and working with my enhancements.
2015_Field_Day Release 
	Code cleanup from fdlog 1-149-02


2014 updates

SCICSG held field day at CERA Land in Columbus Indiana. This was the year we 
were visited by Columbus IN Mayor Kristen Brown. We had 19 participants in the 
log but way more than that. We were 5A with 2168 points. 

 18 Project was brought into Github when Google Code closed - I forked that. 
 17 Renamed SCICSG_FDLog.py
 16 Fixed VHF to reflect a free transmitter
 15 Now warns if two vhf rigs are used
 14 Nodes now require 8 characters in length so the log lines up nicely.
 13 Added a Resources Menu Item to clean up the menu.
 12 added tildes to make the gui look nicer - input area is bigger.
 11 Additional code included from FDLog v4-1-152i


2013 updates

This is the last year we used Biocca's FDLog. After emailing Alan Biocca 
several suggestions, a possible code fix, and what seemed a "too busy" 
response to help updating the program, Scott decided to modify the program 
for himself AFTER field day 2013. It was held with the 
South Central Indiana Communications Support Group (scicsg) at CERA Land 
in Columbus Indiana. (This is the year we lost a blimp holding a wire antenna 
from a suprisingly quick storm.) The following updates were added for the next 
field day. 4A with 23 attendies, 6 computers, and 1330 points.

 10 Gui rearranged so that individual scores can be given, not just group score.
 9 Individual score displayed for the operator!
 8 Individual score displayed for the logger!  
 7 removed the text within the program to the gui menu and into another file.
 6 Can see who is on what bands with a mouse over! 
 5 .testqgen only operates with a 'tst' database.
 4 made color of the user buttons red until operator, band, power etc are assigned
 3 added and expanded the network label to explain network status.
 2 Added database protection against no band, no power, no op, and no logger
 1 Added warning against 1D to 1D contacts being logged but not counting points
 

2012 updates

Scott Hibbs KD4SIR found FDLog on the internet. Scott proposed it's use for 
field day 2012 as field day chairman of the Columbus Amateur Radio Club held 
in front of Menard's in Columbus Indiana. Columbus IN Mayor Kristen Brown visited. 
We were 3A with 1590 points. 


The following is the release log of the original fdlog:

1-149-02 2011/7/11 bug fix

    allow lowercase contest names
    add 900 mhz to editing validation
    note that report requires 4 chars in editor to save
    editor shows unvalidated fields in yellow after save attempt
    edit dialog box disappears on successful save, else stays with yellow
    fields that need fixing.
    
1-149 2011/07/02 contest set version

    adding .set contst menu for (FD,VHF)
        set global to contest type .set contst FD|VHF
        adjust dup check to call for FD, and include <call>/<grid> for VHF
    adjust bands for VHF, include 900, (drop below 6m?)
        dropping bands is tricky, leave for later.
        did add 900 band however

    setup for mercurial, opened Google Code project

1-148vf 2011/06/25 fd version

    commented out VHF code but kept other changes for 2011 fday

1-148v 2010/08/18 vhf version

    dup checking includes call/grid
    call column widened by 1 char to handle additional width
    still need to enter something in the report, such as signal strength
    fixed some small bugs in log color and editing due to dependence
    on data in the scrollbox. May be only one line change to
    make compatible with standard Field Day.

    q just needs call/grid & band (use same mode for all Qs)
    got it to work.
    added a column to make call/grid fit
    fixed a few bugs
    newline on log missing, added it, later removed again

    now two bugs. (fixed)
    local log color=blue not working
    - always black
    edit left mouse click for edit on log not working
    - probably getting error at some point and killing that thread/window
    - problem was two functions that pick up chars from msg buffer
    - adjust them by 1 char, worked

    note that python is complaining about md5 and using hashlib instead.
    snap 9, release 3 at this point

    also after space input didn't echo call with full grid. Fixed.
    converted from md5 library to hashlib. done.
    snap 10 release 4

    made call box in edit dig wider to accommodate 11 char call/grid
    added code to disallow editing another node's Qs
    after changing node id and restarting the q's still came up blue? bug?
    test code was still in. fixed.
    snap 11

    comment cleanup. added more notes detail.


1.147 2009/06/20 pre fd (used on FD 2009,2010)

    changed GOTA Q limit from 400 to 500
    demo modes commented out
    80 meter cw frequency for w1aw changed (w1aw.txt)

    qrp 5W from mains or generator has a multiplier 2 - same as 150W.
        This is not scored properly by the program yet.
    max of 20 transmitters is not enforced by the program
    educational activity is not scored by the program.
    complex GOTA bonus points are not handled by the program

1.146B has GOTA call fixed. 6/15/2008 AKB
        gcall will accept a proper call with number, somewhere prior to this
        the number part of the regex got lost. This affects log output.

1.146  2006/06/11 22:00:57  Alan Biocca
	Documentation - minor cleanup.
	Setup - added web push dir support. (also upload)
	TimeSync - new program derived from Eric's that syncs system time from GPS.

	QSO Editing! Right-clicking on a Q in the log brings up an edit
	dialog box. From there it can be Deleted, or modified and then
	Saved. Errors light up the fields in yellow when Save is attempted.
	The Dialog disappears on Successful Save, Delete, or Quit.

	Log text from the local node is blue in color, from other nodes is black.
	Automatic case adjustment for various inputs simplifies usage. Automatic
	log lookups show log entries for duplicate stations and stations being
	logged show info from other bands. Log lookups (<callsign><return>)
	conveniently allow looking stations up in the log.

	Directly Executable Version distributed. fdlogexe.zip. Runs without Python
	installed. Windows required. 3.5 Megabyte download.

1.145  2005/09/12 03:41:23  Alan Biocca
	Minor Comment Edits

New for 2005

	Time Synchronization. Designate one machine as the master, all others will
	chase it. Use '.set tmast <node>' to select master time node.

	Changed fd rules filename to 'fdrules.pdf'. Just download pdf rules and
	rename the file to this name. Then the rules can be accessed from the menu.

	Found and fixed another bug in the power type-in. Using the pulldown worked,
	but typing in caused problems. Root cause here is changes to how Python
	handles variable types.

	Made an attempt to fix up the GOTA scoring changes in the ARRL rules. Not
	tested.

	Added the second site visitor as well as the youth bonus.
	
1.144  2005/09/12 03:17:11  Alan Biocca
	Added Q Edit Dialog Box. Major Effort

1.143  2005/07/06 17:26:13  Alan Biocca
	Added Time Zone Chart

1.142  2005/07/01 12:58:56  Alan Biocca
	Documentation updated, minor edits to prog comments.

1.141  2005/07/01 05:13:03  Alan Biocca
	Log autolookups added
	   Displays log lines matching the current call when duplicates found,
	   or by typing in <call><return>
	   This shows the info for this callsign collected on the other bands
	Stubbed in the beginnings of the .edit command

1.140  2005/06/29 22:44:48  Alan Biocca
	Color log text from this node
	Restrict node to lowercase

1.139  2005/06/29 20:22:56  Alan Biocca
	Youth updated to take 1-2 digits
	Fixing case on set variables like callsigns initials etc

1.138  2005/06/28 16:25:09  Alan Biocca
	Adjusted Add Participant dialog box.

1.137  2005/06/28 16:22:06  Alan Biocca
	Add participants case problem fixed
	Added synonyms for ARRL sections for WAS

1.136  2005/06/26 19:01:10  Alan Biocca
	Fixed time level display. 3500 lines now.
	I ran this version FD 2005 on one node (changed during).

1.135  2005/06/19 03:44:56  Alan Biocca
	Minor changes to message in fdlog.
	Major upgrades to group_plan.
	Minor updates to group_handbook.

1.134  2005/06/17 23:56:23  Alan Biocca
	Preparing for 2005-1 release.
	This version used on FD 2005.

1.133  2005/06/17 23:24:32  Alan Biocca
	Updates to accomodate ARRL rule changes over the past couple of years
	including GOTA, new bonuses, etc. Minor other cleanup. No substantive
	changes.

1.132  2005/06/13 23:45:20  Alan Biocca
	Fixed power type-in bug (text vs number).
	Changed power var to keep it a string at all times to fix typed-in power
	anomalies. Improved the Add Participants dialog box.
	Moved to new laptop.

1.131  2004/07/05 18:48:43 akbiocca
	prep for release to web.
	Revision log redux - Thinning.

New for 2004

	Just before Field Day many minor changes were made to the startup. The
	messages were improved and things were simplified in general. Also added
	is a directly executable version that does not require Python to be installed.
	This version carries an interpreter along with it, so it is larger.
	The startup auth key is xxxyyyzzz... xxx goes onto filename. Use 04a for
	2004 version a. yyy for port, zzz... for hash key.

	Just after Field Day the Time Sync feature was added (enough problems with
	NTP servers and clients...). Now a node may be designated as the 'time master'
	and all client FDLog programs will track it. This DOES NOT change the system
	time, just the internal time FDLog uses in the log...
	
	
1.130  2004/07/05 04:15:58  akbiocca
	Time Synch added. Clients track master node. Designate with .set tmast <node>

1.128  2004/06/29 23:52:43  akbiocca
	Plans for time sync made. some vars defined. minor misc cleanup.

1.127  2004/06/29 15:51:13  akbiocca
	Natural power bug fixed. My val() function is apparently a subtle problem
	but only in the tkinter case. Perhaps a conflict with TCL? Changed my func
	to ival(). 

1.126  2004/06/28 18:42:56  akbiocca
	Comments from FD 2004 added.

1.125  2004/06/14 02:13:12  akbiocca
	added seed to authkey. updated group handbook. Used for FD 2004

1.124  2004/06/13 15:19:52  akbiocca
	improving documentation on reporting. fixed power command updating screen.
	some testing. no substantive changes.

1.122  2004/06/10 20:42:46  akbiocca
	adjusting messages. testing. 

1.121  2004/06/10 03:39:38  akbiocca
	including c.bat and setup.py for the py2exe config. updated handbook.
	minor edits elsewhere. 

1.120  2004/06/10 02:37:24  akbiocca
	Setup for py2exe, which appears to work. 

1.119  2004/06/09 18:15:53  akbiocca
	Added GPL. minor doc edits.

1.118  2004/06/09 16:38:54  akbiocca
	renaming group files. fdlog startup improvement continues. documentation
	cleanup continues. testing continues, is partial at this time. no substantive
	changes have been made.

1.116  2004/06/09 02:59:21  akbiocca
	checkpoint. fdlog startup altered to be more interactive, straightforward.
	testing minimal at this point, but changes not fundamental. text files
	edited for some 2004 info, but not final. 

1.115  2003/07/20 21:39:15  akbiocca
	WAS Logic improved to handle can, dx. This likely vsn for 2003 submittal.

1.114  2003/07/19 05:39:43  akbiocca
	Improved Worked All States display. Fixed bug in Vermont.

1.113  2003/07/18 21:37:55  akbiocca
	Updating old comments, removing some old code. Improvement in recognizing
	worked all states. Improving report for FD Entry. Partially tested.

1.112  2003/07/17 05:26:22  akbiocca
	WAS rpt added to fd log.

1.111  2003/07/16 14:08:20  akbiocca
	Changed text inputs such as w1aw message, nts messages, etc to 'file input'.
	These fixed filenames are searched for and if existing they are included
	in the FD report.

	w1aw_msg.txt
	nts_msg.txt
	nts_rly0.txt to nts_rly9.txt (one msg per file)
	soapbox.txt
	media.txt

	Added example of nts messages in nts_eg.txt to copy and modify.

1.110  2003/07/15 03:55:06  akbiocca
	Linux improvement. Changed font calcs. Linux needs about size 20,
	Windoze 10. Changed grid argument col to column for increased
	portability. This after FD03, previous vsn was used for FD03.

1.109  2003/06/22 17:13:27  akbiocca
	Updated for 2003. Authkey sets data filename and port. Used for FD 2003.

1.108  2003/06/10 13:49:54  akbiocca
	Prep for FD 2003. GOTA bonus changed. Class F added. Untested.

1.107  2002/06/22 07:01:13  akbiocca
	Rich found bug in socket addr list. Tested partially w Mac, Sony laptops.

1.106  2002/06/15 16:11:21  akbiocca
	checkpoint. minor changes to prog, plan, handbook. moved manuals to
	subdir. make this beta 6.

1.105  2002/05/28 13:36:50  akbiocca
	fdlog fixes to help buttonsize. adding remote bcast (incomplete?).
	changed station to node.. prog seems to run, not well tested.

1.103  2002/05/13 12:23:46  akbiocca
	small mods to handbook & plan.
	added grid.sticky=NSEW to all buttons hoping to fix the mac.

1.102  2002/05/12 22:29:25  akbiocca
	updated group plan with meeting info. first draft.
	update group handbook.
	updated program somewhat. chop print fields that were overflowing.
	improved parsing to reject some bad calls. fixed .h command triggering
	on kh6 callsigns. changed a lot of re.search to re.match calls.
	started to work on internet test feature, not complete.
	this version not significantly tested, but probably works.

1.101  2002/05/11 03:17:00  akbiocca
	Eric fixed linux fail to bcast. Prelim tests on Linux passed. Win2k tested.
	This was Beta 5, tested at the FD 2002 mtg.

1.99  2002/05/09 05:01:54  akbiocca
	testing. fixed bug w power on first startup. cleaned comments.
	tested w 2 stations wireless. ok so far. fixed site info typo.

1.97  2002/05/08 13:55:52  akbiocca
	op, log pulldowns. fixed global sets. testing not complete. docn upgraded.
	cleaned up data handling. lots of code commented out in cleanup, will be
	deleted soon. changed to initials for op, log. added space to other column.
	added dialog for adding participants. power select menu and entry w check
	for natural. converted stub view funcs to lambdas. added online equipment
	manuals, 746 and pro. upgraded site info file.

1.95  2002/04/23 03:30:04  akbiocca
	added ARRL band plan in help menu.

1.94  2002/04/22 14:51:52  akbiocca
	lots of edits. reorganized  history, made a menu to display it.
	added equipment help submenu. reorg help menu. reorg and update of much
	of the doc'n. not complete. expanded site info. added access point to
	wireless doc. added root window titles to subwindows.

1.93  2002/04/21 08:33:30  akbiocca
	dialog + wasrpt cleanup. sfx report improved.

1.92  2002/04/20 22:36:34  akbiocca
	added Worked All States Report. measures progress to worked all states.
	requires correct abbreviations to be used for ARRL sections.

1.91  2002/04/19 03:41:30  akbiocca
	added a few files. propagation, site info, nts manual. cleaned up docs
	regarding control-c and control-z. note that the new text files need
	a bit of work, they are frameworks at this time.

1.90  2002/04/19 03:16:16  akbiocca
	added python web help menu item. disabled control-c,z (suggested by Weo WN6I).
	added set cursor on mouse-1-up to keep it where it belongs.

1.86  2002/04/17 12:47:06  akbiocca
	improved time on band accuracy. cleanup.

1.85  2002/04/15 12:38:34  akbiocca
	added time on band indicator in root title bar.

1.84  2002/04/15 12:09:30  akbiocca
	view text boxes made resizable, and independent (not transient).
	this allows them to be iconified and not on top.

1.83  2002/04/15 05:28:30  akbiocca
	made main window resizable.

1.82  2002/04/15 00:30:58  akbiocca
	release prep beta 4. tagged beta 4.

1.81  2002/04/14 21:26:26  akbiocca
	added bands.pdf, imported group_handbook.txt.

1.80  2002/04/14 18:46:41  akbiocca
	w1aw schedule added.
	improved set command help.

1.79  2002/04/14 16:53:29  akbiocca
	changed to UTC time.

1.78  2002/04/14 15:42:15  akbiocca
	added .testq test qso generator.

1.75  2002/04/14 02:21:54  akbiocca
	fixed bug in deleteq, present in beta 3.
	added more .set commands.

1.74  2002/04/13 20:32:11  akbiocca
	.set commands added. global data sharing, load/reloading.

1.73  2002/04/13 13:50:47  akbiocca
	prep for beta-3. (Tagged Beta-3)

1.71  2002/04/12 17:16:39  akbiocca
	fixed bug in qst to allow question mark in char set there without
	triggering help. improved age out message to include both from and
	station the info is about.

1.70  2002/04/12 13:17:55  akbiocca
	qst messaging working, added to docn, qst log report added.

1.67  2002/04/12 03:21:19  akbiocca
	improved net error indicators. working fairly well.

1.66  2002/04/11 13:51:39  akbiocca
	added logs menu w per band/mode filtering.

1.64  2002/04/11 05:39:19  akbiocca
	changed to age timeout of band data. pkt struct chgd slightly. 

1.62  2002/04/09 23:37:02  akbiocca
	added need fill message on CW/D button when fill list length is nonzero.
	this and the NO PKTS indicators are on a 10 second update cycle. 

1.57  2002/04/08 14:22:54  akbiocca
	included about and getting started into the prog file. plan is to keep
	the program self contained in one file for basic minimal doc'n and
	executable in one file. added cvs log into source. improved root title

1.56 redup on sta chg. getting good!

1.54 band buttons hooked to real data. chg station goes to band off
     exits set band off

1.52 exit button cleans up, launches pdf arrl rules (prob only win32)
     most help menus work. properties made larger. single property diags
     added many text doc files. band button array

1.49 win vsn working, property dialogs working. tk continues.

1.46 tk integration begins..

1.44 contest entry to file. effort est 10d. 1500 lines. beta-2?

1.41 many changes. wireless tested. fd entry report output in work
     mac/unix port changes started. dup reports. 1500 lines

1.30 fixed start date conflict in comments. dug out 1984 start date!
     mv todo, etc to notes.txt file. approx 7 days effort in. 915 lines

1.8  sped up fill and rcvr threads
     rcvr blocked on read - no delay. filling works fast now
     debug mode slows fill requestor, otherwist fills at 10hz
     fixed propagation of broadcast info. works fairly well..

1.4  (in cvs) net sync works! approx 5 days fte effort so far

1.1  2002/03/18 23:35:15  akbiocca
     Initial revision (to CVS)

-------------------------------------------------------------

Program History (Pre-CVS)

Re-coding started 3/6/2002 Alan K Biocca WB6ZQZ (wb6zqz@arrl.net)
Design based on fdlog.c, by same author starting in 1984 for CP/M.

Goal: a minimum keystroke field day logging program supporting
      a group of users (a whole FD site) simultaneously

The original program was multitasking and supported multiple
stations on serial terminals, 2000 lines of small C and asm.
With help from Eric Williams WD6CMU and Steve Wilson KA6S, it
devolved to MSDOS but there supported only one user, so the
database had to be manually collated to include all stations.

Plan: use networking, usually 802.11b peer-to-peer wireless,
   to interconnect the stations. use a flood/fill algorithm
   to share data. avoid single point failure, stations can join
   and depart the network with minimal effect.

v0.01 started 3/2002. chose python as it has the features
   to do this project well and efficiently
   after 2.5 days of effort the program is working for a
   single station. useful for single station logging
-------------------------------------------------------------------
