NeXtMidas 3.9.0 Release Notes

(This release requires Java 8 (or later) to build and run.)

NeXtMidas SYS Option Tree Tested on:
(All tests with Java 8 and Java 11 unless otherwise noted (1))
OS Version Platform Native Compiler(2)
(SYS Option tree)
Web Browser
openSUSE Leap 42.2 Linux (x86_64) 6.2.1 Firefox 52.6
RHEL/CentOS 6.9 Linux (x86_64) gcc 4.4.7 / Intel 13.1 / Intel 14.0/ Intel 15.0 / Intel 16.0/ Intel 17.0 Firefox 52.4
RHEL/CentOS 7.5 Linux (x86_64) gcc 4.8.5 / Intel 14.0 / Intel 15.0 / Intel 16.0 / Intel 17.0 / Intel 19.0 Firefox 60.3.0
Windows 7 SP1 Windows (x86_64) pre-compiled DLLs (WinGW 5.3.0/gcc 4.9) IE 11.0.9 / Firefox 58.0
Windows 10 Pro Windows (x86_64) pre-compiled DLLs (WinGW 5.3.0/gcc 4.9) IE 11.0.45 / Firefox 58.0

XBC And NeXtOpt Tested on:

(XBC - Allows running of X-Midas Fortran/C++ primitives in NeXtMidas)
(NeXtOpt - NeXtMidas as an option tree for X-Midas)
(All tests with Java 8, and Java 11, unless otherwise noted (1))
OS Version Platform X-Midas Mode C/C++ Compiler(2) Fortran Compiler
RHEL/CentOS 6.9 Linux
NeXtOpt (X-Midas 4.12.3) Intel 13.1 / Intel 14.0 / Intel 15.0 Intel 13.1 / Intel 14.0 / Intel 15.0
NeXtOpt (X-Midas 4.14.0) Intel 14.0 / Intel 15.0 / Intel 16.0 Intel 14.0 / Intel 15.0 / Intel 16.0
NeXtOpt (X-Midas 4.15.0) Intel 16.0 / Intel 17.0 Intel 16.0 / Intel 17.0
XBC ("64Bit") gcc 4.4.7 / Intel 13.1 / Intel 14.0 / Intel 15.0 / Intel 16.0 / Intel 17.0 Intel 13.1 / Intel 14.0 / Intel 15.0 / Intel 16.0 / Intel 17.0
RHEL/CentOS 7u5 Linux
NeXtOpt (X-Midas 4.12.3) Intel 15.0 Intel 15.0
NeXtOpt (X-Midas 4.14.0) Intel 15.0 /Intel 16.0 / Intel 17.0 Intel 15.0 /Intel 16.0 / Intel 17.0
NeXtOpt (X-Midas 4.15.2) Intel 15.0 /Intel 16.0 / Intel 17.0 Intel 15.0 /Intel 16.0 / Intel 17.0
NeXtOpt (X-Midas 5.2.1) Intel 19.0 Intel 19.0
XBC ("64Bit") gcc 4.8.5 / Intel 15.0 / Intel 16.0 / Intel 17.0 Intel 15.0 / Intel 16.0 / Intel 17.0
(1) Platforms were tested on the latest versions of JDK 8 (1.8.0_191), and JDK 11 (11.0.1). See Known Third-Party Bugs to see why JDK 8u20 to 8u31 are not supported. The 64-bit version of Java should be used when running on a 64-bit system. All tests use the Java VM from Oracle (see
(2) $NM_CC and $NM_CXX was set to point to the Intel C/C++ compiler (icc and icpc), where applicable.

Online Documentation

Java 8 Migration

What Might Break (Changes in Behavior)

BUILD - The default build.props, has merged all areas from build.codeareas.other back into build.codeareas.lib (they were separated in NeXtMidas 3.1.2 because SYS has lots of files to compile). SYS still continues to keep them separated. This is not expected to impact any users.
Convert - In 3.9.0, the default behavior of Convert.o2n and Convert.s2n was improved to, at least in the case of numeric Strings and Objects with numeric value, use the appropriate Number type to preserve value and precision. There was also API added to always preserve precision by specifying that BigDecimal sohould be used. To revert to the old behavior of these conversions always returning a Double, set CoreIO.Option.DefaultToDoubleOnConvertO2nS2nEvenWhenPrecisionIsLost. See DR# 825490-3 for additional details.
FFT - A fix was made in 3.9.0 to keep the FFT NAVG from getting corrupted during restarts. Previously NAVG was incorrectly being adjusted to the number of frames in the last partial average before the restart.
TABLE - Values in a Table that start with a caret '^' will now be resolved as results, if there is a result by that name. To turn off this functionality, use CoreIO.Option.DisableResultUsageWithCaretInTable.
ZPIPE - A user contributed updated ZIPE (UCL option tree) was adopted in NeXtMidas 3.9.0. Due to the nature of the changes, we do not anticipate any significant backwards compatibility issues. This was adopted with minimal testing due to the limited user base and the code by nature being a user contributed library.
NMROOT and Classpath - As of NeXtMidas 3.7.2, when running NeXtMidas from a jar, all dependecies should be in specified in directly in the Java classpath. Example: java -DNONATIVE=false -cp "/path/to/jars/nxm-sys-native-linux-x86_64.jar:/path/to/jars/nxm-sys.jar" nxm.sys.lib.NeXtMidas
Option Tree removed - Deprecated option tree that has been removed:
nxm.sys.mmpostlegacy -> removed in NeXtMidas 3.7.2
Classes removed - Deprecated classes that have been removed: -> not used
nxm.sys.lib.DataPipe -> not used
nxm.sys.libg.ExportImage.DelayedMessageHandler -> not used
nxm.sys.libg.MTextArea -> use MJTextArea instead
nxm.sys.libg.MTextField -> use MJTextField instead
Methods/Fields removed - Deprecated methods/fields that have been removed/changed:
nxm.sys.intr.Build.AREA_LIST -> not used
nxm.sys.lib.CoreIO.recursiveDelete(File) -> use nxm.sys.lib.FileUtil.recursiveDelete(File) instead
nxm.sys.lib.Keywords.convertRep(byte, byte) -> use nxm.sys.lib.DataFile.convertHeaderRep(String) instead
nxm.sys.lib.NeXtMidas.setWinID(String) and clearPanel() -> use runCommand(String, MidasDisplay) instead
nxm.sys.lib.StringUtil.StringUtil() -> not used, meant to be private as all methods are static
nxm.sys.libg.ExportImage.exportFile(..) -> use exportToFile(Component,String,String) instead
nxm.sys.libg.ExportImage.exportToFile(ExportsImage,String,String) -> use exportToFile(Component,String,String) instead
nxm.sys.libg.ExportImage.export(..) -> use exportToFile(Component,String,String) instead
nxm.sys.libg.ExportImage.showOptionSet(...) -> not used
nxm.sys.libg.ExportImage.showTextEntry(...) -> not used
nxm.sys.libg.Layer2D.Layer2D(int, int) -> not used
nxm.sys.libg.Layer2D.isUseLocalZMin() -> use getUseLocalZMin() instead
nxm.sys.libg.Layer2D.isUseLocalZMax() -> use getUseLocalZMax() instead
nxm.sys.libg.Layer2D.useLocalZMin(boolean) -> use setUseLocalZMin(boolean) instead
nxm.sys.libg.Layer2D.useLocalZMax(boolean) -> use setUseLocalZMax(boolean) instead
nxm.sys.libg.Layer2D.useLocalZMin() -> use setUseLocalZMin(true) instead
nxm.sys.libg.Layer2D.useLocalZMax() -> use setUseLocalZMin(false) instead
nxm.sys.prim.plot.setCompression(String) -> use setRMIFCompression (String rmifCmp) instead - nxm.sys.lib.OptionTree - File[] getJarFiles(String opt) and hence String[] getJars(String opt) now includes jar files recursively in the jars area (e.g. it will follow symbolic links) of an option tree. / - InternalUseOnly sub-class Results.Function moved to parent class as Table.Function. (Note this relates to the nxm.sys.lib.Results library that is used internally and does not affect the RESULTS command.) / - Numerous methods in Table class now marked "final" to prevent incomplete overrides such as those that caused Bug 2929 (Bug 2929 was fixed in NeXtMidas 3.5.4).
Jar Files removed - The swing-layout-1.0.jar file was deprecated in NeXtMidas 3.3.0. It is no longer used by SYS and have been removed. Use standard Java 6 javax.swing.GroupLayout instead of org.jdesktop.layout.GroupLayout (they are the same, just in a different package).
Anyone with option trees that uses this JAR file can copy it from the NeXtMidas 3.6.x or prior and include them with their own option tree.
FILE/FileResource - IOExceptions that occur during file write or read operations will now be propagated, instead of the old behavior of these methods just returning -1 for an unsuccessful write or read. The new environment variable FileIONoAbort can be set to revert to the old behavior. See the ENVIRONMENT explain file and/or 841173-1 for more details.
SHELLGUI - As of 3.7.1, attempting to attach multiple SHELLGUIs to a shell is not longer allowed and will give a popup error. This was never really supported and resulted the original SHELLGUI being in a bad state.

New Features Added

Bash Support - Support using NeXtMidas from bash shell (i.e.: source $NMROOT/os/unix/
New Commands - CHECKAUTHORIZATION;SYS - Facilitates Attribute based Access Control
  - SSLCONFIGURE;SYS - Sets up Java SSL Context for either 2-way (Mutual Authentication) or 1-way authentication. Generally a SSLUtilities properties file is required. The /INSECURE switch (added in 3.9.0) is not recommended, as it sets up an all trusting truststore. With the INSECURE option, a properties file is not needed and the user's key is either auto-discovered or directly provided.
Macro/Shell Enhancements - PATH: Jar files from "jar" area (i.e. directory) of an option tree are now included recursively (which allows symbolic links) when the option tree is added to the PATH.
  - OPTION,PATH - In 3.7.1, defined an auto-loading mechanism for finding option trees simply by their inclusion in the Java classpath. This makes use of the industry standard Java Service Provider Interface (SPI), but is not compatible with the current NeXtMidas (custom) build procedures; the changes proposed for DR 667842-19 will remove this limitation. This feature is also currently limited to option trees explicitly on the command-line classpath (-cp), due to issues with the OPTION command and underlying libraries. See DRs 855053-1, 855057-1, and 855059-1 for more details.
Libraries - Convert - nxm.sys.lib.Convert can now match Java behavior of wrapping oversized integer and long values when CoreIO.Option.FavorJavaBehaviorOverTraditionalMidasBehavior is set. This deviates from traditional Midas behavior or saturating the value. - since 3.9.0
Existing Commands - The list below contains NeXtMidas commands. Each command is listed with the new feature that has been added at the request of the user.
  - KEYWORD - TCDEL now deletes all timeline keywords in the DataFile - since 3.9.0
  - HTTPSERV - The new /HTTPS switch creates encrypted HTTPS connection. The /ONEWAY switch can be added to the /HTTPS switch to enable only 1-way SSL (client key is not required). - since 3.9.0
  - PANEL - /MENUBAR now allows GLabels (and their associated GWidgets) to be placed in a drop down menu bar (when the GControl Pane is collapsed). - since 3.9.0
  - PLOT - A new view 'LatLonContinuous' was added in 3.9.0. This enables continuous longitude in a Lat/Lon view (i.e. any up to 360 degree range between -180 and +540 can be displayed). This currently does not support any Map Layers, as those Layers were not needed by the requester and the strict longitude constraint for WMS specifies the request range be between -180 and 180. The implementation was designed to match the "LOOSE" WMS standard, which some map servers support, of -180 to 540 (with a maximum range of 360), to facilitate a possible addition of continuous longitude for those Map Servers.

Known Third-Party Bugs

The following are known third-party bugs and limitations that may cause problems for NeXtMidas users.
JDK 8u20 to 8u31 - The Java Development Kit 8u20, 8u25, and 8u31's javac has a bug that prevent it from being used to build/compile the NeXtMidas baseline. This is not an issue in JDK 8u11 and prior. It is fixed in JDK 8u40. This only affects build time, Java 8 can still be used for runtime. See Java Bugs JDK-8058511 and JDK-8062272 StackOverflowError at for more information.
OpenJDK - When using OpenJDK,some users have experienced minor graphical glitches in NeXtMidas GUIs, as well as issues with monospaced fonts not actually being monospaced (which is an issue when OpenJDK is coupled with certain installations of RHEL).
XBC - Building static libraries with both the -fPIC and -i-static flag is still "experimental" in the Intel 9.1/10.x/11.x Fortran compiler (see thread 30222879 on the "Intel Software Network Forums" for details). In practice, this only appears to affect users on 64-bit systems. As a work-around only builds on 32-bit machines include the "-i-static" flags in "ifort.comp.append.32bit" and "" properties in $NMROOT/nxm/sys/cfg/build.props. On 64-bit platform, the compiler will default to dynamically linking the Intel runtime libraries, so users will need to run with the LD_LIBRARY_PATH environment set to include the Intel libraries installed location.
  - The Intel C/C++ prior to 11.1.059 (update 3) has a bug that causes the BUILD of C++ HOST primitives that access the Mu pointer to fail with an error message like: "(0): internal error: 0_1561 ... compilation aborted for $NMROOT/nxm/xbc/host/ (code 4). ".
The Intel compiler has a bug in compiling code that access a thread local storage constant pointer (which is the definition of the Mu pointer). See Intel issue DPD200138828 at GCC does not have this bug. To workaround this Intel compiler bug (by not making the Mu a const pointer), define _WORKAROUND_INTEL_COMPILER_ERROR_0_1561 in your build.props (e.g. "native.lin.cflags.append=-D_WORKAROUND_INTEL_COMPILER_ERROR_0_1561") or directly in the C++ source file.
  - There is a known issue running OpenMP in NeXtMidas. To workaround uncomment additional properties [ifort.libs.dir] and [ifort.openmp.workaround] in the SYS build.props. [ifort.libs.dir] is the path to the Intel compiler directory. [ifort.openmp.workaround] appends the necessary flags to the compiler however the library reference must be adjusted to reflect the respective Intel compiler version (if using Intel 12.x or later use -liomp5 otherwise use -lguide the current default). See the Users Guide or the example in the XBCTESTOPT2 option tree at $NMROOT/nxm/xbc/test/nmopts/nxm/xbctestopt2 .
VNC - It has been noted by users that NeXtMidas will not function in a VNC session if the -depth option is set to 32. 32 is an invalid color depth, valid -depth option settings are 8, 16, and 24. We recommend the default -depth setting of 16.
Windows - There is a known issue related to Windows Direct3D when combined with certain hardware profiles and JDKs. This results in severe performance issues with plots, causing sluggish performance, blank plots, and CPU spikes. This is especially true in JDK 7. The workaround is to disable the Direct3D support in java via the environment variable NM_USER_JVM_FLAGS=-Dsun.java2d.d3d=false).

Known Issues

StateVector - The CubicHermite (the default in NeXtMidas 3.2) and QuinticHermite (optional in NeXtMidas 3.3) interpolation options do not appear to be working properly, particularly at the first and second derivative. At this time it has not been confirmed if the issue is due to a bug in the interpolator or just the results from using bad test data (i.e. sv1.prm which came from X-Midas). This affects both the StateVector library and the SVINTERP function in CONVERT which uses it. The suggested work-around is to use the Linear interpolation option until this issue is resolved.
CALL - A SUBROUTINE does not have limited scope, scope is the same as procedure.
CONVERT - Tables created by the XML2TBL function may appear to "drop entries" when dereferenced. Since XML2TBL is deprecated, this will not be fixed, use the XML2TAB in place of XML2TBL.
GCONTROL - Some controls do not support headless mode.
LIST2 - The table for a /LEGACY select message may contain "extra" fields.
  - Row/cell selection is undefined when listing a pipe.
  - Type 2000 files with very large frame size may not load properly.
NeXtOpt - NeXtMidas commands run from inside an X-Midas macro (specifically when using PIPE or XPIPE) may exit prematurely. For example a NeXtMidas intrinsic run from the INITIALENTRY of a controls section can cause the pipe to stop prematurely.
  - May get warnings about problems mapping to the messages section if the X-Midas message queue is not up.
  - Timecode readout for large Type 2000 may give t=00:00:00.
Webstart - Oracle has been making frequent changes to the security restrictions for Web Start and Applets. Since Java 7u45, users may have to import a public certificate via the jconsole application in order to prevent Web Start application failures. See the Building Web Start Applications section of the User's Guide for details. In addition, as of JDK 7u51, you may see warnings related to jar file signing such as "No -tsa or -tsacert is provided and this jar is not timestamped." These warning do not impact NeXtMidas.
  - Java has removed support for Webstart in JDK 11
XBC - XBC does not support running two copies of the same command simultaneously.
  - Do NOT use "-check all" with the Intel compliers because some of the legacy fortran libraries make assumptions that are incompatible with "-check all" causing unnecessary aborts (SEGFAULT).

Bugs Fixed

All NeXtMidas issues and enhancements are tracked using a bug tracker/database. GForge DR number is included for all customer-submitted bugs. GForge entries are listed "n/a" for bugs that are duplicates or internal use.

Bugs Fixed in Release 3.9.0 (xx Jan 2019)
JIRA Issue GForge DR Description
NXM-2945 821334-3 List Type for Tables/Results
NXM-3075 668363-19 Merge in into UCL option tree
NXM-3084 824488-3 NeXtMidas 3.7.2 PKI/SSL Phase 1 unusable at site without fixes (JDK 8 based improvements)
NXM-3152 825391-3 Numerous Bugs in ShapeFile and DbfFile
NXM-3157 825490-3 Convert: Incorrect numeric conversions with 64-bit integer values
NXM-3185 826095-3 Need way to remove timeline keywords (partial fix)
NXM-3210 668940-19 FFT Restart Changes NAVG
NXM-3213 826567-22 Graphics severely degraded on CentOS7 (override proper method paintComponent rather than paint)
NXM-3217 881570-1 LayerT5 deletePoints does not delete all the piped points
NXM-3229 877610-1 clear method should remove plot data in all cases
NXM-3253 669085-19 GeodeticUtils.computeCircleLL has issues when crossing date line (fix complete)
NXM-3284 826930-22 PLOT: Lat/Lon Map addition of view LATLONCONTINUOUS
NXM-3294 827714-3 references pipe fields removed in X-Midas 5.x
NXM-3299 827237-22 Need OpenJDK11 support quickly (minimal support has been added)
NXM-3313 827585-22 Need Insecure SSL Connections
NXM-3316 882617-1 3.7.2 breakage - DRAGBOX not rendering while being drawn on SUSE Linux
NXM-3317 882618-1 3.8.1 breakage causing zoomed plots to render out of bounds
NXM-3321 882903-1 Panel needs menu bar capability to preserve screen space for plots
NXM-3322 827881-22 httpserv command needs to support HTTPS

Deprecated Functionality

The following functionality has been deprecated and will be removed from future versions:
Command Deprecated Item Replacement Deprecated Since
PLOT ZOOM and DRAGBOX messages accessed with,, etc. Use,, etc. 2.3.0
STATISTICS IMEAN= MEAN= (contains real and imaginary values, see explain file) 2.3.0
CONVERT The XML2TBL and TBL2XML functions. Use XML2TAB and TAB2XML. 2.5.0
UPDATE Command dictionary entries without '*' denoting minimum allowable abbreviation. Include a '*' at the end of the command name in the dictionary if no abbreviation is allowed, otherwise note abbreviation as desired. 2.5.0
TextFile Automatic enabling of NOABORT flag. Use NOABORT or FORCEABORT flags as required. 2.5.0
TextFile Automatic conversion of INOUT flag to OUTPUT when file not found. Use INOUT or OUTPUT flags as required. 2.5.0
Results Use of A: with results. Use S:, behavior of A: will change in future releases. 2.5.2
DataFile Use of CREATOR= main header keyword. Use IO= and VER= keywords. 2.5.3
NMPOSTLEGACY The user-contributed NMPOST (Legacy) option tree is out of date and is usually replaced with author's version. Get latest from the authors of NMPOST. 3.3.1
public fields in baseline classes All public fields in classes in option trees (SYS, DSP, UCL, etc.) included in the baseline (e.g. nxm.sys.lib.BaseFile, nxm.sys.lib.DataFile, nxm.sys.lib.Shell, etc.) have always been meant for read-only and/or internal use only. Some fields may transition to protected or private in favor of the get/set methods as early as 3.9.0. Use appropriate public get/set methods. 3.5.1
PLOT All public fields in nxm.sys.prim.plot, nxm.sys.libg.MPlot, nxm.sys.libg.Layer* (e.g. Layer1D, Layer2D, etc.) have always been meant for internal use only. Most will transition to protected access in 3.9.0 but will still be for internal use only. Use appropriate public get/set methods. 3.5.1
As of release 2.2.0 LIST is considered to be an "End of Life" primitive. The LIST primitive is scheduled for replacement by LIST2 in future releases.
See $NMROOT/htdocs/api/sys/deprecated-list.html for a list of deprecated library methods.
Deprecated functionality will continue to function for one year or two stable releases after first being marked as deprecated, but its use may result in a deprecation warning (either at compile time or run time). After one year, any deprecated functionality is subject to removal.

(Back to Release Notes Summary)