This release brings the exception handling introduced in experimental form in release 3.0-7 into fully supported form. Combined with recent extensions to QM’s object oriented programming capabilities, these features help to make the programming environment more familiar to developers from other backgrounds.
As well as supporting user defined exceptions, the enhanced exception handling mechanism allows applications to trap many of the system generated events that would otherwise cause a program to abort. These can be trapped with specific exception handlers or by use of QM’s exception class mechanism to group exceptions based on broader categories.
A program can use the CAUGHT() function to determine whether there is an exception handler active for a named exception.
The CLASS statement has been enhanced to allow initialisation data to be passed into inherited classes.
For ECS users, a user definable character type flag has been added to the ECS character maps. This can be set/cleared using EDIT.MAP and tested in programs using the QMBasic IS.USER.CHAR() function. The EDIT.MAP command now also includes the ability to import modifications from a text file.
Installation of QM on a USB memory stick no longer requires the USBConfig tool to be run.
Except when installing on a USB memory stick, the Windows installer now adds the bin subdirectory of the QMSYS account to the PATH environment variable if it is not already present.
The extended statistics report from ANALYSE.FILE has been enhanced to include a group utilisation histogram.
The COMO command now allows an alternative file name to be specified.
The LIST.COMMON command DETAIL option reports where each common block was created as an aid to diagnosis of size mismatch errors.
The NO.ECHO.DATA setting of the OPTION command is equivalent to compiling all programs with the $MODE compiler directive option of the same name. It supresses display of input taken from the DATA queue.
The PHANTOM command supports a mechanism to change the log file location.
The SED editor uses terminfo to establish bindings for special keys. SED also now has a READ.ONLY command to set a buffer to read-only mode, minimising the risk of accidentally overwriting data.
The QMBasic DIR() function has been extended to include the size of each file.
An optional DESCENDING qualifier has been added to the QMBasic SSELECT, SSELECTN and SSELECTV statements to sort into descending order.
The WRITE.DELETE.THEN.ELSE setting of the QMBasic $MODE compiler directive can be used to enable use of THEN/ELSE in place of ON ERROR when trapping trigger function errors in WRITE or DELETE. Beware that use of this potentially exposes a semantic ambiguity in programs.
A new globally catalogued subroutine, !OSCOPY, simplifies copying of files or directories at the operating system level from within programs.