What Was New in Release 3.0?

Installation of QM in ECS mode now creates or updates the MESSAGES file to be in ECS mode, allowing use of characters outside the 8-bit set.

The CT and DUMP commands have been modified such that data records containing ECS characters are now displayed using four digit hexadecimal values in HEX and BINARY modes.

QMBasic applications run as QMConsole sessions on Windows or using AccuTerm with a terminal type that has a suffix of -at can enable mouse click events using the MOUSE ON statement and trap these with KEYCODE() or KEYCODEV(). The full screen mode of the QMBasic debugger also now supports use of the mouse.

The QMBasic WRITE and WRITEU statements now support a CREATING.SEQKEY option to create a sequential numeric key automatically. There are corresponding modifications to the FCONTROL() and FILEINFO() functions, the CONFIGURE.FILE command, and the QMClient API.

Previous releases of QM have fully enforced the ACID (atomicity, consistency, isolation, durability) rules for transactions such that updates committed in a nested transaction remain applied even if the parent transaction is rolled back. The NON.DURABLE.TXN setting of the $MODE compiler directive can be used to change the behaviour of COMMIT in a nested transaction such that any updates become part of the parent transaction.

The !LISTU() subroutine has been extended to return the login time as an epoch value as well as the previously supported local time zone format.

The QMClient API has been extended to allow an application to instantiate and interact with QMBasic object oriented programming classes on the remote server.

QM 3.0-7 (released 1 Mar 2013)

Pick style A/S-type dicitonary items can now use the CALL processing code in the correlative expression (field 8).

The output from the CONFIG command now marks those parameters that have been set in the qmconfig file or modified in the current QM session. Unmarked parameters take their default values.

The FIND.FILE command reports summary information about a file, including details of the cause if a file cannot be opened.

QMBasic includes an experimental development to support the concept of TRY/CATCH exception handling as found in many other programming languages.

QM 3.0-6 (released 14 Feb 2013)

This release introduces support for IPV6 network addresses in all networking elements of QM, including direct entry to QM via telnet, the QMBasic socket operations and QMNet. IPV6 support must be enabled via the IPV6 configuration parameter to indicate that it is available in the underlying operating system.

The MCP conversion code now has an optional element to modify the charater used to replace non-printing characters.

The LOCAL.CAT.RELATIVE setting of the OPTION command changes the default behaviour of the CATALOGUE command to store the relative pathname of the program in the VOC item. This makes it easier to move accounts to a new location but prevents use of remote (R-type) VOC items that reference locally catalogued programs in other accounts. The FULL.PATH option of the CATALOGUE command overrides this setting.

The OPTION command has been modified to show an encoded version of the option settings that can be used in place of option names when setting options. Used in, for example, the LOGIN paragraph, this can give a small performance improvement to applications that set many options in short life processes.

The SP.VIEW command now has an optional BY or BY.DSND clause to modify the sort order of the displayed item list.

QMBasic class modules can now declare public and private variables using the SHARED statement. Variables declared in this way are common across all instances of the same class in a QM process.

The new External Call Interface enables a QMBasic application to call functions written in other languages such as C.

There is an internal change to the way in which public QMNet server definitions are stored. Reverting to an older release will require that definitions for any servers that use a non-default port number will need to be re-entered.

QM 3.0-5 (released 10 Dec 2012)

This release adds support for QM on IBM z-Series systems running Suse Linux.

The command language IF statement used in a paragraph now supports the IN and NOT.IN opertors to test whether an item is in or not in a list of alternative values. Use of this operator can simplify handling of processing differences based on the @TTY variable.

The query processor now supports the MEDIAN, MODE and RANGE field qualifiers for additional statistical data.

The X breakpoint control option can be used to capture the previous value of a breakpoint field in @BPV. See the documentation of the BREAK.SUP keyword for an example of how to use this option.

The QMBasic OSPATH() function allows a variety of operations within the underlying file system.

As an aid to compiler error checking, QMBasic now supports $MODE EXPLICIT to require all variables, including scalars, to be declared in a DIMENSION statement.

A new configuration parameter, NETWAIT, can be used to set a timeout applied when opening a QMNet connection. The default value is 10 seconds.

QM 3.0-4 (released 16 Oct 2012)

This release adds support for QM on Solaris 10 on Intel processors and for the Raspberry Pi. Note that the default weak password encryption mode of Solaris is not accepted for network connections to QM. The Installation section of the QM Reference Manual explains how to change the encryption.

The Virtual File System has been extended to add handler functions that correspond to QMBasic alternate key index operations (SELECTINDEX, SETLEFT, SETRIGHT, SELECTLEFT, SELECTRIGHT). Also, VFS handlers can now be written as external C programs that can be used with API libraries provided by other database vendors. Because many VFS handlers may not be able to support index scanning options, a new FILEINFO() key, FL$INDEX.SCAN, allows an application to determine whether this functionality is supported.

Use of the ALL keyword in a SEARCH command includes the record id in the search.

The SETPTR command now supports FONT and FONT.SIZE options for use in conjuction with the GDI option on Windows systems allowing selection of a font name and size. There is a growing trend for printer vendors to supply only GDI mode drivers where the default font settings may not be appropriate.

A new character type function, IS.ALNUM(), has been added to test whether a character is alphanumeric.

The QMBasic OPTION() function can be used to retrieve the state of QM options.

Key value 1051 to the QMBasic SYSTEM() function can be used to determine whether QM is running from a USB memory device installation.

A new QMBasic function, IS.WIDESTR(), allows an application running in ECS mode to determine whether a string contains any double width characters.

QM 3.0-3 (released 10 Aug 2012)

The CATALOGUE command now has an option to specify the prefix character for a globally catalogued subroutine separately from its call name, allowing use of a prefix when cataloguing from a select list.

The @LINE token can be used in QMBasic programs as the source line number in the module being compiled. The @WHERE token is similar but includes line numbers in nested include records in the form "21.4.31". These tokens may be useful in constructing program error messages.

The QMBasic FIELD() function and the equivalent [D,I,N] operator have been extended to allow use of an asterisk in place of the number of elements of the string to be extracted when all beyond the start position is required.

Key value 1029 (FL$LAST.PART) to the QMBasic FILEINFO() function returns the last value from evaluating the partitioning algorithm for a distributed file, including where an error is reported because the part does not exist.

Key value 1024 (PU$PATHNAME) to the QMBasic GETPU() function returns the pathname of the output file of an open print unit.

QMBasic now has a REDIMENSION statement (short form REDIM) that allows a default style matrix passed as an argument into a subroutine to be redimensioned in that subroutine. Used with a matrix that is not a subroutine argument or is a Pick style matrix, this statement is identical to use of DIMENSION.

Two new key values have been added to the SYSTEM() function. Key 1049 returns true (1) if terminal output has been suppressed with HUSH. Key 1050 returns true if the current user has administrator rights.

QMBasic subroutines can now be globally catalogued with a hyphen prefix for improved compatibility with other environments.

The NETDELAY configuration parameter can be used to set a period in seconds for which the server connection for a QMNet file will remain open after closing the last file in use on that server. This can improve performance of applications that repeatedly open files on the same QMNet server.

The Basic pre-processor provided as source code in the BP file of the QMSYS account has been extended to allow use of AND and OR in conditional compilation tests ($IFDEF and $IFNDEF).

QM 3.0-2 (released 25 Jun 2012)

The value of the FSYNC configuration parameter is temporarily set to zero while building an alternate key index.

QMBasic object oriented programming method references can include an empty pair of brackets for improved compatibility with other OO langauages.

The QMBasic SWAPMARKS() function now returns the original data when used on a non-ECS mode system.

The equate token handling added to the QMBasic debugger in release 3.0-0 has been extended to allow equated tokens on the right of a SET command and in the form /name to show the value of the token.

An optional !ERRLOG.FILTER subroutine can be catalogued to provide error log filtering.

QM 3.0-0 (released 29 Apr 2012)

This release includes the first stage of adding extended character set (Unicode) support to QM. Handling of double width glyph characters is known to be incomplete. The installation process can install either the 8-bit character version or the ECS version. Both versions are included in the installation download files.

The maximum length of a catalogued program call name has been increased to the lower of 128 and the value of the MAXIDLEN configuration parameter.

The CT command now supports the ID.SUP and NUM.SUP keywords.

The QMBasic SSELECT, SSELECTN and SSELECTV statements now all have an optional RIGHT.ALIGNED clause to cause the list to be generated using a right aligned sort, typically for numeric data.