Beta v7.81.1502 changes:
1.Item 1, updated. This looks like it is working correctly on XP
and onwards.
2.Item 2, added. The tray tip implementation is based on tips expiring
within a delay period and a maximum queue size. For this feature, the
way tips are ordered/expired had to be changed. For non-permanent
tips, the behaviour should still be identical to previous versions.
3.Item 3, updated. mIRC currently limits itself to the 7.0 SDK for
XP compatibility. But I occasionally test with newer SDKs which can
introduce changes to APIs/structs/etc.
4.Item 4, fixed
https://forums.mirc.com/ubbthreads.php/topics/2734085.Item 5, changed
https://forums.mirc.com/ubbthreads.php/topics/2734296.Item 6, fixed
https://forums.mirc.com/ubbthreads.php/topics/2734567.Item 7, changed. Previously, mIRC was loading the entire dialog from
the language DLL and using it as is. This allowed translators to
size/position controls to fit translated text. Unfortunately, this
lead to issues, eg. where a control style/size/position changes in
a subsequent version, and a translator would need to propagate all
of these changes to their language DLL, and re-test them for newer
releases. This makes updating language DLLs far more difficult.
8.Item 8, significant progress towards a 64bit version.
Note: this beta release is the standard 32bit mIRC that includes
the changes described below. A 64bit mIRC is not being released yet.
All external libraries have been updated to compile as both 32bit
and 64bit. This took some work as the existing solutions were created
and customized over many years for just 32bit builds. As multiple
builds are now needed for the external libraries that mIRC uses,
ie. debug/release 32bit/64bit/arm64, I did not want to go through
the process of re-applying custom build changes every time
a new library is released. So I re-installed all libraries from
original sources and used their default configs, naming conventions,
paths, and other settings, where possible, and compared all of
these to the older configurations to ensure there were no critical
differences in build options. Most of the Cmake build files still
require tweaks, eg. for XP compatibility, so these have now been
documented per library and automated where possible. This setup
also makes it easier to add ARM64 builds at a later date.
I was then able to compile and test a full 64bit mIRC under Visual
Studio 2017/2022 and different SDK versions for testing. Reviewed
reports from Visual Studio 2022 static code analysis and cppcheck.
Most warnings were false positives but some related to pointers being
stored in INTs which required code changes. Mostly minor cast warning
changes to 180+ files. Repeated and reviewed the above process
several times, focusing on common 32/64 bit porting issues, with
the aim of minimizing code changes and hardening code.
Compiled 32bit/64bit mIRC with Address Sanitizer for testing.
Also tested 32bit mIRC with /largeaddressaware enabled, giving it
access to 4GB memory, and tested on Windows with top down memory
allocation enabled. This feature requires that all external 32bit
libraries, including custom DLLs, are capable of handling the full
32bit pointer range for shared memory, so it will not be enabled
in the 32bit version of mIRC as this could break backward
compatibility. The /largeaddressaware setting is just being used
for local testing.
No crashes or issues so far with various units tests.
Notes:
1) Although mIRC can now run as a 64bit application, it is still
internally limited by INT variables for most features, ie. limited to
two billion users in your notify list, lines in a window, etc. There
are no plans to change this as this limit is far beyond what mIRC
can practically handle in these contexts anyway.
2) For the scripting language, features that store binary data, such
as &binvars, are also limited to INT bytes. This means that the 64bit
is limited to, at most, 2 GB per &binvar. Changing this to an INT64
would require significant code changes, so has been left as it is for
now as I would like a stable 64bit that can be tested against a stable
32bit.
3) The way floating point errors are handled had to be changed
since the 64bit uses SSE2, whereas the 32bit was using IA32-specific
code that had been stable for decades. The code for both 32bit and
64bit has been standardized to SSE2 and to use a platform independent
method of checking for floating point errors for x86, x64, and ARM64
platforms.
4) Custom 32bit DLLs that currently work with the 32bit mIRC will
need to be updated to 64bit to work with the 64bit mIRC.
5) Performed more tests with mimalloc and the 64bit version. This may
be enabled in the 64bit for testing in the future.
9.Item 9, updated. The OpenSSL v3.0.17 branch is LTS to September 2026,
however, I tested OpenSSL v3.5.1 and this seemed to work without any
issues, and did not require code changes, so have decided to change
to it for LTS to 2030.
10.Switched from Windows 10 to 11 for development machine, so all of my
testing now takes place on Windows 11, with limited testing on VMs
for other Windows versions.
Changes:
1.Updated local host look up method to use a non-deprecated API.
2.Added $tip() support for delay of -1 to indicate a permanent tip
that does not expire until manually closed.
3.Updated $input() to size dialog correctly in newer versions of the
Windows SDK.
4.Fixed $urlget() crash bug when credentials are passed in URL.
5.Changed numeric 650/651 support to handle InspIRCd not sending 651
End of Services Messages numeric.
6.Fixed handling of swapped mouse buttons in different contexts.
7.Changed the way that dialogs are loaded from language DLLs. Only
the text in a dialog is now used, as opposed to loading and using
the entire dialog.
8.Updated all external libraries to support compilation as both 32bit
and 64bit, in preparation for a future 64bit release and possible
ARM64 support. Updated all routines to use 32bit/64bit compatible
types, performed static code analysis, compilation and testing under
different Visual Studio versions, SDKs, and platform toolsets,
focusing on common 32/64 bit porting issues, with the aim of
minimizing code changes and hardening code.
9.Updated libraries to LibZip v1.11.4, LunaSVG v3.3.0, and TagLib
v2.1.1. Also updated from the OpenSSL v3.0.x branch to v3.5.1.