Release Notes for JMRI 5.8 release
Date: June 24, 2024
From: Bob Jacobsen
Subject: Production Release 5.8 of JMRI/DecoderPro is available for download.
We are very pleased to announce that the 5.7 series of JMRI test releases has resulted in a
version that's good enough to be recommended for general use, including by new users.
We're therefore making that version, "Production Release 5.8" available for download today.
Notes:
JMRI is now only available under the
GNU General Public License. For more information, please
see our
copyright and licensing page.
This release requires Java 11 to work.
(See our page on downloading and installing Java 11)
Update From Older JMRI Versions
If you are currently using a version older than JMRI 5.0, please follow these instructions carefully:
- Is your current version older than JMRI 4.12?
If so, then update to JMRI 4.12 first, and ensure everything works correctly: check
start-up, check things you need to be working, and check the JMRI log as well) before doing anything else.
Store your configuration and panel files under a new name and use those from now on.
Then continue with step 2.
If you are currently using JMRI 4.7.3 or earlier on Linux or macOS (Windows doesn't need this),
then it's very important
that you update to JMRI 4.12 and
carrying out the migration process described in the JMRI 4.12 release note
before updating to any later release.
- Is your current version older than JMRI 4.20?
Then update to JMRI 4.20 first, and ensure that works correctly (check
start-up, check things you need to be working, and check the JMRI log as well) before doing anything else.
Save your preferences again.
Store your configuration and panel files under a new name, use those from now on, and go on to step 3.
- Is your current version older than JMRI 4.24?
Then update to JMRI 4.24 first, and ensure that works correctly (check
start-up, check things you need to be working, and check the JMRI log as well) before doing anything else.
Save your preferences again.
Store your configuration and panel files under a new name and use those from now on.
- Is your current version older than JMRI 5.0?
Then update to JMRI 5.0 first, and ensure that works correctly (check
start-up, check things you need to be working, and check the JMRI log as well) before doing anything else.
Save your preferences again.
Store your configuration and panel files under a new name and use those from now on.
- You can then install this release.
Following this multi-step order of updating via stable major releases safeguards you against possible migration issues
that can arise from skipping these versions.
New problems with this release
- LogixNG Timers configured to fire when JMRI starts do not work properly in this release.
It will be fixed in 5.9.5 and 5.10.
New warnings for this production release:
- Since JMRI 4.7.7
If you are using a RR-CirKits LocoNet to LCC gateway
with this release, please upgrade its firmware
to version B8g or later. B8f or earlier will
have trouble updating the gateway's configuration.
- Since JMRI 5.7.1
Several systems have had extensive updates to their serial
support. If you have trouble connecting to your layout hardware
after installing this version, please contact us
on the JMRIusers list
for assistance.
Older warnings
See the
JMRI 5.6 release note for more warnings predating the 5.6 development series,
including pointers to various migration issues.
These may be relevant to you if you're updating from an earlier version;
we strongly recommend you update to
JMRI 5.0
before installing this release, see above.
- Since JMRI 4.99.1
This test release, and all subsequent ones, require the use of
Java 11 or later. Java 8 is explicitly not supported.
There's more information on this migration on the
JMRI Tech Road Map and
JVM Capabilities pages.
Download links:
These files are located in the
JMRI 5.8 GitHub release.
This production version is made from test releases 5.7.1 through 5.7.9 The
full list of changes
in those is
available from our code repository.
Hardware Support
- Fixed a freeze that could happen when changing the connection preferences.
Acela CTI
- Acela CTI serial connections have been updated to use a new serial library.
CBUS
- CBUS serial connections have been updated to use a new serial library.
- Console - Improved Statistics display
C/MRI
- C/MRI serial connections have been updated to use a new serial library.
- C/MRI serial now uses 2 stop bits, which solves communication
issues on certain hardware.
DCC++ and DCC-EX
- A problem with serial communications introduced in 5.7.1 has been fixed.
- New connection setting to extend the transmit startup delay
- Transmit startup pause now resumes when incoming message received
- Can use DCCppOverTCPServer to connect DCC-EX native protocol thru JMRI
DCC4pc
- Improved how traffic is displayed in the monitor window.
Direct
- Direct DCC serial connections have been removed.
EasyDCC
- EasyDCC serial connections have been updated to use a new serial library.
Lenz XPressNet
- Lenz XPressNet connections have been updated to use a new serial library.
LocoNet
- LocoNet serial connections have been updated to use a new serial library.
- Several tools have improved layout when the
screen size is reduced.
- Updated LocoNet Monitor to display PM74 and SE74 device
types for certain LocoNet messages.
- LocoNet Monitor has improved reporting of "Query Mode"
messages.
- DCS240+ has transponding built it, so that option is treated as selected.
- Improved how LACK responses are handled in ops mode programming; sped up ops mode programming
- Improved how threads are shutdown when changing connections
in the settings.
Maple
- Maple serial connections have been updated to use a new serial library.
MERG
- MERG CAN serial connections have been updated to use a new serial library.
MQTT
- The new Jython script jython/MQTT/MqttSignalHead2.py
has been added. It's an improvement of jython/MQTT/MqttSignalHead.py
as it doesn't need any manual configuration to work.
- Made certain error messages specific to a single device.
- Fixed missing topic unsubscribes when deleting turnouts, sensors, etc
- Fixed missing topic unsubscribe on throttle release for cab functions
- Added code to properly dispose of MQTT components
- Fixed issue with consists not being activated if created after the controlling throttle was created.
- Fixed issue where JRMI may generate a non-unique client id when connecting to the MQTT broker - see Warnings.
MRC
- MRC serial connections should use odd parity.
NCE
Oak Tree
- Oak Tree serial connections have been updated to use a new serial library.
Powerline
- Powerline connections have been updated to use a new serial library.
- Fix a problem what would cause the DMX512 connection to loop on startup.
RFID
- RFID connections have been updated to use a new serial library.
Secsi
- SECSI serial connections have been updated to use a new serial library.
SPROG
- SPROG serial connections have been updated to use a new serial library.
This should fix the incompatibility with recent macOS versions.
TAMS
- TAMS serial connections have been updated to use a new serial library.
TMCC
- TMCC serial connections have been updated to use a new serial library.
Zimo MXULF
- ZIMO serial connections have been updated to use a new serial library.
New / Updated decoder definitions
- Added a new "No Decoder" listing in the New Loco selection to allow people
to track DC locomotives in the roster.
Digitrax
- Added DN163K5B decoder
- SFX Series 7 support updated for XF controls.
Kuehn
- Added function decoder F060
Leb
- Fixed XML files when cross-referencing additional decoder details.
Lenz
- Update the Lenz Plus 2010 definition to include recent versions.
- Added MP15DC
Logic Rail Technology
- Added a definition for the LightEFX16.
MD Electronics
- New decoder definitions DRIVE-S, DRIVE-XS
- New definition for the mXion DRIVE-L decoder.
Mistral Train Models
- Updated Lokommander II definitions. Implement CV114, 115 and 116 according to the firmware version. Firmware V3 : treat as binary and only support up to F8 Firmware V6 : treat as decimal and support up to F28
PIKO
- Add CVs for PMW modulations, add tooltips
- New decoder file for Piko H0 KM ML4000 loco with special light decoder
SoundTraxx
- Fixed XML files when cross-referencing additional decoder details.
- Genesis OEM add new models
- Improved the HO 2 Truck Climax (2climax) definition.
Tam Valley Depot
- Updated the QuadLN_S decoder definition to support new features in version 3.3 firmware.
TCS
- Better handling of an occasional spurious error that
can happen when accessing TCS indexed CVs.
Technologistic (train-O-matic)
- Added Lokommander II Next18 decoder used in NMJ Skd224 models
Trix Modelleisenbahn
- Fix URIs in the xml/decoders/trix/mLD_mSD_functionmap.xml that were pointing to
http://jmri.oSound6/xml/ This should be pointing to: http://jmri.org/xml/
- The Trix/Marklin mLD/3 and mSD/3 decoder definitions now have 31 functions
Uhlenbrock
- Small corrections and improvements to the IntelliDrive2 decoder definitions.
New decoder definition Tillig 66036 Decoder
- Add CVs for PMW modulations, add tooltips
- Small error corrections Uhlenbrock decoder file
ZIMO
- LIPLDNW1 (N, TT) light bar
- LIPLDNY1 (N, TT) light bar
- LIPLDHW1 (H0, TT) light bar
- LIPLDHY1 (H0, TT) light bar
- LIPLDGY1 (G, 1, 2) light bar
- LIPLDGW1 (G, 1, 2) light bar
- MX decoder versions with new hardware added
- CV's for new hardware versions added
- Settings for shunting speed corrected (CV124 Bit0-1)
- minor corrections
- new MS and MN decoders added
- minor optical corrections
DecoderPro
- Added a SplitHundredsVal which defines a large value
split across multiple CVs in groups of two decimal digits.
This is used by the new Logic Rail Tech definition.
- The CV table columns now expand to fill their complete pane.
This is to make the table more readable when it contains long
value or CV name strings.
- Label & Media pane, throttle function button "lock" behaviour was renamed as "latch", as per issue #12975. Documentation updated accordingly.
- Better handling of selected items when roster list is updated
- Enable/Disable bottom controls depending on selected item
PanelPro
- The path for the backupPanels directory has been fixed so that it
now refers to the user files location instead of the profile location. This only affects
the backup files location when user data is shared by multiple profiles.
- The File ⇒ Show file history content has been enhanced. The
app entries show the JMRI version. The Store entries
show the name of the file that was created.
OperationsPro
- New feature allows users to quickly create a custom load for all car types.
- Simplified the creation and update of switch lists when using MR SLAM
- Improvements to destination checking button for C/I tracks
- Added warning messages if operation files have been corrupted
- Files are now saved to the millisecond, fixes fast Automation actions and loops
- Improvements to export Trains
- Significant improvements to Car importing
- Conductor improvements when sorting by track name
- Web Manifest and Conductor improvements, Manifest now supports utility cars. Comment colors now supported
- Switch lists can now display train's departure time
- Fixed a routing bug that was introduced in JMRI 5.6
- New feature allows users to quickly create a custom load for all car types.
- Simplified the creation and update of switch lists when using MR SLAM
- Improvements to destination checking button for C/I tracks
- Added warning messages if operation files have been corrupted
- Files are now saved to the millisecond, fixes fast Automation actions and loops
- Improvements to export Trains
- Significant improvements to Car importing
- Conductor improvements when sorting by track name
- Web Manifest and Conductor improvements, Manifest now supports utility cars. Comment colors now supported
- Switch lists can now display train's departure time
Dispatcher
- Add an option to Ramp up and down using the speed profile such that the speed change takes place over the length of the section.
- Replace boolean ResistanceWheelSet with TrainDetection, which supports...
- Whole Train - the entire train is detected.
- Head Only - only the front of the train can be detected.
- Head and Tail - the front and rear are detected but not any bits in between.
- Any TrainInfo files that are edited will be saved in the updated way and cannot be read by older versions.
- ActiveTrain - now fires property change events when Allocated Section are added and removed. Previously only fired event on add.
- When finding no next allocated section, 1st check for end of transit.
- Update controlling Signal on screen in a timely fashion.
- Stop train with profile in remaining blocks of a multi block section.
- Stop autotrains on program exit.
- Allow User to enter a train name of their choosing.
- Add Transit Action to attempt to allocate beyond next safe section.
Layout Editor
- Do not display tooltips for hidden items.
- Do not reset all tooltip settings for Always or Never tooltip selections when changing
the editor mode.
- Fixed the ability to connect turnouts by dragging and dropping. When end points
overlap, a track segment is automatically created. This works very nicely for creating
yard ladders. The problem affected panels on Linux and Windows.
- Add the hidden attribute to the Layout Editor Shape
item. The center popup menu has an option to hide the shape when not editing. The
setHidden(boolean) public method can be used by scripts and LogixNG.
- The Disable value edit popup when not editing menu item has been
added to the context menus for blocks, memories and global variables. When the panel
is not in edit mode and the option is enabled, the pop-up to the edit the value will
not occur.
LogixNG
- Warnings
- Note: If tables and panels are stored
with this JMRI version, the file might not load in a
previous version of JMRI if it includes LogixNG. This is
because JMRI now stores some LogixNG data in a different
way than before.
- New actions
- The action Program On Main has been
added. It lets you program CVs on the main.
- The action Table is added. It lets the
user set the value of a cell in a LogixNG table.
- The action Request update of sensor is
added. It requests that the state of a sensor is updated
from the layout, if possible. Not all connections supports
this, for example LocoNet.
- The action Window to front as been added.
It brings a window to the front and can be used if you for
example want to have an icon on a panel that moves focus to
another window.
- The action Decode JSON is added. It decodes
a JSON string in a local variable to a JsonNode tree and
puts it in another local variable.
- The action Enable/Disable LogixNG
has been added.
- The action Set reporter has been
added.
- The action Execute action has been added. It executes
another action somewhere else in the ConditionalNG tree. This can be
useful if you need to execute a part of the ConditionalNG at several
different places, for example if you have several
Listen On Beans - Local variable in the same
ConditionalNG.
Note that the action you want to execute must have
a user name. Otherwise the action can't be selected.
- Improved actions
- The action Local Variable can now set
a constant of different types: String,
Integer, Floating number,
Boolean.
- The action Table: For each can now loop
thru the headers too. If indirect addressing is used for
the row or column name, use the empty string to get the
headers.
- The action Log local variables now has the
option Show class name.If it is selected,
the name of the class will be shown after the value. This
is useful for debugging, when you want to know the type of
the value.
- The action For each now supports
Java arrays as well, for example the result of the expression
a_b.split("\_").
- The actions Listen on Beans ... have been
updated to fix a problem when several beans changes
state at the same time.
- The action Window to front has been improved and renamed to
Window management. It can now show/hide a window,
maximize/normalize/minimize a window and move the window to front or back.
- New expressions
- Improved expressions
- The expression Sensor Edge no longer
supports indirect addressing of the sensor. It has never
really worked since Sensor Edge needs to listen on the
sensor and it cannot listen on a sensor if indirect
addressing is used.
If a panel is loaded and a Sensor Edge expression uses
indirect addressing, an error message is added to the
log:
Error during loading Sensor Edge expression
IQDE:AUTO:0003 due to: Addressing must be Direct
where IQDE:AUTO:0003 is the system name of the expression.
- Bug fixes
- A couple of bugs in the LogixNG formula parser have
been fixed.
- Conversion to boolean has changed. Before JMRI 5.7.5,
conversion from a string to boolean returned
True if the string was not empty, and
False if the string was empty. With JMRI 5.7.5,
this has changed so that a string that's true
(case insensitive) returns a boolean True
and a string that's false (case insensitive)
returns a boolean False. All other string
values throw an exception. The earlier behaviour was not
documented so it's unlikely that this affects users.
The old behaviour was based on how Jython converts a string
to boolean. If you want the old behaviour, you can use the
LogixNG formula function boolJython().
- The LogixNG function int() previously returned a Java
Integer instead of a Java Long.
This bug is now corrected. It shouldn't affect any existing
LogixNGs. The difference between Integer and
Long is that Long can handle
much bigger integer values than Integer.
- Fixes a bug so that the methods toString(),
getKey() and getValue()
can be used for an item when using the action For each
on a Map.
- Bug fix: The LogixNG function boolJython()
now return false if the value is an empty array. It returns
true if the value is a non empty array.
- Bug fix: The LogixNG function evaluateMemory()
didn't behaved as documented. It's now fixed.
- A bug has been fixed in LogixNG when using LogixNG tables:
If an action or expression, for example the action Set turnout,
reads data from a LogixNG table, for example the name of the turnout, and a
memory is used for addressing the row or column in the table, the name of the
memory was stored in the wrong place in the file. JMRI deals with this when
the file is loaded so no user should be affected.
But if an existing file is loaded and then stored, the file will not work
with JMRI versions pre 5.7.6.
- Fixes a bug in LogixNG formula when calling a Java method that
takes a boolean as parameter, like setVisible().
- Other improvements
- Add Audio support to Where Used.
- The LogixNG table now shows whenether the ConditionalNGs
of a LogixNG has Startup enabled or not.
The Startup checkbox in the LogixNG
table can have three states: Checked, unchecked and
partially checked. If the user checks/unchecks the
checkbox, all the ConditionalNGs will have the
Startup enabled/disabled.
The column Startup is at the far right
in the LogixNG table. You might need to resize the table
to see the new column.
Note: Due to a bug, Startup might not
be shown as checkboxes but of text labels that cannot be
changed. To change Startup in this case,
edit the LogixNG and change Startup for
each ConditionalNG.
- The LogixNG table now shows whenether the ConditionalNGs
of a LogixNG has Startup enabled or not.
The Startup checkbox in the LogixNG
table can have three states: Checked, unchecked and
partially checked. If the user checks/unchecks the
checkbox, all the ConditionalNGs will have the
Startup enabled/disabled.
The column Startup is at the far right
in the LogixNG table. You might need to resize the table
to see the new column.
to see the new column.
Note: Due to a bug, this feature didn't work as it
should in JMRI 5.7.2 but it's now fixed.
- LogixNG has two new preferences which are disabled by default:
- Use strict typing of global variables
- Use strict typing of local variables
If strict typing is enabled, local and global variables
that are initialized to a string, integer or floating number
cannot be set to a value of another type. LogixNG will try
to convert the new value to the desired type, for example
a local variable of type floating number will be assigned
the value 12.0 if it's assigned 12 and it will be assigned
the value 32. if it's assigned the string "32.5".
Local and global variables that are initialized to another
type, for example array, map or LogixNG table can't be
assigned a new value.
If you want to use strict typing but still want to override
this setting for a particular local or global variable, then
initialize this variable to None. Variables
that are initialized to None will not have
strict typing,
- A new preference is added that selects if the
If Then Else action should have
Execute on change or
Always execute as the default.
- LogixNG formula now supports JSON as well. It's in particular
useful together with the action Decode JSON.
A JSON dataset can be indexed as a map or as an array, for
example by MyJson{"decoder}{"model"}[4].
The result is a Json text node, so use the str()
function to convert the value to a string afterwards.
- Local variables and Global variables can now be initialized
to boolean values as well. True or false. Case insensitive.
- LogixNG formulas now supports Java arrays as well, for example
if you use the Java method split() to split
a string. Example:
LogixNG: IQ:AUTO:0001
ConditionalNG: IQC:AUTO:0001
! A
Many
::: Local variable "a_b", init to String "Hello_World"
::: Local variable "a", init to None ""
::: Local variable "b", init to None ""
::: Local variable "a_b_array", init to None ""
! A1
Digital Formula: a_b_array = a_b.split("\_")
! A2
Digital Formula: a = a_b_array[0]
! A3
Digital Formula: b = a_b_array[1]
! A4
Log local variables
- Adds the LogixNG functions strlen() in module
String and length() in module
Common.
- The LogixNG functions cos(), tan(),
atan(), sqr() and
sqrt() has been added to the Math
module.
- ConditionalNGs can now be enabled/disabled by editing a LogixNG.
- Scripts invoked by a ConditionalNG or Module can access current local
variables. This makes it possible to use local variables as parameters for Jython scripts.
See
LogixNG Reference Chapter 13 for details.
- The class jmri.jmrit.logixng.actions.NamedBeanType has been moved to
jmri.jmrit.logixng.NamedBeanType. It should only affect JMRI developers.
- The functions round(), ceil()
and floor() has been added to the Math module.
All three rounds a floating point value. ceil() rounds up and
floor() rounds down.
- The constant oblocks has been added to
the Layout module.
- Two new preferences have been added. Log all before
and Log all after. If these are selected,
LogixNG will log every action that's executed and every
expression that's evaluated. For this to work, the LogixNG
debugger must be installed (which it is by default).
- In panel file print routine (XSLT), separate out "inline" LogixNGs from table-based.
- Add an Examples section to the LogixNG Reference.
- Add the Set a yard ladder example to the Examples section.
- For most actions and expressions, when selecting indirect addressing
of an enum, the button Show valid names are added.
Pressing this button opens a dialog that shows a list of valid values
and their descriptions.
- The LogixNG tools menu now has the option to browse All LogixNGs.
Open Tools ⇒ LogixNG ⇒ Browse All LogixNGs.
It lists all the LogixNGs, Modules, Tables and Global variables.
- The option Print disabled has been added to the LogixNG
Browse window. It adds "Disabled" to the LogixNGs, ConditionalNGs, actions
and expressions which are disabled.
Meters and MeterFrames
- Added a start-up action that will open the meters.
- Add a MeterToMemory.py sample script that copies Meter
values to Memory variables
Panel Editor
- Do not display tooltips for hidden items.
- The Disable value edit popup when not editing menu item has been
added to the context menus for blocks, memories and global variables. When the panel
is not in edit mode and the option is enabled, the pop-up to the edit the value will
not occur. The option does not apply to input and spinner icons.
Control Panel Editor
- Do not display tooltips for hidden items.
- Fixed the popup context menu on Linux.
- The Disable value edit popup when not editing menu item has been
added to the context menus for memories and global variables. When the panel
is not in edit mode and the option is enabled, the pop-up to the edit the value will
not occur. The option does not apply to input, spinner and combo icons.
Resources
Routes
- You can now specify where the control turnout should have its
known state (the default old behavior) or its commanded state
checked to see if the route should be set. This can be useful
e.g. if you have feedback set on the turnout and want to react
quickly to a commanded change.
Scripting
- Added three sample scripts
- AddPowerButton.py - shows how to add a button to the main
PanelPro window. In this case, the button turns power on and off.
- MainWindowToBack.py - moves the main PanelPro window to the back.
Useful when you want PanelPro to start up with a panel
at the front of the screen.
- MenuItemDisable.py - shows how to disable menu items so they
can't be used. Sample disables LocoNet ability to reset slots,
and ability to start the WiThrottle server. Meant for e.g.
club use.
- YAAT 3.2: Add Hold and Release commands for signal heads and signal masts.
- New ThrottleBridgeF0F8.py for bridging a throttle between Lenz and Digitrax systems
including the F0 through F8 functions.
Signals
Signal Systems
- The FS-1987 signal system was updated to have better aspect ordering.
- Improved the FS-1987 signal system.
Signal Masts
- Fixed bug where no dialogue would display when Discovering Signalling Mast Pairs and Layout Block Routing is not enabled.
Cab Signals
Throttle
- Throttle Save menu entry behaviour was updated. Documentation updated accordingly.
- Default Throttle UI on a new JMRI setup are now using icons and colors, can be reverted to classic in Preferences (see “Enable button icons when available“ and “Use large speed slider and control buttons“ throttle preferences entry )
- Throttle function button "lockable" behaviour was renamed as "latchable", as per issue #12975. Documentation updated accordingly.
- A visible property was added to function buttons defined in the label&media panels of decoderpro, this property is used by the throttle UI.
- A throttle preference was added to show/hide the speed step selector on the control panel of any new UI throttles.
- When a throttle UI layout is saved using the File->Save current throttle menu entry, if it is linked to a roster entry, the user will be proposed to also export function buttons customizations to the roster entry.
- Fix issue with throttle window title not resetting when a throttle is released
- Fix issue with selection foreground color in throttles list window
Turnouts, Lights, Sensors and other elements
- Fixed a bug where deleting the last (highest-numbered) Turnout
would throw an exception.
- Fixed a Turnout Table bug where an incorrect border may display in Turnout Feedback.
Virtual Sound Decoder
- Use block values (restored from blockvalues.xml) to get
a feasible start block for automatic start.
Web Access
- add filter capability to web /tables
- new web ui for working with cars
- web panels: add handling for text memory inputs, use content size instead of window size
Web Server
- Add browser WebSocket support message to About page
- Now displays "index.shtml" files if present in a directory.
- Fixed a problem with clicks ending up in the wrong place
on a Table, e.g. Turnout Table, etc, when using the frame server.
Where Used
- Add Logix, LogixNG and Panels to the Reporter where used.
- Add Audio support.
- Add checks for turnouts in signal heads and signal masts. Also, check for signal heads
in signal head based signal masts.
Z21 App Server
- Added basic throttle function with the Roco Z21 Application on smartphones and tablets
Miscellaneous
- Added a
SPI mechanism
for extending the Tools menu.
- The Linux and macOS application launchers and the Ant build process
have been updated to allow access to jar files in the settings:lib/
directory. This gives creators of JMRI plug-ins a way to distribute
their code separate from JMRI.
- The Windows application launcher has been updated to allow access to
jar files in the settings:lib/ directory. This gives creators of JMRI
plug-ins a way to distribute their code separate from JMRI.
- Plugins can now have help files, including images and css files, withing
the JAR file. See PR #12705 and
JmriPlugin for example and
documentation.
- Improve how JMRI avoids opening a new window on top of an existing one.
- JMRI is now using a new serial library. See the above hardware section for
which types of connections have been migrated to this new library.
- The JInput library used to access certain non-serial USB devices has been
updated to version 2.0.9. This adds support for Apple Silicon and
fixes some buffer overflows on Windows.
- The JOAL library has been updated to run natively on Windows and Linux machines.
- Improve handling of block values that contain IdTags
across shutdown and startup.
- Improved the Italian translation around file locations and turnout states.
- Improvements to File Selection Dialog boxes when displayed with "Always On Top" window frames present.
- Fixed a logging configuration issue which caused some
users to see a message about a `${jmri.log.path}messages.1.log`