Powered by QM on a Linux server
Help and Support

What Was New in Release 2.12?

QM 2.12-8   (released 1 Mar 2012)

The QMBasic compiler can now produce a concordance file that shows the relationship between the modules that make up the application. For details see the BASIC command in the QM Reference Manual.

For improved compatibility, the CHANGE(), COUNT(), COUNTS(), INDEX(), INDEXS() and SWAP() functions are now influenced by $MODE settings that determine whether overlapping substrings are allowed.

The QMBasic EXECUTE and OS.EXECUTE statements now have an optional SILENT clause as an alternative to use of CAPTURING when the output is to be discarded.

The QMBasic PAUSE statement returns the user number of the process that executed the corresponding WAKE via the INMAT() function.

An extension to the FSYNC configuration parameter allows force writing of all replication log file updates. This gives best best reliability through system failures but is likely to have a severe impact on performance.

QM 2.12-7   (released 26 Jan 2012)

The DI correlative code (convert external date to internal day number) can now be used in field 8 of an A or S-type dictionary record.

The EXECUTE.LIST command executes one or more commands for each entry in a select list.

The FIND.PROGRAM command now has a DETAIL option for an extended report.

The MAP command now has a detail option to show the source pathname of each catalogued item, if available. Programs compiled on earlier releases may not show this.

The $IFDEF and $IFNDEF QMBasic compiler directives can now evaluate multiple tokens in a simple and/or relationship.

The QMBasic compiler now supports $ERROR and $WARNING for compilation messages generated from within the source code.

The QMBasic $MODE directive TRAP.UNUSED.MAIN setting has been added as an alternative to TRAP.UNUSED. The difference is that the new mode setting only traps variables that are set in the main body of the program and never referenced, ignoring any that are set in include records.

The QMBasic NV() and NS() functions build a dynamic array of value and subvalue positions corresponding to a supplied data item.

The QMBasic OBJINFO() function has been extended to return a dynamic array containing all the public names in the class and any inherited classes.

The QMBasic PARSE() function parses a string against a pattern match template, returning a copy of the string with a delimter character inserted between the portion of the string matching each pattern element.

Four new QMClient functions have been added. QMIConv() and QMOConv() apply a conversion code to a supplied data item. QMEvaluate() evaluates a dictionary item such as an I-type. QMClearFile() clears a file.

The FEATURE configuration parameter controls miscellaneous product features. At this release, the only supported key value is 1 to suppress the prompt re updating the VOC on entry to QM after installation of a new release.

QM 2.12-6   (released 25 Oct 2011)

This is a bug fix release only. There is no new functionality.

QM 2.12-5   (released 24 Oct 2011)

This release corrects a potential security risk on Linux systems that could allow a QM process to run with the incorrect access rights.

The query processor can now produce XML format reports. See the XML query processor keyword for details.

The FMT qualifier to the VERTICALLY query processor keyword has been extended to allow a default format code to be specified that will be applied to all display clause elements except those that are defined in the dictionary as right justified or those with their own explicit FMT qualifier. This enhancement allows unwanted line breaks in data items to be omitted without needing to create separate dictionary items for use in vertical reports.

The QMBasic READCSV and MATREADCSV statements have been extended to allow specification of an alternative delimiter.

The QMBasic SERVER,WINDOW() function, available only on Windows systems, opens an asynchronous application window to run programs such as Excel, Word or a web browser. It is of particular use in QMConsole sessions where the client side asynchronous command execution feature of AccuTerm is not available.

The QMClient c library on Windows (qmclilib.dll) now supports use in multi-threaded programs.

QM 2.12-4   (released 28 Sep 2011)

Multiple USB memory stick installations on Windows can now run in parallel with a server based installation.

The PSTAT command has been extended to allow display of QMNet server details.

The SELECTINDEX command to build a select list from an alternate key index at the command prompt now supports a value option to select records where the indexed field has a specified value (as in the QMBasic equivalent).

QM 2.12-3   (released 23 Sep 2011)

Dictionary link records can now be used to reference A/S type items.

The DEFAULT.MV mode of the OPTION command can be used to specify that C, D or I type dictionary items in which the single/multivalue flag is blank to be treated as multivalued instead of defaulting to single valued.

The QMBasic compiler now supports use of most statements that have a THEN/ELSE clause as conditional elements in a WHILE or UNTIL statement.

For compatibility with other systems, the ADDS(), DIVS(), MULS() and SUBS() functions as synonyms for the standard arithmetic operators. These are mostly relevant when migrating software that used these functions to perform arithmetic operations on dynamic arrays. They are strictly unnecessary in QM because the standard operators support this capability.

The QMBasic CALL statement has been extended to allow the Pick style call with a file name and program name.

The QMBasic SSELECTN and SSELECTV statements have been added to mirror the capabilities of the unsorted SELECTN and SELECTV statements. As with the unsorted version, there is a compiler mode switch to make SSELECT equate to either of these.

QM 2.12-2   (released 18 Aug 2011)

This release introduces 64-bit versions of QM though some are available only on controlled release at this stage.

A new mode flag, R, has been added to field 6 of the F-type VOC entry to specify that the file is to be read-only.

The MT conversion code now includes an M option to specify that the time value in an output conversion is in milliseconds. The fractional seconds will be included in the converted data if the S option is also present.

The NLS (national language support) command and the corresponding QMBasic operations have been extended to enable a different decimal separator to be used for implicit conversions than for OCONV(). See the QM Reference Manual for the rationale behind this capability.

The QMBasic CSV.MODE statement has been extended to allow an alternative delimiter character to be specified.

The QMBasic PRECISION statement now has an option to inherit the precision of the parent program.

The !ACCOUNT.RULES() subroutine allows an application to determine the accounts that a specified user may or may not enter according to rules set in the QM application level security system.

A new keyword has been added to the $DEBUG.OPTIONS record, NO.SOURCE.WARNING, to suppress the message displayed if a source file cannot be found when using the QMBasic debugger.

QM 2.12-1   (released 3 May 2011)

This is a bug fix release. There is no new functionality.

QM 2.12-0   (released 27 Apr 2011)

This release introduces the concept of a "user mode" installation on Linux, Unix and Mac based systems. An installation of this type does not require the user to have root access to the system but, as a result of this, potentially reduces system security. It is possible to install multiple user mode instances of QM on the same system, each operating in its own isolated environment and each separately licensed. There are some important rules to observe when using a user mode installation as detailed in the Installation section of the QM Reference Manual.

QM now has limited support for triggers on directory files. These will be called for all updates made to the file from within QM except for sequential file processing (WRITESEQ, etc) and use of OSWRITE or OSDELETE.

It is no longer necessary for trigger subroutines and subroutines called from either triggers or alternate key index expressions to be visible in the cataloguing system from the QMSYS account when using QMNet. The QMNet server process will effectively execute in the account in which the file was opened.

A similar modification to the replication subscriber process means that it is also no longer necessary for subroutines called from index expressions to be catalogued in the QMSYS account when using replication.

Account replication now includes an option to prompt for confirmation before replicating a command on a remote system.

The DIR_DICT file in the QMSYS account (a template dictionary to use with directory files) has been extended to contain three new items: DAYS for the number of days since the record was modified, DTM for the actual date/time of modification, and OWNER for the username of the owner of the record (not Windows).

The TRANS() function in a dictionary I-type item can now return the value of an A, S or C type item from the target file.

The MCS conversion code converts the first alphabetic character of each sentence in the supplied data to uppercase.

The CREATE.ACCOUNT and CREATE.FILE commands now support options to set ownership of the account or file to a specific user and group on Linux, Unix and Mac systems. In the case of CREATE.FILE, the behaviour when these options are not present defaults to using the user and group of the process that executes the command but can be set to inherit ownership from the account directory by use of the INHERIT.OWNERSHIP mode of the OPTION command.

The CREATE.INDEX and MAKE.INDEX commands now check for a VOC record named $INDEX.PATH to specify the default location for indices. A command option is available to override this action.

The LISTF, LISTFL and LISTFR commands can now include a WITH or WITHOUT clause that references ENCRYPTION, REPLICATION or TRIGGER to show only files that meet the specified criteria.

The LIST.REPLICATED command can be used to report a summary of files for which replication is active.

The LIST.TRIGGERS command has been extended to handle multi-files and to report triggers applied to dictionaries.

The REDO command can be used to repeat a command at specified intervals and/or a specified number of times.

The SP.ASSIGN command now shows the form queue associated with the default printer if no command options are present.

The query processor SEARCH command now includes a FOR keyword to allow search strings to be specified on the command line. There is also now no limit on the number of search strings that may be specified in a SEARCH command.

The QMBasic compiler now supports use of the NO.QUERY keyword in either the $CATALOGUE directive or the CATALOGUE entry in the $BASIC.OPTIONS record to suppress the prompt that normally appears if the program is already catalogued in a different mode.

Key value 1045 to the QMBasic SYSTEM() function returns the time at which QM was started as an epoch value.

A new command, WINDOW, in the full screen mode of the QMBasic debugger can be used to change the command window size.

Two new functions, QMCallx() and QMGetArg(), are available in the C version of the QMClient API. These remove the need for an application to pre-allocate space for the longest possible value of argument variables returned by a called subroutine.

A new function, QMGetVar(), has been added to the QMClient API to retrieve the value of an @-variable from the server.

The SECURITY configuration parameter can be used to set system wide security options. At this release the only option available is to require the user to have write access to the dictionary when using the EVAL clause in a query.

This release introduces a new manual to the documentation set, tyqm.pdf, that is a "Teach Yourself QM" self-study training package. Based on material used by Ladybridge Systems for trainer led courses, this package assumes no prior knowledge and works through a series of practical exercises that ultimately construct a simple sales order processing system.

Other Releases